今天想要简单的应用一下,svr模型做一下支持向量机的回归,然后突然发现了这个宝贝函数。
官网文档如下:https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html
class sklearn.model_selection.GridSearchCV(estimator, param_grid, scoring=None,
fit_params=None, n_jobs=None, iid=’warn’, refit=True, cv=’warn’,
verbose=0, pre_dispatch=‘2*n_jobs’, error_score=’raise-deprecating’, return_train_score=’warn’)
(1)estimator:sklearn 里面封装的模型
(2)param_grid:值为字典或者列表,字典里面的键代表estimator模型中的可以设置的参数,值是GridSearchCV要去遍历优化的具体值。
比如具体的GridSearchCV 函数结构如下:
svr = GridSearchCV(SVR(), param_grid={"kernel": ("linear", 'rbf'),\
"C": np.logspace(-3, 3, 7), "gamma": np.logspace(-3, 3, 7)})
第一个参数是建立的SVR模型(estimator);
第二个参数是SVR()模型中,允许的参数。
kernel(核函数):linear(线性核)、rbf(径向基核)
C(惩罚系数):设置范围为从1.e-03到1.e+03的等比数列,共7个数
gamma(核系数):同上
SVR()详细参数可见:
https://blog.csdn.net/qq_24852439/article/details/85305317
(3) scoring:模型评价方法,也是按照上面参数的方法,给定一个列表或者字典形式。评价方法可以参照 sklearn里面的metric
(4) fit_params:在0.21里面被抛弃了,不介绍了
(5)n_jobs:并行数。默认值为:1。-1的时候运行你所有的CPU核
(6)就先到这把....
然后就是把训练集扔进去。
svr.fit(x_train, y_train) #训练
y_pred = svr.predict(x_test) #测试集测试
sigma = metrics.mean_squared_error(y_test, y_pred) #计算均方差
print(sigma)
print('the best patams is{}'.format(svr.best_params_))
然后就会看见这样的效果,
第一个就是 均方差(效果不好,是我数据集本身的原因)
第二个就是在我设定所有SVR参数中,使得模型训练效果最好的参数的输出。
这样感觉省略了很多调参的过程,直接把最好的都给你了,你也不用费劲的去写了。
原来做SVM的时候,为了想要改变kernel,还要写个list,每次用循环传进去,比如下面这样,然后用一个指标去评价不同的kernel的好坏。
kernel_class = ['linear', 'poly', 'rbf', 'sigmoid']
def train_SVC(x_train, x_test, y_train, y_test,kernel_class):
model = SVC(kernel = kernel_class) #建立模型,设置相应模型参数
model.fit(x_train, y_train) #调用fit训练
y_pred = model.predict(x_test) #测试集测试
print(y_pred)
acc = metrics.accuracy_score(y_test, y_pred) #计算模型准确率
return acc
for i in kernel_class:
print('class:{}'.format(i))
acc = train_SVC(x_train, x_test, y_train, y_test,i)#存精确度
print(acc)