资源经验分享使用网格搜索优化模型参数

使用网格搜索优化模型参数

2019-12-04 | |  106 |   0

原标题:使用网格搜索优化模型参数

原文来自:博客园      原文链接:https://www.cnblogs.com/weijiazheng/p/10966005.html


1.简单网格搜索法

  • Lasso算法中不同的参数调整次数

01.png


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#############################  使用网格搜索优化模型参数 #######################################
#导入套索回归模型
from sklearn.linear_model import Lasso
#导入数据集拆分工具
from sklearn.model_selection import train_test_split
#导入红酒数据集
from sklearn.datasets import load_wine
#载入红酒数据集
wine = load_wine()
#将数据集差分为训练集与测试集
X_train,X_test,y_train,y_test = train_test_split(wine.data,wine.target,random_state=38)
#设置初始分数为0
best_score = 0
#设置alpha参数遍历0.01,0.1,1,10
for alpha in [0.01,0.1,1.0,10.0]:
    #最大迭代数遍历100,1000,5000,10000
    for max_iter in [100,1000,5000,10000]:
        lasso = Lasso(alpha=alpha,max_iter=max_iter)
        #训练套索回归模型
        lasso.fit(X_train,y_train)
        score = lasso.score(X_test,y_test)
        #令最佳分数为所有分数中的最高值
        if score > best_score:
            best_score = score
            #定义字典,返回最佳参数和最佳最大迭代数
            best_parameters = {'alpha':alpha,'最大迭代次数':max_iter}
 
#打印结果
print('模型最高分为:{:.3f}'.format(best_score))
print('最佳参数设置:{}'.format(best_parameters))
模型最高分为:0.889
最佳参数设置:{'alpha': 0.01, '最大迭代次数': 100}


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#将数据集差分为训练集与测试集
X_train,X_test,y_train,y_test = train_test_split(wine.data,wine.target,random_state=0)
#设置初始分数为0
best_score = 0
#设置alpha参数遍历0.01,0.1,1,10
for alpha in [0.01,0.1,1.0,10.0]:
    #最大迭代数遍历100,1000,5000,10000
    for max_iter in [100,1000,5000,10000]:
        lasso = Lasso(alpha=alpha,max_iter=max_iter)
        #训练套索回归模型
        lasso.fit(X_train,y_train)
        score = lasso.score(X_test,y_test)
        #令最佳分数为所有分数中的最高值
        if score > best_score:
            best_score = score
            #定义字典,返回最佳参数和最佳最大迭代数
            best_parameters = {'alpha':alpha,'最大迭代次数':max_iter}
 
#打印结果
print('模型最高分为:{:.3f}'.format(best_score))
print('最佳参数设置:{}'.format(best_parameters))
模型最高分为:0.830
最佳参数设置:{'alpha': 0.1, '最大迭代次数': 100}

2.与交叉验证结合的网格搜索


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#导入numpy
import numpy as np
#导入交叉验证工具
from sklearn.model_selection import cross_val_score
#设置alpha参数遍历0.01,0.1,1,10
for alpha in [0.01,0.1,1.0,10.0]:
    #最大迭代数遍历100,1000,5000,10000
    for max_iter in [100,1000,5000,10000]:
        lasso = Lasso(alpha=alpha,max_iter=max_iter)
        #训练套索回归模型
        lasso.fit(X_train,y_train)
        scores = cross_val_score(lasso,X_train,y_train,cv=6)
        score = np.mean(scores)
        if score > best_score:
            best_score = score
            #定义字典,返回最佳参数和最佳最大迭代数
            best_parameters = {'alpha':alpha,'最大迭代次数':max_iter}
 
#打印结果
print('模型最高分为:{:.3f}'.format(best_score))
print('最佳参数设置:{}'.format(best_parameters))
模型最高分为:0.865
最佳参数设置:{'alpha': 0.01, '最大迭代次数': 100}


1
2
3
4
#用最佳参数模型拟合数据
lasso = Lasso(alpha=0.01,max_iter=100).fit(X_train,y_train)
#打印测试数据集得分
print('测试数据集得分:{:.3f}'.format(lasso.score(X_test,y_test)))
测试数据集得分:0.819


1
2
3
4
5
6
7
8
9
10
11
#导入网格搜索工具
from sklearn.model_selection import GridSearchCV
#将需要遍历的参数定义为字典
params = {'alpha':[0.01,0.1,1.0,10.0],'max_iter':[100,1000,5000,10000]}
#定义网格搜索中使用的模型和参数
grid_search = GridSearchCV(lasso,params,cv=6,iid=False)
#使用网格搜索模型拟合数据
grid_search.fit(X_train,y_train)
#打印结果
print('模型最高分:{:.3f}'.format(grid_search.score(X_test,y_test)))
print('最有参数:{}'.format(grid_search.best_params_))
模型最高分:0.819
最有参数:{'alpha': 0.01, 'max_iter': 100}


1
2
#打印网格搜索中的best_score_属性
print('交叉验证最高得分:{:.3f}'.format(grid_search.best_score_))
交叉验证最高得分:0.865

总结 :  

  • GridSearchCV本身就是将交叉验证和网格搜索封装在一起的方法.

  • GridSearchCV虽然是个非常强悍的功能,但是由于需要反复建模,因此所需要的计算时间更长.

 

文章引自 : 《深入浅出python机器学习》


免责声明:本文来自互联网新闻客户端自媒体,不代表本网的观点和立场。

合作及投稿邮箱:E-mail:editor@tusaishared.com


上一篇:分类模型的可信度评估

下一篇:使用交叉验证法(Cross Validation)进行模型评估

用户评价
全部评价

热门资源

  • Python 爬虫(二)...

    所谓爬虫就是模拟客户端发送网络请求,获取网络响...

  • TensorFlow从1到2...

    原文第四篇中,我们介绍了官方的入门案例MNIST,功...

  • TensorFlow从1到2...

    “回归”这个词,既是Regression算法的名称,也代表...

  • 机器学习中的熵、...

    熵 (entropy) 这一词最初来源于热力学。1948年,克...

  • TensorFlow2.0(10...

    前面的博客中我们说过,在加载数据和预处理数据时...