ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

scilit基础和机器学习入门(12) 模型的优化

2021-09-19 20:33:29  阅读:153  来源: 互联网

标签:iris 12 入门 clf scilit 搜索 import 参数 模型


超参数的取值和搜索

超参数是不直接在估计器内学习的参数。在 scikit-learn 包中,它们作为估计器类中构造函数的参数进行传递。典型的例子有:用于支持向量分类器的 C 、kernel 和 gamma ,用于Lasso的 alpha等。

网格搜索法,随机搜索法,模型特定交叉验证,信息准则优化。网格搜索法,随机搜索法,模型特定交叉验证,信息准则优化。

网格搜索法

网格搜索法在指定的超参数空间中对每一种可能的情况进行交叉验证评分并选出最好的超参数组
合。

使用网格搜索法或随机搜索法可以对Pipeline进行参数优化,也可以指定多个评估指标。

from sklearn import svm, datasets
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import ShuffleSplit
iris = datasets.load_iris()
# 估计器
svc = svm.SVC()
# 超参数空间
param_grid = [
{'C': [1, 10, 100, 1000], 'kernel': ['linear']},
{'C': [1, 10, 100, 1000], 'gamma': [0.001, 0.0001], 'kernel': ['rbf']}
]
# 交叉验证方案
cv = ShuffleSplit(n_splits=10, test_size=0.3, random_state=0)
# 打分函数
scoring = 'accuracy'
# 指定搜索或采样方法
clf = GridSearchCV(svc,param_grid,scoring = scoring,cv = cv)
clf.fit(iris.data, iris.target) #得到的clf是一个优化了的分类器
print(clf.predict(iris.data)) # 用优化的clf对数据进行分类
clf.get_params() #查看全部参数
clf.best_params_ # 查看最优参数

对于clf = GridSearchCV(svc,param_grid,scoring = scoring,cv = cv),第一个参数是模型的类型,第二个参数是参数的寻址范围,第三个参数是定义的切分策略。

关于cv,见前一章交叉验证的内容

随机搜索法

随机搜索法和网格搜索法作用类似,但是只在超参数空间中进行指定次数的不同采样。采样次数通过n_iter参数指定,通过调整其大小可以在效率和性能方面取得平衡。其采样方法调用ParameterSampler函数,采样空间必须用字典进行指定。

网格搜索法只能在有限的超参数空间进行暴力搜索,但随机搜索法可以在无限的超参数空间进行随机搜索。

from sklearn import svm, datasets
from sklearn.model_selection import RandomizedSearchCV
from sklearn.model_selection import ShuffleSplit
from scipy.stats.distributions import expon
iris = datasets.load_iris()
# 估计器
svc = svm.SVC()
# 超参数采样空间
param_distributions = {'C': [1, 10, 100, 1000],
'gamma': [0.001,0.0001,0.00001,0.000001],
'kernel': ['rbf','linear']}
# 交叉验证方案
cv = ShuffleSplit(n_splits=3, test_size=0.3, random_state=0)
# 打分函数
scoring = 'accuracy'
# 指定搜索或采样方法
clf = RandomizedSearchCV(svc, param_distributions,
scoring = scoring,cv = cv,n_iter = 20 )
clf.fit(iris.data, iris.target) #得到的clf是一个优化了的分类器
print(clf.predict(iris.data)) # 用优化的clf对数据进行分类
clf.get_params() #查看参数
print(clf.best_params_) #最优参数
clf.best_score_ #最优得分

随机搜索在空间很小时和网格搜索没有直接区别,但当取值空间为下面的类型是,有很好的效果

from sklearn.model_selection import ParameterSampler
from scipy.stats.distributions import expon
import numpy as np
np.random.seed(0)
param_grid = {'a':[1, 2], 'b': expon()} # b 按指数分布采样
param_list = list(ParameterSampler(param_grid, n_iter=10))
param_list

模型特定交叉验证

一些特定的模型,sklearn构建了一些内部含有交叉验证优化机制的估计器。
它们主要是在linear_model模块。

例如:

linear_model.ElasticNetCV

inear_model.LogisticRegressionCV

linear_model.RidgeCV

image

可见,使得交叉验证评估策略可以大大提高模型性能

信息准则优化

模型选择主要由两个思路。

解释性框架:好的模型应该是最能解释现有数据的模型。可以用似然函数来度量模型对数据集描述能力。

预测性框架:好的模型应该是最能预测结果的模型。通常模型参数越多越复杂,越容易出现过拟合。

所以,模型选择问题在模型复杂度与模型对数据集描述能力(即似然函数)之间寻求最佳平衡。

AIC(赤池信息准则)和BIC(贝叶斯信息准则)对模型的选择提供了一种判据。

AIC信息准则选择AIC最大的模型。

BIC信息准则选择BIC最大的模型。当样本数量较大时,BIC对参数个数的惩罚大于AIC。

\[AIC = 2ln(L)-2k \]

\[BLC = 2ln(L)-kln(n) \]

linear_model.LassoLarsIC 采用了信息准则进行优化。

标签:iris,12,入门,clf,scilit,搜索,import,参数,模型
来源: https://www.cnblogs.com/xiaoyunbowen/p/15312614.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有