带有 SVM 回归的 Scikit-learn 网格搜索

Posted

技术标签:

【中文标题】带有 SVM 回归的 Scikit-learn 网格搜索【英文标题】:Scikit-learn grid search with SVM regression 【发布时间】:2016-07-18 07:43:58 【问题描述】:

我正在学习交叉验证网格搜索并遇到了这个youtube playlist,并且该教程也已作为 ipython 笔记本上传到github。我正在尝试重新创建 同时搜索多个参数 部分中的代码,但我没有使用 knn,而是使用了 SVM 回归。这是我的代码

from sklearn.datasets import load_iris
from sklearn import svm
from sklearn.grid_search import GridSearchCV
import matplotlib.pyplot as plt
import numpy as np
iris = load_iris()
X = iris.data
y = iris.target

k=['rbf', 'linear','poly','sigmoid','precomputed']
c= range(1,100)
g=np.arange(1e-4,1e-2,0.0001)
g=g.tolist()
param_grid=dict(kernel=k, C=c, gamma=g)
print param_grid
svr=svm.SVC()
grid = GridSearchCV(svr, param_grid, cv=5,scoring='accuracy')
grid.fit(X, y)  
print()
print("Grid scores on development set:")
print()  
print grid.grid_scores_  
print("Best parameters set found on development set:")
print()
print(grid.best_params_)
print("Grid best score:")
print()
print (grid.best_score_)
# create a list of the mean scores only
grid_mean_scores = [result.mean_validation_score for result in grid.grid_scores_]
print grid_mean_scores

但它给出了这个错误

raise ValueError("X 应该是一个方核矩阵") ValueError: X 应该是方核矩阵

【问题讨论】:

报告 Python 错误时,您应该始终引用完整的 Python 回溯,因为它提供了引发异常的位置的信息。 【参考方案1】:

从参数空间中删除 'precomputed'

kernel='precomputed'只能在传递代表样本成对相似性的(n_samples, n_samples)数据矩阵而不是传统的(n_samples, n_features)矩形数据矩阵时使用。

有关内核参数含义的更多详细信息,请参阅文档:

http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html http://scikit-learn.org/stable/modules/svm.html#svm-kernels

【讨论】:

您好,谢谢您的回复,但您能告诉我如何导出此模型吗?这是正确的方法>>> from sklearn.externals import joblib >>> joblib.dump(grid, 'my_model.pkl', compress=9)

以上是关于带有 SVM 回归的 Scikit-learn 网格搜索的主要内容,如果未能解决你的问题,请参考以下文章

scikit-learn 入门

哪个更快?逻辑回归或线性核支持向量机?

Scikit-learn 的带有线性内核 svm 的 GridSearchCV 耗时太长

火炉炼AI机器学习019-项目案例:使用SVM回归器估算交通流量

scikit-learn库的安装及使用,以支持向量机svm为例

绘制scikit-learn(sklearn)SVM决策边界/表面