如何在交叉验证后获取支持向量数量

这是我使用非线性SVM进行数字分类的代码。我应用了一个交叉验证方案来选择超参数cgamma。但是,GridSearch返回的模型没有n_support_属性来获取支持向量的数量。

from sklearn import datasetsfrom sklearn.cross_validation import train_test_splitfrom sklearn.grid_search import GridSearchCVfrom sklearn.metrics import classification_reportfrom sklearn.svm import SVCfrom sklearn.cross_validation import ShuffleSplit# 加载Digits数据集digits = datasets.load_digits()# 为了在这个数据上应用分类器,我们需要将图像展平,# 把数据转换成(样本,特征)矩阵:n_samples = len(digits.images)X = digits.images.reshape((n_samples, -1))y = digits.target# 将数据集分成两等份X_train, X_test, y_train, y_test = train_test_split(    X, y, test_size=0.5, random_state=0)# 初始化一个SVM估计器estimator=SVC(kernel='rbf',C=1,gamma=1)# 选择交叉验证迭代器。cv = ShuffleSplit(X_train.shape[0], n_iter=5, test_size=0.2, random_state=0)# 通过交叉验证设置参数tuned_parameters = [{'kernel': ['rbf'], 'gamma': [1e-3, 1e-4,1,2,10],                     'C': [1, 10, 50, 100, 1000]},                    {'kernel': ['linear'], 'C': [1, 10, 100, 1000]}]clf=GridSearchCV(estimator=estimator, cv=cv, param_grid=tuned_parameters)# 开始交叉验证任务以获取具有最佳参数的最佳模型。# 完成此任务后,我们得到一个clf作为具有最佳参数C和gamma的最佳模型。clf.fit(X_train,y_train)print()print ("最佳参数: ")print(clf.get_params)print("clf1在测试集上的错误率",clf.score(X_test,y_test))print("clf1在训练集上的错误率",clf.score(X_train,y_train))# 这不起作用。那么,我如何恢复支持向量的数量呢?print ("按类别划分的支持向量数量", clf.n_support_);**## 这是我的方法。我用最佳参数训练一个新的SVM对象,并注意到它与clf在测试和训练集上的错误率相同**clf2=SVC(C=10,gamma= 0.001);clf2.fit(X_train,y_train)print("clf2在测试集上的错误率 ",clf2.score(X_test,y_test))print("clf1在训练集上的错误率",clf.score(X_train,y_train))print clf2.n_support_

如果我的提议方法正确,请评论一下?


回答:

GridSearchCV会拟合多个模型。你可以通过clf.best_estimator_获得最佳模型,因此要找到训练集中支持向量的索引,你可以使用clf.best_estimator_.n_support_,当然,len(clf.best_estimator_.n_support_)会给你支持向量的数量。

你还可以通过clf.best_params_clf.best_score_分别获取最佳模型的参数和分数。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注