-
2019-12-07 16:24:49
网格搜索调参法与交叉验证
网格搜索定义:
网格搜索法是指定参数值的一种穷举搜索方法,通过将估计函数的参数通过交叉验证进行优化来得到最优的学习算法。
步骤:
· 将各个参数可能的取值进行排列组合,列出所有可能的组合结果生成“网格”。
· 然后将各组合用于SVM训练,使用交叉验证对表现进行评估。
· 在拟合函数尝试了所有的参数组合后,返回一个合适的分类器,自动调整至最佳(性能度量)参数组合,可以通过clf.best_params_获得参数值
使用交叉验证对模型评估:
如果使用K折交叉验证。将原始数据划分为k份,k-1份作为训练集,1份作为测试集。轮流进行k次。
性能度量:
可以选择accuracy, f1-score, f-beta, precise, recall等
细节部分,他写的很详细也很仔细:https://blog.csdn.net/xiachong27/article/details/82154825
更多相关内容 -
机器学习调参——网格搜索调参,随机搜索调参,贝叶斯调参
2020-04-30 20:46:27网格搜索调参 from scipy.stats import randint as sp_randint from sklearn.model_selection import GridSearchCV grid_search = GridSearchCV(estimator = model, param_grid=param_dist, scoring="neg_mean_...from sklearn.datasets import load_boston from sklearn.metrics import mean_squared_error from lightgbm import LGBMRegressor import numpy as np
导入数据集
boston = load_boston() X,y = boston.data,boston.target print(X.shape) print(y.shape)
定义交叉验证分数
from sklearn.model_selection import KFold, cross_val_score, GridSearchCV def mse_cv(model=None,X_train=None,y_train=None): kf=KFold(n_splits=10,shuffle=True,random_state=42).get_n_splits(X_train) return -cross_val_score(model,X_train,y_train,scoring='neg_mean_absolute_error',cv=kf,n_jobs=-1)
定义模型
model = LGBMRegressor() score = mse_cv(model,X,y) print('{:.4f}({:.4f})'.format(score.mean(),score.std())) model.fit(X,y) print('{:.4f}'.format(mean_squared_error(model.predict(X),y)))
定义候选参数列表
param_dist = {'n_estimators': (10, 250), 'min_samples_split': (2, 25), 'max_features': (0.1, 0.999), 'max_depth': (5, 15)}
1.网格搜索调参
from scipy.stats import randint as sp_randint from sklearn.model_selection import GridSearchCV grid_search = GridSearchCV(estimator = model, param_grid=param_dist, scoring="neg_mean_squared_error" ,n_jobs=-1, cv=5) grid_search.fit(X, y) print(grid_search.best_estimator_)
2.随机搜索调参
from scipy.stats import randint as sp_randint from sklearn.model_selection import RandomizedSearchCV random_search = RandomizedSearchCV(estimator = model, param_distributions=param_dist, n_iter=100, scoring="neg_mean_squared_error" ,n_jobs=-1, cv=5) random_search.fit(X, y) print(random_search.best_estimator_)
3.贝叶斯调参
from bayes_opt import BayesianOptimization def lgb_cv(n_estimators, min_samples_split, max_features, max_depth): val = cross_val_score( LGBMRegressor(n_estimators=int(n_estimators), min_samples_split=int(min_samples_split), max_features=min(max_features, 0.999), # float max_depth=int(max_depth), random_state=2 ), X, y, scoring='neg_mean_absolute_error', cv=5 ).mean() return val lgb_bo = BayesianOptimization( lgb_cv, {'n_estimators': (10, 250), 'min_samples_split': (2, 25), 'max_features': (0.1, 0.999), 'max_depth': (5, 15)} ) lgb_bo.maximize(init_points=21,n_iter=90) print(lgb_bo.max['params'])
-
【调参01】如何使用网格搜索寻找最佳超参数配置
2020-12-20 22:50:44本文介绍了如何使用网格搜索寻找网络的最佳超参数配置。 文章目录1. 准备数据集2. 问题建模2.1 训练集测试集拆分2.2 转化为监督学习问题2.3 前向验证2.4 重复评估2.5 网格搜索2.6 实例化3. 使用网格搜索寻找CNN最佳... -
Python机器学习:6.4 通过网格搜索调参
2020-12-06 03:16:47机器学习算法中有两类参数:从训练集中学习到的参数,比如逻辑斯蒂回归中的权重参数,另一类是模型的超...网格搜索听起来高大上,实际上简单的一笔,就是暴力搜索而已,我们事先为每个参数设定一组值,然后穷举各...机器学习算法中有两类参数:从训练集中学习到的参数,比如逻辑斯蒂回归中的权重参数,另一类是模型的超参数,也就是需要人工设定的参数,比如正则项系数或者决策树的深度。
前一节,我们使用验证曲线来提高模型的性能,实际上就是找最优参数。这一节我们学习另一种常用的超参数寻优算法:网格搜索(grid search)。
网格搜索听起来高大上,实际上简单的一笔,就是暴力搜索而已,我们事先为每个参数设定一组值,然后穷举各种参数组合,找到最好的那一组。
Python机器学习:6.4 通过网格搜索调参
GridSearchCV中param_grid参数是字典构成的列表。对于线性SVM,我们只评估参数C;对于RBF核SVM,我们评估C和gamma。
最后, 我们通过best_parmas_得到最优参数组合。
sklearn人性化的一点是,我们可以直接利用最优参数建模(best_estimator_):
Python机器学习:6.4 通过网格搜索调参
Note 网格搜索虽然不错,但是穷举过于耗时,sklearn中还实现了随机搜索,使用 RandomizedSearc
机器学习算法中有两类参数:从训练集中学习到的参数,比如逻辑斯蒂回归中的权重参数,另一类是模型的超参数,也就是需要人工设定的参数,比如正则项系数或者决策树的深度。
前一节,我们使用验证曲线来提高模型的性能,实际上就是找最优参数。这一节我们学习另一种常用的超参数寻优算法:网格搜索(grid search)。
网格搜索听起来高大上,实际上简单的一笔,就是暴力搜索而已,我们事先为每个参数设定一组值,然后穷举各种参数组合,找到最好的那一组。
GridSearchCV中param_grid参数是字典构成的列表。对于线性SVM,我们只评估参数C;对于RBF核SVM,我们评估C和gamma。
最后, 我们通过best_parmas_得到最优参数组合。
sklearn人性化的一点是,我们可以直接利用最优参数建模(best_estimator_):
Note 网格搜索虽然不错,但是穷举过于耗时,sklearn中还实现了随机搜索,使用 RandomizedSearchCV类,随机采样出不同的参数组合。
Python机器学习中文版目录(http://www.aibbt.com/a/20787.html)
转载请注明出处,Python机器学习(http://www.aibbt.com/a/pythonmachinelearning/)
posted on
2018-03-12 11:48
aibbt_com
阅读(3314)
评论(1)
编辑
收藏
-
keras模型网格搜索调参求助
2019-08-20 14:49:34![图片说明]... 用sklearn的网格搜索,想对keras的GRU模型调参。。但是成功调了一组参数后,后面的参数调节时,死活不行,一直报错,提示非法参数。。。 求指点问题所在 -
多变量线性回归的python实现-(数据标准化以及网格搜索调参)
2019-03-05 23:49:07#k近邻 网格搜索和GridSearchCV调参来实现多变量线性回归的找到最优参数,测算精确度,看看是不是使回归更优 from sklearn.neighbors import KNeighborsRegressor from sklearn.model_selection import GridSearchCV...#导入波士顿数据 from sklearn.datasets import load_boston import pandas as pd import numpy as np boston=load_boston() print(boston.data.shape) print(boston.target.shape) #数据集的描述 print(boston.feature_names) #print(boston.DESCR) #特征 bostonDf_X = pd.DataFrame(boston.data,columns = boston.feature_names) bostonDf_X.head() #标签 bostonDf_y = pd.DataFrame(boston.target,columns=['housePrice'])#【注意加列名要加在[]中】 bostonDf_y.head() #合并DataFrame bostonDf = pd.concat([bostonDf_X,bostonDf_y],axis =1)#axis =1 为横向操作,即横向合并 bostonDf.shape#506,14 bostonDf.head() #RM房间数 MEDV 房价 #创建用于模型的数据集 from sklearn.model_selection import train_test_split #切分训练集与测试集 #划分训练集与测试集7:3比例 x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.3,random_state=0) print(len(x_train)) print(len(x_test)) from sklearn.model_selection import train_test_split #切分训练集与测试集 from sklearn.linear_model import LinearRegression #线性回归模型 LR=LinearRegression() #特征 bostonDf_X = pd.DataFrame(boston.data,columns = boston.feature_names) bostonDf_X.head() #标签 bostonDf_y = pd.DataFrame(boston.target,columns=['housePrice'])#【注意加列名要加在[]中】 bostonDf_y .head() #合并DataFrame bostonDf = pd.concat([bostonDf_X,bostonDf_y],axis =1)#axis =1 为横向操作,即横向合并 bostonDf.shape#506,14 bostonDf.head() #标准化 from sklearn import preprocessing bostonDf_std=pd.DataFrame(preprocessing.normalize(bostonDf,norm='l2', axis=1, copy=True),columns=bostonDf.columns) bostonDf_std.head() from sklearn.model_selection import train_test_split #切分训练集与测试集 #划分训练集与测试集7:3比例 X_train,X_test,y_train,y_test =\ train_test_split(bostonDf_std[["CRIM","ZN","INDUS","CHAS","NOX","RM","AGE","DIS","RAD","TAX","PTRATIO","B","LSTAT"]],bostonDf_std[["housePrice"]], test_size = 0.3, random_state=0) print(len(X_train)) print(len(X_test)) from sklearn.linear_model import LinearRegression #线性回归模型 LR=LinearRegression() #用训练集训练模型 LR.fit(X_train,y_train) #用训练出来的模型去拟合测试数据 y_pred=LR.predict(X_test) LR.score(X_test,y_test)#【精度得分80.132%】 #【上面改近方向:可用Lasso回归梯度下降加入学习率训练,求得最优参数,和学习率之间的平衡】 #k近邻 网格搜索和GridSearchCV调参来实现多变量线性回归的找到最优参数,测算精确度,看看是不是使回归更优 from sklearn.neighbors import KNeighborsRegressor from sklearn.model_selection import GridSearchCV knn_reg = KNeighborsRegressor() param_grid = [ { 'weights': ['uniform'], 'n_neighbors':[i for i in range(1,11)] }, { 'weights':['distance'], 'n_neighbors':[i for i in range(1,11)], 'p':[i for i in range(1,6)] } ] knn_reg = KNeighborsRegressor() grid_search=GridSearchCV(knn_reg,param_grid,n_jobs=-1,verbose=2) grid_search.fit(X_train,y_train) #最优参数 grid_search.best_params_ #{'n_neighbors': 2, 'p': 1, 'weights': 'distance'} #代入最优参数得到算法精确度 grid_search.best_estimator_.score(X_test,y_test) #72.49899478974446% #对比上面LinearRegression看下,网格搜索K近邻 多元线性回归求得的精确度为72%, #LinearRegression没用学习率和参数调优。80%。
-
[实例] 特征选择方法、网格搜索调参、不平衡处理、pu-learning
2018-12-28 22:07:53(2)基于科研人员导师/学生分类实例应用特征选择方法,参数选择使用的是网格搜索。 注: 很多内容是网上学习而得,感谢大佬们的分享~ 参考文献: [1] ... -
客户逾期贷款预测[6] - 网格搜索调参和交叉验证
2018-11-24 20:38:59任务 使用网格搜索对模型进行调优并采用五折交叉验证的方式进行模型评估 ...本文只进行带交叉验证的网格搜索调参,然后与调参前评分做比较。 from sklearn.model_selection import GridSearchCV,train_test... -
random_forest_鸢尾花_网格调参_RandomForest_random_python鸢尾花网格调参方法_随机森林_
2021-10-02 13:47:08基于随机森林机器学习算法,通过sklearn库,实现网格调参方法,完整代码过程 -
机器学习 交叉验证与网格搜索调参
2018-08-01 14:34:17网格搜索一般是针对参数进行寻优,交叉验证是为了验证训练模型拟合程度。sklearn中的相关API如下: (1)交叉验证的首要工作:切分数据集train/validation/test A.)没指定数据切分方式,直接选用cross_val_... -
机器学习:使用scikit-learn库中的网格搜索调参
2019-10-06 10:25:59一、scikit-learn库中的网格搜索调参 1)网格搜索的目的: 找到最佳分类器及其参数; 2)网格搜索的步骤: 得到原始数据 切分原始数据 创建/调用机器学习算法对象 调用并实例化scikit-... -
GridSearch(网格搜索)调参
2020-01-02 00:28:39GridSearch(网格搜索)调参 Author: Xin Pan Date: 2020.01.01 GridSearch 是模型调参的一个常用方法。使用穷举的思路,将需要调整的参数的所有组合罗列出来,每个参数组合训练一个模型得到一个精度。将参数组合的... -
模型调参之网格搜索与随机搜索
2021-05-17 11:22:01模型调参之网格搜索与随机搜索 网格搜索法(GridSearchCV) GridSearchCV:GridSearchCV可以拆分成GridSearch和CV两部分,即网格搜素和交叉验证。GridSearch系统地遍历多种参数组合,通过交叉验证确定最佳效果参数... -
2、机器学习中的调参:随机搜索和网格搜索
2021-07-19 10:15:01机器学习中的调参前言1、随机搜索和网格搜索2、 遗传算法 前言 超参数调优是机器学习中的重要一环,拿随机森林算法而言,树的个数,数的深度,剪枝参数等等需要找到最优的参数组合,超参数较少时,我们可以采用for... -
xgboost网格搜索算法调参+多标签分类预测项目实战
2022-02-28 22:39:52xgboost模型,网格搜索算法 -
随机森林(RandomForest,RF)网格搜索法调参
2019-03-27 11:06:51当你读到这篇博客,那么你肯定知道手动调参是多么的低效。那么现在我来整理一下近几日学习的笔记,和大家一起分享学习这个知识点。 -
keras的网格搜索调参疑问
2019-08-14 19:11:57用keras的sklearn接口的网格搜索法,对keras的模型进行调参。。发现学习率和momentum无法调参,提示非法参数。。关于学习率我试了learning_rate,lr,learn_rate都没用。。 很是搞不懂。。求指点~~ (我前面先调了... -
Python机器学习入门——3.手动调参及网格搜索
2020-08-06 00:06:02best_weight=weight best_n_neighbors=i best_score # In[8]: best_weight # In[9]: best_n_neighbors # In[10]: #sklearn中内置网格搜索的调参方法调用 from sklearn.model_selection import GridSearchCV clf=... -
网格搜索(调参)与数据预处理
2018-09-28 10:52:20网格搜索是一种调参手段;穷举搜索:在所有候选的参数选择中,通过循环遍历,尝试每一种可能性,表现最好的参数就是最终的结果。其原理就像是在数组里找最大值。(为什么叫网格搜索?以有两个参数的模型为例,参数a... -
网格搜索、随机搜索和贝叶斯调参总结与实践
2022-01-21 15:24:38因此在实践比赛中,需要调参的模型数量与对应的超参数比较多,而设计的数据量又比较大,因此相当消耗时间。此外,由于给出的超参数的组合比较多,因此一般都会固定多数参数,分布对1~2个超参数进行调节,这样能够... -
机器学习调参神器--网格搜索
2022-02-03 16:53:18调好参,过好年! -
【Machine Learning】通过网格搜索进行调参
2017-06-15 19:26:21在我们日常的进行超参数优化工作时,可以手动去试,也可以使用随机搜索、批量随机搜索和网格搜索等方法调到好的参数,关于网格搜索,sklearn中GridSearchCV用于系统地遍历多种参数组合,通过交叉验证确定最佳效果...