AI-机器学习-自学笔记(十)装袋算法

装袋算法是一种提高分类准确度的算法,通过给定组合投票的方式获得最优解。比如你生病了去不同医院看了几个医生,每个医生都给你开了药方,最后哪个药方的出现次数多 ,就说明这个药方越有可能是最优解,这就是装袋算法的思想。

主要的三种装袋算法模型:

装袋决策树(Bagged Decision Trees)

随机森林(Random Forest)

极端随机树(Extra Trees)

装袋决策树:
以最常见的装袋决策树为例,sklearn中实现装袋决策树算法的类是 BaggingClassifie。

#装袋决策树算法-波士顿数据集
from pandas import read_csv 
from sklearn.model_selection import KFold 
from sklearn.model_selection import cross_val_score 
from sklearn.ensemble import BaggingClassifier 
from sklearn.tree import DecisionTreeClassifier 
#导入数据
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 = 11
kfold = KFold(n_splits=num_folds, random_state=seed,shuffle=True) 
cart = DecisionTreeClassifier() 
num_tree = 100 
model = BaggingClassifier (base_estimator=cart, 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/装袋决策树Boston.py
0.15043478260869564
[28.]
PS C:\coding\machinelearning> 

决策森林:
顾名思义,随机森林是用随机的方式建立一个森林,森林由很多的决策树组成, 且每一棵决策树之间是没有关联的。得到森林之后,当有一个新的输入样本进入的时候, 就让森林中的每一棵决策树分别进行判断,看看这个样本应该属于哪一类,再看看哪一类被选择最多,就预测这个样本为哪一类。

sklearn 中实现随机森林算法的类是 RandomForestClassifier类

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

运行结果如下:

PS C:\coding\machinelearning> & C:/Users/admin/anaconda3/envs/pytorch/python.exe c:/coding/machinelearning/随机森林Boston.py
0.13942028985507246
[28.]
PS C:\coding\machinelearning> 

 

posted on 2022-03-12 01:40  毕达哥拉斯  阅读(217)  评论(0编辑  收藏  举报

导航