ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

AI-机器学习-自学笔记(十一)提升算法

2021-12-29 12:58:48  阅读:136  来源: 互联网

标签:AI 分类器 算法 num import 自学 data model


提升算法是一种用来提高弱分类算法准确度的方法,这种方法先构造一个预测函数系列,然后以一定的方式将它们组合成一个预测函数。

提升算法也是一种提高任意给定学习算法准确度的方法,它是一种集成算法,主要通过对样本集的操作获得样本子集, 然后用弱分类算法在样本子集上训练生成一系列的基分类器。它可以用来提高其它弱分类算法的识别率,也就是将其他的弱分类算法作为基分类算法放于提升框架中 ,通过提升框架对训练样本集的操作,得到不同的训练样本子集,再用该样本子集去训练生成基 分类器。每得到一个样本集就用该基分类算法在该样本集上产生一个基分类器。这样在给定训练轮数n后,就可产生n个基分类器,然后提升算法将这n个基分类器进行加权融合,产生最后的结果分类器。在这n个基分类器中,每个分类器的识别率不一定很高,但它们联合后的结果有很高的识别率,这样便提高了弱分类算法的识别率。

两种主要的提升算法:

AdaBoost

随机梯度提升(Stochastic Gradient Boosting)

AdaBoost算法

AdaBoost 种迭代算法,其核心思想是针对同一个训练集训练不同的分类器( ~~ 分类器 ),然后把这些弱分类器集合起来 ,构成 个更强的最终分类器(强分类器)

sklearn中的AdaBoost算法的实现类是 AdaBoostClassifier

from pandas import read_csv 
from sklearn.model_selection import KFold 
from sklearn.model_selection import cross_val_score 
from sklearn.ensemble import AdaBoostClassifier

#导入数据
filename = 'data/boston_housing.csv' 
names= ['CRIM','ZN','INDUS','CHAS','NOX','RM','AGE','DIS','RAD','TAX','PRTATIO','B','LSTAT','MEDV'] 
data = read_csv(filename , names=names) 
data=data.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False) #一定要清洗数据,否则数据中含有NAN就会报错
#将数据分为输入数据和输出结果
array = data.values 
X = array [:,0:13] 
Y = array [:,13] 
Y = Y.astype(int).astype(float)#波士顿房价数据集的标签是浮点型的,但是计算中的方法要求整形的,所以会报错Unknown label type:‘continuous‘,网上看到这个解决办法,还没明白原理
num_folds = 10 
seed = 7 
kfold = KFold(n_splits=num_folds, random_state=seed,shuffle=True) 
num_tree = 100 
model = AdaBoostClassifier(n_estimators=num_tree,random_state=seed) 
model.fit(X,Y)
result= cross_val_score(model,X,Y,cv=kfold)
print(result.mean())
print(model.predict([data.values[5][:13]]))

打印结果如下

PS C:\coding\machinelearning> & C:/Users/admin/anaconda3/envs/pytorch/python.exe c:/coding/machinelearning/AdaBoost算法.py 
0.10845410628019322
[23.]
PS C:\coding\machinelearning> 

随机梯度提升法(GBM)

        随机梯度提升法( BM )基于的思想是 要找到某个函数的最大值,最好的办法就是沿着该函数的梯度方向探寻。梯度算子总是指向函数值增长最快的方向。由于梯度提升算法在每次更新数据集时都需要遍历整个数据集,计算复杂度较高,于是有了一个改进算法一一随机梯度提升算法,该算法一次只用一个样本点来更新回归系数,极大地改善了算法的计算复杂度。

随机梯度提升法在sklearn中的实现类是GradientBoostingClassifier。

from numpy.lib.function_base import gradient
from pandas import read_csv 
from sklearn.model_selection import KFold 
from sklearn.model_selection import cross_val_score 
from sklearn.ensemble import GradientBoostingClassifier
#导入数据
filename = 'data/boston_housing.csv' 
names= ['CRIM','ZN','INDUS','CHAS','NOX','RM','AGE','DIS','RAD','TAX','PRTATIO','B','LSTAT','MEDV'] 
data = read_csv(filename , names=names) 
data=data.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False) #一定要清洗数据,否则数据中含有NAN就会报错
#将数据分为输入数据和输出结果
array = data.values 
X = array[:,0:13] 
Y = array[:,13] 
Y = Y.astype(int).astype(float)#波士顿房价数据集的标签是浮点型的,但是计算中的方法要求整形的,所以会报错Unknown label type:‘continuous‘,网上看到这个解决办法,还没明白原理
num_folds = 10 
seed = 7 
kfold = KFold(n_splits=num_folds, random_state=seed,shuffle=True) 
num_tree = 100 
max_features = 3 
model = GradientBoostingClassifier(n_estimators=num_tree , random_state=seed, 
max_features=max_features) 
result= cross_val_score(model , X, Y, cv=kfold) 
print(result.mean()) 
#预测单个数据
model.fit(X,Y)
print(model.predict([data.values[18][:13]]))

打印结果如下:

PS C:\coding\machinelearning> & C:/Users/admin/anaconda3/envs/pytorch/python.exe c:/coding/machinelearning/随机梯度上升(GBM)算法Boston.py
0.1350724637681159
[20.]
PS C:\coding\machinelearning> 

标签:AI,分类器,算法,num,import,自学,data,model
来源: https://blog.csdn.net/qq_41597915/article/details/122212974

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

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

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

ICode9版权所有