多次训练一个分类,以便在Scikit-Learn中获得平均分

时间:2018-04-14 23:17:52

标签: 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 = 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中多次运行分类器?或者我必须自己编写逻辑吗?

0 个答案:

没有答案