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>