sklearn.model_selection中的GridSearchCV(自适应模型库)

今天想要简单的应用一下,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)

 

参考:http://www.cnblogs.com/zinyy/p/9535069.html

你可能感兴趣的:(机器学习)