每次训练我的分类器时,我都会得到不同的误报率和误报率。所以我想做的是训练分类器100次,这样我就可以得到假阳性率和假阴性率的平均值。
print('\nExecuting Logistic Regression')
all_fpr = []
all_tpr = []
all_roc_auc = []
all_acc = []
all_recall = []
for i in range(0, 100):
lr_values = lrRocAucTest.execute(X_train, y_train, X_test, y_test)
all_fpr.append(lr_values['fpr'])
all_tpr.append(lr_values['tpr'])
all_roc_auc.append(lr_values['roc_auc'])
all_acc.append(lr_values['accuracy'])
all_recall.append(lr_values['recall'])
以下是lrRocAucTest的代码
def execute(X_train, y_train, X_test, y_test):
clf = Pipeline([
# ('feature_selection', SelectKBest(f_classif, k=9)),
('classifier', LogisticRegression(C=0.1))
])
clf.fit(X_train, y_train)
predictions = clf.predict(X_test)
try:
accuracy = accuracy_score(y_test.values.ravel(), predictions)
except AttributeError:
accuracy = accuracy_score(y_test, predictions)
cnf_matrix = confusion_matrix(y_test, predictions)
recall = (cnf_matrix[1, 1] / (cnf_matrix[1, 0] + cnf_matrix[1, 1]))
y_prediction = clf.decision_function(X_test)
try:
fpr, tpr, _ = roc_curve(y_test.values.ravel(), y_prediction)
except AttributeError:
fpr, tpr, _ = roc_curve(y_test, y_prediction)
roc_auc = auc(fpr, tpr)
values = {'fpr': fpr, 'tpr': tpr, 'roc_auc': roc_auc,
'accuracy': accuracy, 'cnf_mtx': cnf_matrix, 'recall': recall}
return values
上面的代码执行Logistic回归分类器并返回一些值。我对fpr和tpr很感兴趣。这些是[1, 2, 3,..., n]
形式的数组,fpr和tpr的长度相同。
我要做的是获取all_fpr
这是一个数组列表和所有数组的平均值,以便生成一个单独的数组。我举一个例子来说清楚。假设我们有3个阵列[1.0,2.0,3.0],[8.0,9.0,10.0],[14.0,15.0,16.0]。得到的单个数组将是[7.7,8.7,9.7]。
有没有办法在scikit-learn中多次运行分类器?或者我必须自己编写逻辑吗?