更多免费AI量化课程参考:
https://www.bilibili.com/video/BV1BcW3eLEAn/
使用chatgpt构建基于CRYPTO高频数据的因子库
https://www.bilibili.com/video/BV1sPpfeRE4s/
学习系统性构建交易策略的方法(2):因子体系和模型迭代升级
https://www.bilibili.com/video/BV1jZ421K7bq/
Boruta 和 SHAP(SHapley Additive exPlanations)都是用于特征选择和解释的工具。结合 Boruta 和 SHAP,可以更好地选择和解释特征变量在预测模型中的重要性。
Boruta
Boruta 是一种全特征选择方法,旨在确定所有对响应变量有影响的特征。它通过对数据集进行随机森林训练,并将特征的原始重要性与通过随机打乱特征顺序得到的“影子”特征的重要性进行比较,来判断哪些特征是重要的。
SHAP
SHAP 值提供了一种一致且可解释的方法来量化每个特征对预测的贡献。SHAP 基于合作博弈论,计算每个特征在不同组合中的边际贡献,从而获得对特征贡献的全局解释。
结合 Boruta 和 SHAP 进行特征选择
我们可以首先使用 Boruta 进行特征选择,然后使用 SHAP 对模型进行解释。以下是一个结合 Boruta 和 SHAP 的完整代码示例:
import numpy as np
import pandas as pd
from sklearn.ensemble import RandomForestRegressor
from boruta import BorutaPy
import shap
# 生成示例数据
np.random.seed(0)
data = pd.DataFrame({
'x1': np.random.rand(100),
'x2': np.random.rand(100),
'x3': np.random.rand(100),
'y': np.random.rand(100)
})
# 特征变量和目标变量
X = data[['x1', 'x2', 'x3']]
y = data['y']
# 使用随机森林进行特征选择
forest = RandomForestRegressor(n_jobs=-1, max_depth=5, random_state=0)
boruta_selector = BorutaPy(forest, n_estimators='auto', random_state=0)
# 训练Boruta
boruta_selector.fit(X.values, y.values)
# 获取选定的特征
selected_features = X.columns[boruta_selector.support_].tolist()
print(f"Selected Features: {selected_features}")
# 使用 SHAP 解释模型
forest.fit(X[selected_features], y)
explainer = shap.TreeExplainer(forest)
shap_values = explainer.shap_values(X[selected_features])
# 可视化 SHAP 值
shap.summary_plot(shap_values, X[selected_features])
# 计算 SHAP 值的重要性
shap_importance = np.abs(shap_values).mean(axis=0)
shap_importance_df = pd.DataFrame({'feature': selected_features, 'importance': shap_importance})
shap_importance_df = shap_importance_df.sort_values(by='importance', ascending=False)
print("SHAP Feature Importance:")
print(shap_importance_df)
解释步骤
生成示例数据:创建一个包含三个特征变量和一个目标变量的数据集。
特征选择:使用 Boruta 进行特征选择。Boruta 将使用随机森林训练,并比较特征的重要性,以选择出对目标变量有显著影响的特征。
模型训练:使用选定的特征变量训练一个随机森林模型。
SHAP 解释:使用 SHAP 解释模型,计算并可视化每个特征对预测结果的贡献。
计算 SHAP 重要性:计算每个特征的 SHAP 值的重要性,并进行排序。
优缺点分析
优点:
全面特征选择:Boruta 能够全面地评估特征的重要性,避免遗漏重要特征。
一致解释:SHAP 提供一致且可解释的特征贡献度量,有助于理解模型的行为。
结合使用:将 Boruta 和 SHAP 结合使用,可以先进行特征选择,再进行详细解释,效果更佳。
缺点:
计算复杂度:Boruta 和 SHAP 都涉及大量计算,尤其是当数据集较大时,计算时间可能较长。
随机性:Boruta 基于随机森林,结果可能会受到随机性的影响,尽管可以通过增加迭代次数来减少这种影响。
结合 Boruta 和 SHAP 可以更好地选择和解释特征,为模型优化和解释提供有力支持。种全特征选择方法,旨在确定所有对响应变量有影响的特征。它通过对数据集进行随机森林训练,并将特征的原始重要性与通过随机打乱特征顺序得到的“影子”特征的重要性进行比较,来判断哪些特征是重要的。
SHAP
SHAP 值提供了一种一致且可解释的方法来量化每个特征对预测的贡献。SHAP 基于合作博弈论,计算每个特征在不同组合中的边际贡献,从而获得对特征贡献的全局解释。
结合 Boruta 和 SHAP 进行特征选择
我们可以首先使用 Boruta 进行特征选择,然后使用 SHAP 对模型进行解释。以下是一个结合 Boruta 和 SHAP 的完整代码示例:
import numpy as np
import pandas as pd
from sklearn.ensemble import RandomForestRegressor
from boruta import BorutaPy
import shap
# 生成示例数据
np.random.seed(0)
data = pd.DataFrame({
'x1': np.random.rand(100),
'x2': np.random.rand(100),
'x3': np.random.rand(100),
'y': np.random.rand(100)
})
# 特征变量和目标变量
X = data[['x1', 'x2', 'x3']]
y = data['y']
# 使用随机森林进行特征选择
forest = RandomForestRegressor(n_jobs=-1, max_depth=5, random_state=0)
boruta_selector = BorutaPy(forest, n_estimators='auto', random_state=0)
# 训练Boruta
boruta_selector.fit(X.values, y.values)
# 获取选定的特征
selected_features = X.columns[boruta_selector.support_].tolist()
print(f"Selected Features: {selected_features}")
# 使用 SHAP 解释模型
forest.fit(X[selected_features], y)
explainer = shap.TreeExplainer(forest)
shap_values = explainer.shap_values(X[selected_features])
# 可视化 SHAP 值
shap.summary_plot(shap_values, X[selected_features])
# 计算 SHAP 值的重要性
shap_importance = np.abs(shap_values).mean(axis=0)
shap_importance_df = pd.DataFrame({'feature': selected_features, 'importance': shap_importance})
shap_importance_df = shap_importance_df.sort_values(by='importance', ascending=False)
print("SHAP Feature Importance:")
print(shap_importance_df)
解释步骤
生成示例数据:创建一个包含三个特征变量和一个目标变量的数据集。
特征选择:使用 Boruta 进行特征选择。Boruta 将使用随机森林训练,并比较特征的重要性,以选择出对目标变量有显著影响的特征。
模型训练:使用选定的特征变量训练一个随机森林模型。
SHAP 解释:使用 SHAP 解释模型,计算并可视化每个特征对预测结果的贡献。
计算 SHAP 重要性:计算每个特征的 SHAP 值的重要性,并进行排序。
优缺点分析
优点:
全面特征选择:Boruta 能够全面地评估特征的重要性,避免遗漏重要特征。
一致解释:SHAP 提供一致且可解释的特征贡献度量,有助于理解模型的行为。
结合使用:将 Boruta 和 SHAP 结合使用,可以先进行特征选择,再进行详细解释,效果更佳。
缺点:
计算复杂度:Boruta 和 SHAP 都涉及大量计算,尤其是当数据集较大时,计算时间可能较长。
随机性:Boruta 基于随机森林,结果可能会受到随机性的影响,尽管可以通过增加迭代次数来减少这种影响。
结合 Boruta 和 SHAP 可以更好地选择和解释特征,为模型优化和解释提供有力支持。


雷达卡




京公网安备 11010802022788号







