网格搜索和交叉验证 SVM

拉维亚·萨穆特

我正在使用网格搜索的最佳参数对 10 倍交叉验证实施支持向量机,我需要了解预测结果为什么不同我在训练集上得到了两个准确度结果测试通知我需要训练集上最佳参数的预测结果以供进一步分析代码和结果如下所述。任何解释

from __future__ import print_function

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import classification_report
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
from time import *
from sklearn import metrics
X=datascaled.iloc[:,0:13]
y=datascaled['num']

np.random.seed(1)
# Split the dataset in two equal parts
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.3, random_state=0)

# Set the parameters by cross-validation
tuned_parameters =  [{'kernel': ['rbf'], 'gamma': [1e-2, 1e-3, 1e-4, 1e-5],
                     'C': [0.001, 0.10, 0.1, 10, 25, 50, 100, 1000]},
                    {'kernel': ['sigmoid'], 'gamma': [1e-2, 1e-3, 1e-4, 1e-5],
                     'C': [0.001, 0.10, 0.1, 10, 25, 50, 100, 1000] },{'kernel': ['linear'], 'C': [0.001, 0.10, 0.1, 10, 25, 50, 100, 1000]}]              





print()

clf = GridSearchCV(SVC(), tuned_parameters, cv=10,
                       scoring='accuracy')
t0 = time()

clf.fit(X_train, y_train)
t = time() - t0
print("Best parameters set found on development set:")
print()
print(clf.best_params_)
print()
print('Training accuracy')
print(clf.best_score_)
print(clf.best_estimator_)
print()
print()
print('****Results****')
svm_pred=clf.predict(X_train)
#print("\t\taccuracytrainkfold: {}".format(metrics.accuracy_score(y_train, svm_pred)))
print("=" * 52)
print("time cost: {}".format(t))
print()
print("confusion matrix\n", metrics.confusion_matrix(y_train, svm_pred))
print()
print("\t\taccuracy: {}".format(metrics.accuracy_score(y_train, svm_pred)))
print("\t\troc_auc_score: {}".format(metrics.roc_auc_score(y_train, svm_pred)))
print("\t\tcohen_kappa_score: {}".format(metrics.cohen_kappa_score(y_train, svm_pred)))
print()
print("\t\tclassification report")
print("-" * 52)
print(metrics.classification_report(y_train, svm_pred)) 

Best parameters set found on development set:

{'C': 1000, 'gamma': 0.01, 'kernel': 'rbf'}

Training accuracy
0.9254658385093167


****Results****
====================================================
time cost: 7.728448867797852

confusion matrix
 [[77  2]
 [ 4 78]]

        accuracy: 0.9627329192546584
        roc_auc_score: 0.9629515282494597
        cohen_kappa_score: 0.9254744638173121

        classification report
----------------------------------------------------
             precision    recall  f1-score   support

          0       0.95      0.97      0.96        79
          1       0.97      0.95      0.96        82

avg / total       0.96      0.96      0.96       161
艾哈迈德·加德

您正在使用 10 折交叉验证进行训练,并要求在每次折叠后计算预测准确度。我建议执行以下操作。

使用sklearn.model_selection.KFold将数据拆分为 10 折,并创建一个通过每个折的循环,如下所示:

for train_index, test_index in kf.split(X):
    print("TRAIN:", train_index, "TEST:", test_index)
    X_train, X_test = X[train_index], X[test_index]
    y_train, y_test = y[train_index], y[test_index]

在该循环内,使用下面重复的先前使用的行来构建和训练模型。但是GridSearchCV() 中使用cv=1而不是cv=10

    clf = GridSearchCV(SVC(), tuned_parameters, cv=1, scoring='accuracy')
    clf.fit(X_train, y_train)

使用来自一层的数据训练模型后,然后根据代码中使用的以下行使用相同折叠的数据预测其准确性。

    svm_pred=clf.predict(X_train)
    print("\t\taccuracy: {}".format(metrics.accuracy_score(y_train, svm_pred)))

完整代码如下:

for train_index, test_index in kf.split(X):
    print("TRAIN:", train_index, "TEST:", test_index)
    X_train, X_test = X[train_index], X[test_index]
    y_train, y_test = y[train_index], y[test_index]

    clf = GridSearchCV(SVC(), tuned_parameters, cv=1, scoring='accuracy')
    clf.fit(X_train, y_train)

    svm_pred=clf.predict(X_train)
    print("\t\taccuracy: {}".format(metrics.accuracy_score(y_train, svm_pred)))

希望有帮助:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用插入符号在R中进行交叉验证的SVM

来自分类Dev

在MATLAB中实现SVM模型交叉验证的不同方法

来自分类Dev

如何使用多类SVM实现k倍交叉验证

来自分类Dev

sklearn CalibratedClassifierCV和SVM错误

来自分类Dev

sklearn CalibratedClassifierCV和SVM错误

来自分类Dev

libsvm svm_node和svm_predict

来自分类Dev

libsvm svm_node和svm_predict

来自分类Dev

使用不同文本集进行参数网格搜索以创建字典和交叉验证

来自分类Dev

MATLAB支持向量机(SVM)交叉验证实现可提高代码速度

来自分类Dev

在R中使用tune.svm()指定k倍交叉验证

来自分类Dev

我不明白如何使用多类SVM进行k折交叉验证测试

来自分类Dev

在scikit-learn中对自定义内核SVM进行交叉验证

来自分类Dev

调整参数时,在交叉验证的SVM中识别过度拟合

来自分类Dev

通过交叉验证(SVM、逻辑回归)检查结果的稳健性

来自分类Dev

支持SVM和群集吗?混乱

来自分类Dev

使用SVM和BOW进行图像分类?

来自分类Dev

使用 SVM 区分 SUV 和轿车

来自分类Dev

SVM和铰链丢失之间有什么关系?

来自分类Dev

R了解{kernlab}的{caret} train(tuneLength =)和SVM方法

来自分类Dev

使用Python的字符串子序列内核和SVM

来自分类Dev

使用要点和SVM训练进行图像分类

来自分类Dev

如何使用SIFT和SVM实现常规图像分类器

来自分类Dev

连接SURF功能和Radon功能以训练SVM

来自分类Dev

使用Tensorflow的LinearClassifier和Panda的数据框构建SVM

来自分类Dev

SVM(SVC)训练中的obj和rho是什么

来自分类Dev

使用Python的字符串子序列内核和SVM

来自分类Dev

具有图形工具包的SVM和ANN库

来自分类Dev

solaris svm和raid5:快速扩展的方法吗?

来自分类Dev

如何在Python中进行PCA和SVM分类

Related 相关文章

热门标签

归档