[Toma de decisiones sobre minería de datos e inteligencia comercial] Capítulo 11 Modelo AdaBoost y GBDT

11.1 Implementación de código simple del modelo AdaBoost

1. Demostración del modelo de clasificación de AdaBoost

from sklearn.ensemble import AdaBoostClassifier
X = [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
y = [0, 0, 0, 1, 1]

model = AdaBoostClassifier(random_state=123)
model.fit(X, y)

print(model.predict([[5, 5]]))
[0]

2. Demostración del modelo de regresión de AdaBoost

from sklearn.ensemble import AdaBoostRegressor
X = [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
y = [1, 2, 3, 4, 5]

model = AdaBoostRegressor(random_state=123)
model.fit(X, y)

print(model.predict([[5, 5]]))
[3.]

11.2 Estudio de caso: modelo de marketing de precisión de tarjeta de crédito AdaBoost

11.2.2 Construcción de modelos

1. Leer datos

import pandas as pd
df = pd.read_excel('信用卡精准营销模型.xlsx')
df.head()
edad Ingreso mensual (yuan) Consumo mensual (yuan) género Consumo Mensual/Ingreso Mensual respuesta
0 30 7275 6062 0 0.833265 1
1 25 17739 13648 0 0.769378 1
2 29 25736 14311 0 0.556069 1
3 23 14162 7596 0 0.536365 1
4 27 15563 12849 0 0.825612 1

2. Extraer variables de características y variables de destino

X = df.drop(columns='响应') 
y = df['响应']

3. Divida el conjunto de entrenamiento y el conjunto de prueba

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=123)

4. Entrenamiento y construcción de modelos

from sklearn.ensemble import AdaBoostClassifier
clf = AdaBoostClassifier(random_state=123)
clf.fit(X_train, y_train)
AdaBoostClassifier(estado_aleatorio=123)
En un entorno Jupyter, vuelva a ejecutar esta celda para mostrar la representación HTML o confiar en el cuaderno.
En GitHub, la representación HTML no se puede procesar, intente cargar esta página con nbviewer.org.
AdaBoostClassifier(estado_aleatorio=123)

11.2.3 Predicción y evaluación del modelo

# 模型搭建完毕后,通过如下代码预测测试集数据:
y_pred = clf.predict(X_test)
print(y_pred)
[1 1 1 0 1 0 1 0 0 0 1 1 1 1 1 0 0 1 1 0 1 1 1 1 0 0 0 0 0 0 0 0 0 1 0 1 0
 1 1 0 0 0 1 1 0 0 1 0 0 0 1 0 0 0 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1 0 0 1
 0 0 0 0 1 0 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1
 0 1 0 1 0 0 0 1 0 0 0 1 0 0 1 0 1 1 1 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 0 0 1
 0 1 0 1 0 0 0 0 0 1 1 0 1 0 1 1 1 0 0 1 1 0 0 0 0 1 0 1 0 0 0 1 0 1 0 1 1
 0 0 1 0 0 0 0 0 0 0 1 1 0 1 1]
# 通过和之前章节类似的代码,我们可以将预测值和实际值进行对比:
a = pd.DataFrame()  # 创建一个空DataFrame 
a['预测值'] = list(y_pred)
a['实际值'] = list(y_test)
a.head()
Valor predictivo valor actual
0 1 1
1 1 1
2 1 1
3 0 0
4 1 1
# 查看预测准确度
from sklearn.metrics import accuracy_score
score = accuracy_score(y_pred, y_test)
print(score)
0.85
#查看预测分类概率
y_pred_proba = clf.predict_proba(X_test)
y_pred_proba[0:5]  # 查看前5项,第一列为分类为0的概率,第二列为分类为1的概率
array([[0.19294615, 0.80705385],
       [0.41359387, 0.58640613],
       [0.42597039, 0.57402961],
       [0.66817389, 0.33182611],
       [0.32850159, 0.67149841]])
%matplotlib inline
# 绘制ROC曲线
from sklearn.metrics import roc_curve
fpr, tpr, thres = roc_curve(y_test.values, y_pred_proba[:,1])
import matplotlib.pyplot as plt
plt.plot(fpr, tpr)
plt.show()


inserte la descripción de la imagen aquí

# 查看AUC值
from sklearn.metrics import roc_auc_score
score = roc_auc_score(y_test, y_pred_proba[:,1])
print(score)
0.9559047909673483
# 查看特征重要性
clf.feature_importances_
array([0.18, 0.2 , 0.36, 0.02, 0.24])
# 通过DataFrame的方式展示特征重要性
features = X.columns  # 获取特征名称
importances = clf.feature_importances_  # 获取特征重要性

# 通过二维表格形式显示
importances_df = pd.DataFrame()
importances_df['特征名称'] = features
importances_df['特征重要性'] = importances
importances_df.sort_values('特征重要性', ascending=False)
nombre de la función importancia de la característica
2 Consumo mensual (yuan) 0.36
4 Consumo Mensual/Ingreso Mensual 0.24
1 Ingreso mensual (yuan) 0.20
0 edad 0.18
3 género 0.02

11.2.4 Parámetros del modelo (opcional)

# # 分类模型,通过如下代码可以查看官方介绍
# from sklearn.ensemble import AdaBoostClassifier
# AdaBoostClassifier?
# # 回归模型,通过如下代码可以查看官方介绍
# from sklearn.ensemble import AdaBoostRegressor
# AdaBoostRegressor?

11.3 Implementación de código simple del algoritmo GBDT

1. Demostración del modelo de clasificación GBDT

from sklearn.ensemble import GradientBoostingClassifier
X = [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
y = [0, 0, 0, 1, 1]

model = GradientBoostingClassifier(random_state=123)
model.fit(X, y)

print(model.predict([[5, 5]]))
[0]

2. Demostración del modelo de regresión GBDT

from sklearn.ensemble import GradientBoostingRegressor
X = [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
y = [1, 2, 3, 4, 5]

model = GradientBoostingRegressor(random_state=123)
model.fit(X, y)

print(model.predict([[5, 5]]))
[2.54908866]

11.4 Estudio de caso de GBDT: modelo de precios de productos

11.4.2 Construcción de modelos

1. Leer datos

import pandas as pd
df = pd.read_excel('产品定价模型.xlsx')
df.head()
número de páginas categoría impresión en color el papel precio
0 207 Categoría de tecnología 0 papel doble offset 60
1 210 Categoría de tecnología 0 papel doble offset 62
2 206 Categoría de tecnología 0 papel doble offset 62
3 218 Categoría de tecnología 0 papel doble offset 64
4 209 Categoría de tecnología 0 papel doble offset 60

Ver la cantidad de datos para cada categoría

df['类别'].value_counts()
技术类    336
教辅类    333
办公类    331
Name: 类别, dtype: int64
df['彩印'].value_counts()
0    648
1    352
Name: 彩印, dtype: int64
df['纸张'].value_counts()
双胶纸    615
铜版纸    196
书写纸    189
Name: 纸张, dtype: int64

2. Procesamiento de variables de texto escrito

Convierta el contenido del texto en un valor, y la función LabelEncoder() se explicará con más detalle en la Sección 11.1.2

from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
df['类别'] = le.fit_transform(df['类别'])  # 处理类别
# 将类别一列处理后,我们可以使用value_counts()方法查看转化效果:
df['类别'].value_counts()
1    336
2    333
0    331
Name: 类别, dtype: int64
# 另外一种文本内容转为数值的方法,注意不要再运行完上面的代码后运行,因为上面的内容已经被替代完毕了,如果想尝试,需要重新运行,并且,先运行下面的代码
# df['类别'] = df['类别'].replace({'办公类': 0, '技术类': 1, '教辅类': 2})  
# df['类别'].value_counts()
# 下面我们使用同样的方法处理“纸张”一列:
le = LabelEncoder()
df['纸张'] = le.fit_transform(df['纸张'])
# 此时的表格如下:
df.head()
número de páginas categoría impresión en color el papel precio
0 207 1 0 1 60
1 210 1 0 1 62
2 206 1 0 1 62
3 218 1 0 1 64
4 209 1 0 1 60

3. Extraer variables de características y variables de destino

X = df.drop(columns='价格') 
y = df['价格']  

4. Divida el conjunto de entrenamiento y el conjunto de prueba

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=123)

5. Entrenamiento y construcción de modelos

from sklearn.ensemble import GradientBoostingRegressor
model = GradientBoostingRegressor(random_state=123)
model.fit(X_train, y_train)
GradientBoostingRegressor(estado_aleatorio=123)
En un entorno Jupyter, vuelva a ejecutar esta celda para mostrar la representación HTML o confiar en el cuaderno.
En GitHub, la representación HTML no se puede procesar, intente cargar esta página con nbviewer.org.
GradientBoostingRegressor(estado_aleatorio=123)

11.4.3 Predicción y evaluación del modelo

# 模型搭建完毕后,通过如下代码预测测试集数据:
y_pred = model.predict(X_test)
print(y_pred[0:50])
[ 71.15004038  79.56199921  68.21751792  90.78788507  78.88479128
  42.28022702  39.27334177  60.74670841  53.59744659  77.65931771
  80.22295545  76.04437155  79.56199921  58.40372895  79.65245266
  44.27997693  53.18177447  35.31452467  92.1798291   58.40372895
  41.96644278  99.50466356  80.22295545  79.69648341  91.45061741
  42.93885741  42.86973046  75.71824996  48.55203652  62.94185778
  39.47077874  61.54190648  95.18389309  51.88118394  65.1293139
  50.17577837  39.54495179  83.63542315  56.24632221 102.1176112
  48.89080247  49.23639342  33.03502962  52.74862135  35.47220867
  35.00370671  53.9446399   74.62364353  35.31452467  53.9446399 ]
# 通过和之前章节类似的代码,我们可以将预测值和实际值进行对比:
a = pd.DataFrame()  # 创建一个空DataFrame 
a['预测值'] = list(y_pred)
a['实际值'] = list(y_test)
a.head()
Valor predictivo valor actual
0 71.150040 75
1 79.561999 84
2 68.217518 68
3 90.787885 90
4 78.884791 85
# 查看预测评分 - 方法1:自带的score函数,本质就是R-squared值(也即统计学中常说的R^2)
model.score(X_test, y_test)
0.8741691363311168
# 查看预测评分 - 方法2:r2_score()函数
from sklearn.metrics import r2_score
r2 = r2_score(y_test, model.predict(X_test))
print(r2)
0.8741691363311168
# 查看特征重要性
model.feature_importances_
array([0.49070203, 0.44718694, 0.04161545, 0.02049558])
# 通过DataFrame的方式展示特征重要性
features = X.columns  # 获取特征名称
importances = model.feature_importances_  # 获取特征重要性

# 通过二维表格形式显示
importances_df = pd.DataFrame()
importances_df['特征名称'] = features
importances_df['特征重要性'] = importances
importances_df.sort_values('特征重要性', ascending=False)
nombre de la función importancia de la característica
0 número de páginas 0.490702
1 categoría 0.447187
2 impresión en color 0.041615
3 el papel 0.020496

11.4.4 Parámetros del modelo (opcional)

# # 分类模型,通过如下代码可以查看官方介绍
# from sklearn.ensemble import AdaBoostClassifier
# AdaBoostClassifier?
# # 回归模型,通过如下代码可以查看官方介绍
# from sklearn.ensemble import AdaBoostRegressor
# AdaBoostRegressor?

Supongo que te gusta

Origin blog.csdn.net/Algernon98/article/details/130075859
Recomendado
Clasificación