【机器学习】网格搜索优化机器学习模型

机器学习中有两类参数训练数据学习得到的参数学习算法需要单独进行优化的参数(超参)

 

超参优化技巧:

 网格搜索:通过寻找最优的超参值的组合以进一步提高模型的性能

 

通过指定不同的超参列表进行暴力穷举搜索,并计算得到评估每个组合对模型性能的影响,获得参数的最优组合。


实现网格搜索调优超参:


# 通过网格搜索优化超参数结合k折交叉验证
from sklearn.grid_search import GridSearchCV
from sklearn.svm import SVC

pipe_svc = Pipeline([('scl', StandardScaler()),
            ('clf', SVC(random_state=1))])

param_range = [0.0001, 0.001, 0.01, 0.1, 1.0, 10.0, 100.0, 1000.0]

param_grid = [{'clf__C': param_range, 
               'clf__kernel': ['linear']},
                 {'clf__C': param_range, 
                  'clf__gamma': param_range, 
                  'clf__kernel': ['rbf']}]

gs = GridSearchCV(estimator=pipe_svc, 
                  param_grid=param_grid, 
                  scoring='accuracy', 
                  cv=10,
                  n_jobs=-1)
gs = gs.fit(X_train, y_train)
print(gs.best_score_)
print(gs.best_params_)


初始化了一个GridSearchCV对象,用于对支持向量机流水线的训练与调优。

将GridSearchCV的param_grid参数以字典的方式定义为待调优参数。


# 使用独立的测试集通过模型进行性能评估:
clf = gs.best_estimator_
clf.fit(X_train, y_train)
print('Test accuracy: %.3f' % clf.score(X_test, y_test))



嵌套交叉验证:

使用嵌套交叉验证,估计的真实值误差与在测试集上得到的结果几乎没有差距

嵌套交叉验证的外围循环中,将数据集划分为训练块和测试块。

内部循环中,基于外围训练块使用k折交叉验证。

完成模型后用测试块对模型进行评估。




实现嵌套交叉验证:

gs = GridSearchCV(estimator=pipe_svc, 
                            param_grid=param_grid, 
                            scoring='accuracy', 
                            cv=5)
scores = cross_val_score(gs, X_train, y_train, scoring='accuracy', cv=5)
print('CV accuracy: %.3f +/- %.3f' % (np.mean(scores), np.std(scores)))



使用嵌套交叉验证比较SVM模型和决策树分类器,只优化树的深度。

from sklearn.tree import DecisionTreeClassifier
gs = GridSearchCV(estimator=DecisionTreeClassifier(random_state=0), 
                            param_grid=[{'max_depth': [1, 2, 3, 4, 5, 6, 7, None]}], 
                            scoring='accuracy', 
                            cv=5)
scores = cross_val_score(gs, X_train, y_train, scoring='accuracy', cv=5)
print('CV accuracy: %.3f +/- %.3f' % (np.mean(scores), np.std(scores)))



  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值