ML之PDP:基于titanic泰坦尼克是否获救二分类预测数据集利用PDP部分依赖图对RF随机森林实现模型可解释性案例

326 篇文章 70 订阅

ML之PDP:基于titanic泰坦尼克是否获救二分类预测数据集利用PDP部分依赖图对RF随机森林实现模型可解释性案例

目录

基于titanic泰坦尼克是否获救二分类预测数据集利用PDP部分依赖图对RF随机森林实现模型可解释性案例

# 1、定义数据集

# 2、数据预处理

# 2.1、类别特征编码

# 2.2、特征筛选且空值填充

# 3、模型训练与推理

# 3.1、数据集切分

# 3.2、模型训练

# 3.3、树模型可视化并保存图片

# 4、PDP实现模型可解释性

# 4.1、基于pdpbox库实现特征间相关性可视化

# (1)、绘制不同特征值(特征网格)的平均目标值:检查特征和目标之间的信息

# 4.2、模型可解释性

# (1)、绘制跨不同特征值(特征网格)的模型预测分布

# (2)、单特征PDP可视化

# (3)、双特征交互PDP可视化


相关文章
ML之PDP:基于titanic泰坦尼克是否获救二分类预测数据集利用PDP部分依赖图对RF随机森林模型实现可解释性案例
ML之PDP:基于titanic泰坦尼克是否获救二分类预测数据集利用PDP部分依赖图对RF随机森林模型实现可解释性案例实现

基于titanic泰坦尼克是否获救二分类预测数据集利用PDP部分依赖图对RF随机森林实现模型可解释性案例

# 1、定义数据集

PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
103Braund, Mr. Owen Harrismale2210A/5 211717.25S
211Cumings, Mrs. John Bradley (Florence Briggs Thayer)female3810PC 1759971.2833C85C
313Heikkinen, Miss. Lainafemale2600STON/O2. 31012827.925S
411Futrelle, Mrs. Jacques Heath (Lily May Peel)female351011380353.1C123S
503Allen, Mr. William Henrymale35003734508.05S

# 2、数据预处理

# 2.1、类别特征编码

# 2.2、特征筛选且空值填充

   Pclass   Age  SibSp  Parch     Fare  Sex_encoding  Embarked_encoding  \
0       3  22.0      1      0   7.2500             1                  0   
1       1  38.0      1      0  71.2833             0                  1   
2       3  26.0      0      0   7.9250             0                  0   
3       1  35.0      1      0  53.1000             0                  0   
4       3  35.0      0      0   8.0500             1                  0   

   Survived  
0         0  
1         1  
2         1  
3         1  
4         0  

# 3、模型训练与推理

# 3.1、数据集切分

# 3.2、模型训练

# 3.3、树模型可视化并保存图片

# 4、PDP实现模型可解释性

# 4.1、基于pdpbox库实现特征间相关性可视化

# (1)、绘制不同特征值(特征网格)的平均目标值:检查特征和目标之间的信息

 

target_plot summary_df 
    x  display_column  value_lower  value_upper  count  Survived
0  0       [0, 7.73)     0.000000     7.732844     99  0.141414
1  1     [7.73, 7.9)     7.732844     7.895800     86  0.337209
2  2     [7.9, 8.66)     7.895800     8.662500    110  0.154545
3  3      [8.66, 13)     8.662500    13.000000     91  0.329670
4  4      [13, 16.7)    13.000000    16.700000    108  0.370370
5  5      [16.7, 26)    16.700000    26.000000     71  0.450704
6  6     [26, 35.11)    26.000000    35.111111    128  0.445312
7  7   [35.11, 73.5)    35.111111    73.500000     96  0.510417
8  8  [73.5, 512.33]    73.500000   512.329200    102  0.725490

# 4.2、模型可解释性

# (1)、绘制跨不同特征值(特征网格)的模型预测分布

 

actual_plot summary_df 
    x   display_column  ...  actual_prediction_q2  actual_prediction_q3
0  0        [0, 7.73)  ...              0.135135              0.135135
1  1      [7.73, 7.9)  ...              0.135135              0.735294
2  2      [7.9, 8.21)  ...              0.135135              0.135135
3  3    [8.21, 12.41)  ...              0.135135              0.526316
4  4    [12.41, 15.9)  ...              0.135135              0.596491
5  5       [15.9, 26)  ...              0.181818              0.526316
6  6      [26, 34.38)  ...              0.461538              0.909091
7  7   [34.38, 76.68)  ...              0.285714              1.000000
8  8  [76.68, 512.33]  ...              1.000000              1.000000

# (2)、单特征PDP可视化

计算并绘制PDP图解释模型预测

 

 

# (3)、双特征交互PDP可视化

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
以下是利用Python的scikit-learn库实现随机森林模型的代码: ```python import pandas as pd from sklearn.ensemble import RandomForestClassifier from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score # 读取数据 data = pd.read_csv('titanic.csv') # 数据预处理 data = data.drop(['PassengerId', 'Name', 'Ticket', 'Cabin'], axis=1) data = pd.get_dummies(data) data = data.fillna(data.mean()) # 划分训练集和测试集 X = data.drop('Survived', axis=1) y = data['Survived'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 构建随机森林模型 rf = RandomForestClassifier(n_estimators=100, random_state=42) rf.fit(X_train, y_train) # 预测测试集 y_pred = rf.predict(X_test) accuracy = accuracy_score(y_test, y_pred) print('Random Forest Accuracy:', accuracy) # 输出影响因素的重要排序 importances = pd.DataFrame({'feature': X_train.columns, 'importance': rf.feature_importances_}) importances = importances.sort_values('importance', ascending=False) print(importances) # 输出随机森林收敛 import matplotlib.pyplot as plt plt.plot(rf.estimators_[0].predict(X_test)) plt.plot(y_test) plt.legend(['Prediction', 'Ground Truth']) plt.show() ``` 解释一下代码的每一部分: 1. 首先读取数据,并进行一些预处理,包括删除无用的列、对离散变量进行独热编码、填充缺失值等。 2. 利用train_test_split函数将数据集划分为训练集和测试集。 3. 构建随机森林模型,其中n_estimators参数指定了决策树的数量。 4. 对测试集进行预测,并计算预测准确率。 5. 输出影响因素的重要排序,即每个特征对预测结果的重要。 6. 输出随机森林收敛,即第一个决策树对测试集的预测结果和真实结果的比较。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个处女座的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值