【问题标题】:How to get predicted labels from model_selection.cross_val_score如何从 model_selection.cross_val_score 获取预测标签
【发布时间】:2017-12-19 11:21:21
【问题描述】:

我有这个代码:

models=[]

#models.append(('LDA', LinearDiscriminantAnalysis()))
#models.append(('KNN', KNeighborsClassifier()))
#models.append(('CART', DecisionTreeClassifier()))
#models.append(('NB', GaussianNB()))
models.append(('SVM-linear', SVC(kernel='linear')))
models.append(('SVM-rbf', SVC(kernel='rbf')))
#models.append(('SGD', linear_model.SGDClassifier()))

# evaluate each model in turn
seed=numRow-1
results = []
names = []
scoring = 'accuracy'
for name, model in models:
     kfold = model_selection.KFold(n_splits=3, random_state=seed)
     cv_results = model_selection.cross_val_score(model, features, labels, cv=kfold, scoring=scoring)
     results.append(cv_results)
     names.append(name)
     msg = "%s: %f (%f)" % (name, cv_results.mean(), cv_results.std())
     print(msg)

我的问题是:我有 4 个数据集,trainingFeatures、trainingLabels、testFeatures 和 testLabels。如何使用训练集教授我的模型并使用 testFeatures 对其进行测试,然后创建一个 predictLabels 以将其与 testLabels 进行比较。在我的代码中,“功能”是 trainingFeatures+testFeatures,“标签”是 trainingLabels+testLabels。

【问题讨论】:

  • 那么不要使用cross_val_score。只需调用 model.fit(trainingFeatures, trainingLabels) 进行训练并在 for 循环中使用 model.score(testFeatures, testLabels) 计算测试数据的准确度。
  • 感谢您的回答,但这会影响准确性吗?使用 crow_val_score 会更好吗?
  • 当然会。但是比较它们是没有意义的。 cross_val_score 会将数据拆分为 KFold 中给出的不同折叠,并计算每个折叠的精度并返回所有精度的数组。在您的问题中,您询问了如何在一个数据集上进行训练并在另一组数据集上进行测试。我就是这么回答的。

标签: python-2.7 scikit-learn


【解决方案1】:

您使用代码和交叉验证分数的方式是正确的。

由于您的特征变量同时包含训练和测试数据,因此交叉验证分数将根据您定义的 KFold 将数据拆分为训练和测试。

然后它将使用测试标签来产生每个折叠的准确性。

所以通过使用

cv_results.mean() 

你得到所有折叠的平均准确度。

另一种方法是手动定义训练和测试特征和标签,并使用拟合和预测。

【讨论】:

    猜你喜欢
    • 2017-08-19
    • 2020-03-18
    • 2016-06-19
    • 2020-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-13
    • 2017-09-15
    相关资源
    最近更新 更多