首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么在Python中以这两种不同的方式使用SVM会得到非常不同的准确率分数?

为什么在Python中以这两种不同的方式使用SVM会得到非常不同的准确率分数?
EN

Stack Overflow用户
提问于 2018-08-18 20:29:16
回答 1查看 145关注 0票数 0

使用Python和SVM,我应用了这两段代码:

首先,我使用dataset应用了这段代码

代码语言:javascript
复制
from sklearn.metrics import confusion_matrix
from sklearn.metrics import cohen_kappa_score
from sklearn.metrics import accuracy_score
from sklearn.metrics import classification_report
from sklearn.svm import LinearSVC

model = LinearSVC(class_weight='balanced',C=0.01, penalty='l2').fit(X_, y)
y_preds = model.predict(X_)
report = classification_report( y, y_preds )
print(report)
print(cohen_kappa_score(y, y_preds),'\n', accuracy_score(y, y_preds), \n',confusion_matrix(y, y_preds))

这给了我这样的准确性:0.9485714285714286

其次,我将此代码再次应用于完全相同的数据集

代码语言:javascript
复制
from sklearn.svm import LinearSVC
from sklearn.model_selection import cross_val_score

models = [
    LinearSVC(class_weight='balanced',C=0.01, penalty='l2', loss='squared_hinge'),
]
CV = 5
cv_df = pd.DataFrame(index=range(CV * len(models)))
entries = []
for model in models:
    model_name = model.__class__.__name__
    accuracies = cross_val_score(model, X_, y, scoring='accuracy', cv=CV)
    for fold_idx, accuracy in enumerate(accuracies):
        entries.append((model_name, fold_idx, accuracy))
cv_df = pd.DataFrame(entries, columns=['model_name', 'fold_idx', 'accuracy'])
cv_df.groupby('model_name').accuracy.mean()

精确度不同:0.797090

我的错误在哪里?

哪种代码是正确的?

如何计算第二个代码中交叉验证后的精确度和召回率?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-18 21:23:10

在第一个代码中,你只做了一次预测和精度计算。而在第二个代码中,你做了5次预测和准确度计算(使用不同的数据集),然后得到准确率得分的平均值。换句话说,第二个代码给出了更可靠的准确性分数。

至于您的另一个问题,如果您想对多个指标进行交叉验证,可以使用cross_validate()而不是cross_val_score()

代码语言:javascript
复制
scores = cross_validate(model, X, y, scoring=('precision', 'recall'))
print(scores['precision'])      
print(scores['recall'])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51908671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档