In [1]:
import numpy as np
import pandas as pd
import matplotlib.pylab as plt
%matplotlib inline
In [2]:
from rep.utils import train_test_split
from sklearn.metrics import roc_auc_score
sig_data = pd.read_csv('toy_datasets/toyMC_sig_mass.csv', sep='\t')
bck_data = pd.read_csv('toy_datasets/toyMC_bck_mass.csv', sep='\t')
labels = np.array([1] * len(sig_data) + [0] * len(bck_data))
data = pd.concat([sig_data, bck_data])
variables = ["FlightDistance", "FlightDistanceError", "IP", "VertexChi2", "pt", "p0_pt", "p1_pt", "p2_pt", 'LifeTime','dira']
In [3]:
X_train, X_test, y_train, y_test = train_test_split(data, labels, train_size=0.5)
In [4]:
X_train.shape
Out[4]:
Тип сети задаётся опциональным параметром net_type. fit и predict работают в полном соответствии с sklearn'овской спецификацией, никаких предварительных преобразований входных данных производить не нужно. Также, в соответствии с идеологией REP, поддерживается аргумент features, отвечающий за то, по каким признакам идёт построение модели.
In [5]:
import neurolab as nl
f2 = nl.trans.SoftMax()
f = nl.trans.LogSig()
from rep.estimators import NeurolabClassifier
clf = NeurolabClassifier(show=1, layers=[300], transf=[f, f], epochs=10, trainf=nl.train.train_rprop, features=variables)
In [6]:
%time _ = clf.fit(X_train, y_train)
In [7]:
predict_labels = clf.predict(X_test)
predict_proba = clf.predict_proba(X_test)
In [8]:
from sklearn.metrics.metrics import accuracy_score
score = accuracy_score(y_test, predict_labels)
print(score)
In [9]:
print predict_labels
print predict_proba
print np.allclose(predict_proba.sum(axis=1), 1)
np.unique(predict_proba.sum(axis=1))
Out[9]:
In [10]:
from sklearn.metrics import roc_auc_score
roc_auc_score(y_test, predict_proba[:, 1])
Out[10]:
Проверим, что set_params работает
In [18]:
clf.set_params(epochs=5, show=0)
%time clf.fit(X_train, y_train)
Out[18]:
In [19]:
predict_proba = clf.predict_proba(X_test)
In [20]:
roc_auc_score(y_test, predict_proba[:, 1])
Out[20]:
In [21]:
from sklearn.metrics import classification_report
from sklearn.metrics import zero_one_loss
print "Accuracy:", zero_one_loss(y_test, predict_labels)
print "Classification report:"
print classification_report(y_test, predict_labels)
Проверим, что сеть нормально (де-)сериализуется на диск
In [22]:
import pickle
pickle.dump(clf, open("dump.p", "wb"))
clf_loaded = pickle.load(open("dump.p", "rb"))
In [23]:
predict_proba = clf_loaded.predict_proba(X_test)
roc_auc_score(y_test, predict_proba[:, 1])
Out[23]:
In [ ]: