Skip to content

Instantly share code, notes, and snippets.

@flaviovdf
Created June 10, 2013 22:42
Show Gist options
  • Save flaviovdf/5753079 to your computer and use it in GitHub Desktop.
Save flaviovdf/5753079 to your computer and use it in GitHub Desktop.
Learning mod 2 (xor) using binary representation
from sklearn import grid_search
from sklearn import metrics
from sklearn import tree
import numpy as np
def create_sample_decimal(num_rows, max_val):
X = np.random.randint(0, max_val, size=(num_rows, 2))
y = (X[:, 0] + X[:, 1]) % 2
return X, y
def create_sample_binary(num_rows, max_val):
first_col = np.random.randint(0, max_val, size=num_rows)
second_col = np.random.randint(0, max_val, size=num_rows)
first_col = np.asanyarray(first_col, dtype=np.uint8)
second_col = np.asanyarray(second_col, dtype=np.uint8)
bin_first = np.unpackbits(first_col)
bin_second = np.unpackbits(second_col)
bin_first = np.reshape(bin_first, (num_rows, 8))
bin_second = np.reshape(bin_second, (num_rows, 8))
#simple sanity check for the reshape above
assert (bin_first[0] == np.unpackbits(first_col[0])).all()
X = np.hstack((bin_first, bin_second))
y = (first_col + second_col) % 2
return X, y
def main():
n_train = 1000
n_test = 100
max_val = 255
use_bin = True
if use_bin:
X_train, y_train = create_sample_binary(n_train, max_val)
X_test, y_test = create_sample_binary(n_test, max_val)
else:
X_train, y_train = create_sample_decimal(n_train, max_val)
X_test, y_test = create_sample_decimal(n_test, max_val)
clf = tree.DecisionTreeClassifier('entropy')
estimator = clf.fit(X_train, y_train)
y_predict = estimator.predict(X_test)
print metrics.classification_report(y_test, y_predict)
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment