Adaboost代码实现-葡萄酒实例

本章会介绍如何使用py进行Adaboost算法

一、导入相关的库

import pandas as pd
from sklearn.preprocessing import LabelEncoder # 标签编码器
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import AdaBoostClassifier # 集成学习,AdaBoost用的决策树
from sklearn.metrics import accuracy_score

二、获取数据集

df_wine = pd.read_csv("wine0501.csv")
print(df_wine.info())
print(df_wine['Class label'].unique()) # [1,2,3] 葡萄酒类别有三种,但是决策树只能识别二叉树

三、数据预处理

3.1 从标签列(class label)中,过滤掉1类别,剩下2,3类别

df_wine  = df_wine[df_wine['Class label'] != 1]
print(df_wine['Class label'].unique())

3.2 获取特征列和标签列

x = df_wine[['Alcohol','Hue']] # 酒精和色泽
y = df_wine['Class label']

3.3 打印数据

print(x[:5])
print(y[:5])

3.4 通过标签编码器,把标签列转换为数值列

le = LabelEncoder()
y = le.fit_transform(y)
print(y) #[2,3] --> [0,1]

3.5 训练集、测试集划分

x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.2,random_state=23,stratify=y) #随机划分有可能出现极端情况,比如测试集里全是类别 1,类别 0 很少,导致测试集不能代表整体数据分布,模型评估结果失真。加上stratify可以保证抽样不会出现这种情况

四、特征工程,此处略

五、模型训练,预测,评估

5.1 场景1:单一决策树,充当弱分类器

# 4.1 创建模型对象
estimator1 = DecisionTreeClassifier(max_depth=3)
# 4.2 训练模型
estimator1.fit(x_train,y_train)
# 4.3 模型预测
y_pred1 = estimator1.predict(x_test)
print(f"单一决策树预测结果:{y_pred1}")
# 4.4 模型评估
print(f'单一决策树预测率{estimator1.score(x_test,y_test)}')
print(f'单一决策树预测率{accuracy_score(y_test,y_pred1)}') #这俩结果是一样的

5.2 场景2:AdaBoost -->集成学习,CART树,200棵

# 4.1 创建模型对象
# 参1:弱分类器(决策树对象),参2:弱分类器个数,参3:学习率,参4:集成算法
estimator2 = AdaBoostClassifier(estimator=estimator1, n_estimators=200,learning_rate=0.1,algorithm='SAMME')
# 4.2 训练模型
estimator2.fit(x_train,y_train)
# 4.3 模型预测
y_pred2 = estimator2.predict(x_test)
print(f"单一决策树预测结果:{y_pred2}")
# 4.4 模型评估
print(f'单一决策树预测率{estimator2.score(x_test,y_test)}')
print(f'单一决策树预测率{accuracy_score(y_test,y_pred2)}') #这俩结果是一样的