请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

如何实现svr中的几个参数优化,网格或者遗传算法有案例代码吗

如何实现svr中的几个参数优化,网格或者遗传算法有案例代码吗

正在回答 回答被采纳积分+3

2回答

提问者 qq_慕姐45445 2019-04-22 13:28:47

BOBO老师您好,看了你的回复我尝试了SVR的网格搜索不知道哪里出错了:

import numpy as np

import matplotlib.pyplot as plt

from sklearn import datasets


boston = datasets.load_boston()

x = boston.data

y = boston.target



from sklearn.preprocessing import StandardScaler

from sklearn.pipeline import Pipeline

from sklearn.svm import SVR


def RBFKernelsvr(C=1,gamma=1.0):

    return Pipeline([

            ("std_scaler",StandardScaler()),

            ("svc",SVR(kernel="rbf",gamma=gamma,C=C))

            

            

            ])


svr = RBFKernelsvr()


# 准备待搜索的参数列表

C_PARM = [0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8]


param_grid = [

    {

        'gamma': [i for i in C_PARM], 

        'C':[i for i in range(1, 11)]

    }

]


from sklearn.model_selection import GridSearchCV

grid_search = GridSearchCV(svr, param_grid)

grid_search.fit(x,y)

print(grid_search.best_estimator_)

print(grid_search.best_params_)

svr0=grid_search.best_estimator_

print(svr0.score(x,y))




0 回复 有任何疑惑可以回复我~
  • 抱歉,我没理解你的问题,不要只贴代码,描述一下你怎么知道他是错误的?你的预期结果是怎样的?实际结果是怎样的?
    回复 有任何疑惑可以回复我~ 2019-04-22 13:46:20
  • 提问者 qq_慕姐45445 回复 liuyubobobo #2
    我这个是想在用svm的RBF核函数对数据做SVR回归,这里用来网格搜索方法(依样画葫芦你在回复链接中LogisticRegression参数搜索)。结果报警Invalid parameter C for estimator Pipeline(memory=None,
         steps=[('std_scaler', StandardScaler(copy=True, with_mean=True, with_std=True)), ('svc', SVR(C=1, cache_size=200, coef0=0.0, degree=3, epsilon=0.1, gamma=1.0,
      kernel='rbf', max_iter=-1, shrinking=True, tol=0.001, verbose=False))]). Check the list of available parameters with `estimator.get_params().keys()`.
    
    另外,看了scikilearn文档里    svr_rbf = SVR(kernel='rbf', C=100, gamma=0.1, epsilon=.1)  有三个系数
    这类C松弛系数,gamma,epsilon 是不是都可以写在param_grid 列表里来寻优
    回复 有任何疑惑可以回复我~ 2019-04-22 16:50:52
  • liuyubobobo 回复 提问者 qq_慕姐45445 #3
    再仔细看一遍我给你的问答链接和示例代码?在使用pipeline以后,参数的名字应该是:{$Pipeline中的对象名称}__{$参数名} 的形式。
    回复 有任何疑惑可以回复我~ 2019-04-22 17:56:31
liuyubobobo 2019-03-06 01:41:33

课程中介绍的网格搜索算法,可以用于对任意机器学习算法进行调参。具体参考课程4-6所介绍的网格搜索。


在这个问答中,我又以逻辑回归为例,简述了怎么融合更为复杂的Pipeline,进行调参,可以参考:http://coding.imooc.com/learn/questiondetail/61679.html

将这个代码中的 LogisticRegression 类,换成SVR,就是对SVR调参了(当然要包含对应的参数):)


遗传算法不是这个课程的内容。抱歉。


继续加油!:)

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信