在sklearn中进行了10折交叉验证后如何运行SVC分类器?

3
我是机器学习的新手,希望能得到以下方面的帮助:
我在我的数据上运行了一个支持向量机分类器(SVC),使用10折交叉验证计算了准确率分数(约为89%)。我使用Python和scikit-learn来执行此任务。以下是代码片段:
def get_scores(features,target,classifier):
  X_train, X_test, y_train, y_test =train_test_split(features, target , 
    test_size=0.3)
    scores = cross_val_score(
    classifier,
    X_train,
    y_train,
    cv=10,
    scoring='accuracy',
    n_jobs=-1)
 return(scores)

get_scores(features_from_df,target_from_df,svm.SVC())

现在,我如何使用我的分类器(在运行10折交叉验证后)对X_test进行测试,并将预测结果与y_test进行比较?正如您所注意到的那样,在交叉验证过程中,我只使用了X_train和y_train。
我注意到sklearn有cross_val_predict:http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.cross_val_predict.html 我应该用cross_val_predict替换我的cross_val_score吗?仅供参考:我的目标数据列已经二值化(具有0和1的值)。
如果我的方法是错误的,请建议我最好的处理方式。
谢谢!
3个回答

14

你只需要拆分你的X和y,不要拆分训练集和测试集。

然后,你可以将你的分类器(在这种情况下是svm)传递给cross_val_score函数,以获取每个实验的准确性。

只需3行代码:

clf = svm.SVC(kernel='linear', C=1)
scores = cross_val_score(clf, X, y, cv=10)
print scores

4
不要忘记:from sklearn.model_selection import cross_val_score - mrazizi

-2

你已经快完成了:

# Build your classifier
classifier = svm.SVC()

# Train it on the entire training data set
classifier.fit(X_train, y_train)

# Get predictions on the test set
y_pred = classifier.predict(X_test)

此时,您可以使用 sklearn.metrics 模块中的任何指标来确定您的表现如何。例如:

from sklearn.metrics import accuracy_score
print(accuracy_score(y_test, y_pred))

3
谢谢回答。然而,这并没有考虑交叉验证的因素。如果有其他替代建议,那将会很好。 - M_13
2
@M_13 任何模型都不会考虑交叉验证。CV只是用来检查模型在您的数据上的性能。请阅读有关交叉验证的内容。 - Vivek Kumar
3
我想知道这个答案怎么被接受为“答案”。它没有解决交叉验证这个主要问题。 - Peshmerge

-2
from sklearn.metrics import classification_report
classifier = svm.SVC()
classifier.fit(X_train, y_train)
y_pred = classifier.predict(X_test)
print(classification_report(y_test , y_pred)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接