Python机器学习入门(六)之Python优化模型
目录
- 1.集成算法
- 1.1袋装算法
- 1.1.1袋装决策树
- 1.1.2随机森林
- 1.1.3极端随机树
- 1.2提升算法
- 1.2.1AdaBoost
- 1.2.2随机梯度提升
- 1.3投票算法
- 2.算法调参
- 2.1网络搜索优化参数
- 2.2随机搜索优化参数
- 总结
1.集成算法 三个臭皮匠,顶个诸葛亮。群体的智慧是很强大的。那么,在机器学习中能否同样采用此策略呢?答案是肯定的,就是集成算法——将多个不同算法从集成起来,使结果更优。
1.1袋装算法
袋装算法是一种提高分类准确率的算法。通过给定组合投票的方式获得最优解。比如你生病了,去
文章图片
个医院看了
文章图片
个医生,每个医生都给你开了药方,最后哪个药方的出现次数多,就说明这个药方可能是最优解。
1.1.1袋装决策树 袋装算法在数据具有很大方差时非常有效,最常见的例子就是决策树的袋装算法。
from pandas import read_csvfrom sklearn.model_selection import KFoldfrom sklearn.model_selection import cross_val_scorefrom sklearn.ensemble import BaggingClassifierfrom sklearn.tree import DecisionTreeClassifier filename = 'pima_data.csv'names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']data = https://www.it610.com/article/read_csv(filename, names=names)array = data.valuesX = array[:,0:8]Y = array[:,8]num_folds = 10seed = 7kfold = KFold(n_splits=num_folds,shuffle=True,random_state=seed) #袋装决策树cart = DecisionTreeClassifier()num_tree = 100model = BaggingClassifier(base_estimator=cart,n_estimators=num_tree,random_state=seed)result = cross_val_score(model, X, Y, cv=kfold)print(result.mean())
0.7578263841421736
1.1.2随机森林 随机森林是由很多决策树构成的,不同决策树之间没有关联。
当我们进行分类任务时,新的输入样本进入,就让森林中的每一棵决策树分别进行判断和分类,每个决策树会得到一个自己的分类结果,决策树的分类结果中哪一个分类最多,那么随机森林就会把这个结果当做最终的结果。
from sklearn.ensemble import RandomForestClassifier #随机森林num_tree = 100max_features = 3model = RandomForestClassifier(n_estimators=num_tree,random_state=seed,max_features=max_features)result = cross_val_score(model, X, Y, cv=kfold)print(result.mean())
0.759107997265892
1.1.3极端随机树 极端随机数与随机森林十分相似,都是由许多决策树构成的,但它与随机森林由两个主要区别:
- 随机森林应用的是Bagging模型,而极端随机树是使用所有的训练样本得到每棵决策树,也就是每棵决策树应用的是全部训练样本。
- 随机森林是在一个随机子集内得到最优分叉特征属性,而极端随机树是完全随机地选择分叉特征属性,从而实现对决策树进行分叉。
from sklearn.ensemble import ExtraTreesClassifier #极端随机树num_tree = 100max_features = 3model = ExtraTreesClassifier(n_estimators=num_tree,random_state=seed,max_features=max_features)result = cross_val_score(model, X, Y, cv=kfold)print(result.mean())
0.7630211893369789
1.2提升算法
提升算法也称为boosting算法,它是将弱学习算法提升为强学习算法的一类算法,可用来提升弱分类器的准确度。
1.2.1AdaBoost AdaBoost是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器)。
from pandas import read_csvfrom sklearn.model_selection import KFoldfrom sklearn.model_selection import cross_val_scorefrom sklearn.ensemble import AdaBoostClassifier filename = 'pima_data.csv'names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']data = https://www.it610.com/article/read_csv(filename, names=names)array = data.valuesX = array[:,0:8]Y = array[:,8]num_folds = 10seed = 7kfold = KFold(n_splits=num_folds,shuffle=True,random_state=seed) #AdaBostnum_tree = 100model = AdaBoostClassifier(n_estimators=num_tree,random_state=seed)result = cross_val_score(model, X, Y, cv=kfold)print(result.mean())
0.7578605604921395
1.2.2随机梯度提升 随机梯度提升法(GBM)的基本思想是:要找到某个函数的最大值,最好的办法就是沿着该函数的梯度方向探寻。梯度算子总是指向函数增长值最快的方向。
from sklearn.ensemble import GradientBoostingClassifier #随机 梯度提升num_tree = 100model = GradientBoostingClassifier(n_estimators=num_tree,random_state=seed)result = cross_val_score(model, X, Y, cv=kfold)print(result.mean())
0.7591934381408066
1.3投票算法
投票算法(Voting)是一个非常简单的多个机器学习算法的集成算法。投票算法是通过创建两个或多个算法模型,利用投票算法将这些算法包装起来,计算各个子模型的平均预测情况。
from pandas import read_csvfrom sklearn.model_selection import KFoldfrom sklearn.model_selection import cross_val_scorefrom sklearn.ensemble import VotingClassifierfrom sklearn.tree import DecisionTreeClassifierfrom sklearn.svm import SVCfrom sklearn.linear_model import LogisticRegression filename = 'pima_data.csv'names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']data = https://www.it610.com/article/read_csv(filename, names=names)array = data.valuesX = array[:,0:8]Y = array[:,8]num_folds = 10seed = 7kfold = KFold(n_splits=num_folds,shuffle=True,random_state=seed) #投票算法models=[]model_logistic = LogisticRegression(max_iter=3000)model_cart = DecisionTreeClassifier()model_svc = SVC()models.append(('logistic',model_logistic))models.append(('cart',model_cart))models.append(('svc',model_svc))ensemble_model = VotingClassifier(estimators=models)result = cross_val_score(ensemble_model, X, Y, cv=kfold)print(result.mean())
0.7721804511278196
2.算法调参 机器学习的模型都是参数化的,可以通过调参来提高模型的准确度。模型参数的调整应该遵循偏差和方差协调的原则。
调整算法参数是机器学习解决问题的最后一个步骤,有时也被成为超参数优化。学会调参是进行机器学习项目的前提。参数可分为两种:一种是影响模型在训练集上的准确度或防止过拟合能力的参数;另一种是不影响这两者的参数。模型在样本总体上的准确度由其在训练集上的准确度及其防止过拟合的能力共同决定,所以在调参时主要针对第一种参数进行调整,最终达到的效果是:模型在训练集上的准确度和防止过拟合能力的大和谐。
2.1网络搜索优化参数
网格搜索优化参数是一种算法参数优化的方法。它是通过遍历已定义参数的列表,来评估算法的参数,从而找到最优参数。
from pandas import read_csvfrom sklearn.linear_model import Ridgefrom sklearn.model_selection import GridSearchCV #导入数据filename = 'pima_data.csv'names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']data = https://www.it610.com/article/read_csv(filename, names=names)#将数据分为输入数据和输出结果array = data.valuesX = array[:,0:8]Y = array[:,8]#算法实例化model = Ridge()#设置要遍历的参数param_grid = {'alpha':[1,0.1,0.01,0.001,0]}#通过网格搜索查询最优参数grid = GridSearchCV(model, param_grid)grid.fit(X,Y)#搜索结果print('max_score:%.3f'% grid.best_score_)print('best_para:%.3f'% grid.best_estimator_.alpha)
max_score:0.276
best_para:1.000
2.2随机搜索优化参数
随机搜索优化参数是另一种对算法参数优化的方法。随机搜索优化参数通过固定次数的迭代,采用随机采样分布的方式搜索合适的参数。
from sklearn.model_selection import RandomizedSearchCVfrom scipy.stats import uniform #随即搜索优化参数grid = RandomizedSearchCV(model, param_grid,100,random_state=7)grid.fit(X,Y)#搜索结果print('max_score:%.3f'% grid.best_score_)print('best_para:%.3f'% grid.best_estimator_.alpha)
max_score:0.276
best_para:1.000
总结 本文主要讲解了如何优化模型,包括集成算法和算法调参,这些都是在实际项目中非常有用的。
【Python机器学习入门(六)之Python优化模型】到此这篇关于Python机器学习入门(六)优化模型的文章就介绍到这了,更多相关Python机器学习内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- 由浅入深理解AOP
- 继续努力,自主学习家庭Day135(20181015)
- python学习之|python学习之 实现QQ自动发送消息
- 逻辑回归的理解与python示例
- 一起来学习C语言的字符串转换函数
- python自定义封装带颜色的logging模块
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- 定制一套英文学习方案
- 漫画初学者如何学习漫画背景的透视画法(这篇教程请收藏好了!)
- 《深度倾听》第5天──「RIA学习力」便签输出第16期