Python 多次培训一名分级员,以便在Scikit学习中取得平均成绩
每次训练分类器时,我都会得到不同的假阳性率和假阴性率值。所以我想做的是训练分类器100次,这样我就可以得到假阳性率和假阴性率的平均值Python 多次培训一名分级员,以便在Scikit学习中取得平均成绩,python,scikit-learn,classification,Python,Scikit Learn,Classification,每次训练分类器时,我都会得到不同的假阳性率和假阴性率值。所以我想做的是训练分类器100次,这样我就可以得到假阳性率和假阴性率的平均值 print('\nExecuting Logistic Regression') all_fpr = [] all_tpr = [] all_roc_auc = [] all_acc = [] all_recall = [] for i in range(0, 100): lr_values = lr
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'])
这是lRocauctTest的代码
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
上面的代码执行逻辑回归分类器并返回一些值。我对fpr和tpr感兴趣。这些是[1,2,3,…,n]
形式的数组,fpr和tpr的长度相同
我要做的是得到all\u 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中多次运行分类器?或者我必须自己写逻辑吗?不要说“运行分类器”,这可能意味着“训练”或“预测”。你是说“火车”。另外,您还没有显示实例化
lrocauctest
的代码,它可能包装了采用随机种子random\u状态的LR分类器。为了确定性和再现性,您可能希望在每次运行时将该种子设置为一组已知值中的一个