新算法:树模型与核方法融合的xRFM递归特征机在表格数据特征学习中的回归应用与SHAP解释

机器学习大模型算法

picture.image

✨ 欢迎关注Python机器学习AI ✨

本节介绍:树模型与核方法融合的xRFM递归特征机在表格数据特征学习中的回归应用与SHAP解释,数据采用模拟数据无任何现实意义,作者根据个人对机器学习的理解进行代码实现与图表输出,仅供参考。完整数据和代码将在稍后上传至交流群,成员可在交流群中获取下载。需要的朋友可关注公众文末提供的获取方式。文末提供高效的学习工具~!

✨ 论文信息 ✨

picture.image

picture.image

xRFM是一种面向表格数据的特征学习模型,它通过结合核方法与树结构,递归地将训练数据根据投影方向分割成多个子集,并在每个叶子节点上训练局部递归特征机(RFM),从而既能适应数据的局部结构,实现对大规模训练数据的高效扩展,又能通过平均梯度外积方法提供天然的模型可解释性,最终在回归和分类任务中显著优于传统的梯度提升树(GBDT)和其他先进模型

  
https://github.com/dmbeaglehole/xRFM/tree/main?tab=readme-ov-file

这是xRFM模型的官方GitHub代码库,提供了用于表格数据的准确、高效且可解释的递归特征学习模型的实现、训练和评估工具

✨ 代码实现 ✨

  
import pandas as pd  
import numpy as np  
import matplotlib.pyplot as plt  
plt.rcParams['font.family'] = 'Times New Roman'  
plt.rcParams['axes.unicode_minus'] = False  
import warnings  
# 忽略所有警告  
warnings.filterwarnings("ignore")  
  
path = r"2025-12-15公众号Python机器学习AI.xlsx"  
df = pd.read_excel(path)  
  
from sklearn.model_selection import train_test_split, KFold  
import torch  
  
X = df.drop(['SR'],axis=1)  
y = df['SR']  
  
X_tensor = torch.tensor(X.values, dtype=torch.float32)  
y_tensor = torch.tensor(y.values, dtype=torch.float32)  
  
# 把张量放到特定设备,比如 GPU  
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')  
X_tensor = X_tensor.to(device)  
y_tensor = y_tensor.to(device)  
  
# 划分训练集和测试集  
X_temp, X_test, y_temp, y_test = train_test_split(X_tensor, y_tensor, test_size=0.2, random_state=42)  
# 然后将训练集进一步划分为训练集和验证集  
X_train, X_val, y_train, y_val = train_test_split(X_temp, y_temp, test_size=0.125, random_state=42)  # 0.125 x 0.8 = 0.1

从Excel文件读取数据,将特征和目标变量转换为PyTorch张量(xRFM模型接受张量输入而非数组或DataFrame)并移动到GPU(如果可用),然后按比例划分为训练集、验证集和测试集

  
from xrfm import xRFM  
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')  
  
rfm_params = {  
    'model': {  
        'kernel': 'l2',  
        'bandwidth': 10.0,  
        'exponent': 1.0,  
        'diag': False,  
        'bandwidth_mode': 'constant',  
    },  
    'fit': {  
        'reg': 1e-3,  
        'iters': 3,  
        'verbose': False,  
        'early_stop_rfm': True,  
    }  
}  
  
model = xRFM(  
    rfm_params=rfm_params,  
    device=device,  
    tuning_metric='mse'  
)  
model.fit(X_train, y_train, X_val, y_val)

定义并初始化一个xRFM模型,设置核函数类型和训练参数,将模型部署到GPU或CPU上,之后使用训练集和验证集的张量数据进行模型训练,优化均方误差(mse)指标(回归模型);当然,这个数据是模拟数据且样本较少,主要用于方法实现和演示

初始化的xRFM模型包含rfm_params、device和tuning_metric等参数,但如果数据中存在分类特征,则需要通过categorical_info参数明确指明哪些特征是类别型的;这里由于示例数据全为连续特征,因此未使用该参数,categorical_info参数放在构建xRFM的分类模型时讲解和应用

  
from sklearn.metrics import r2_score, mean_squared_error  
import pandas as pd  
import numpy as np  
import matplotlib.pyplot as plt  
plt.rcParams['font.family'] = 'Times New Roman'  
plt.rcParams['axes.unicode_minus'] = False  
  
# 预测  
y_train_pred = model.predict(X_train)  
y_val_pred = model.predict(X_val)          
y_test_pred = model.predict(X_test)  
  
# 计算训练集、验证集和测试集的性能指标  
mse_train = mean_squared_error(y_train, y_train_pred)  
rmse_train = np.sqrt(mse_train)  
r2_train = r2_score(y_train, y_train_pred)  
  
mse_val = mean_squared_error(y_val, y_val_pred)         
rmse_val = np.sqrt(mse_val)                             
r2_val = r2_score(y_val, y_val_pred)                   
  
mse_test = mean_squared_error(y_test, y_test_pred)  
rmse_test = np.sqrt(mse_test)  
r2_test = r2_score(y_test, y_test_pred)  
  
# 打印性能指标  
print(f'训练集Mean Squared Error (MSE): {mse_train}')  
print(f'训练集Root Mean Squared Error (RMSE): {rmse_train}')  
print(f'训练集R-squared (R2): {r2_train}')  
print('-------------------------')  
print(f'验证集Mean Squared Error (MSE): {mse_val}')  
print(f'验证集Root Mean Squared Error (RMSE): {rmse_val}')  
print(f'验证集R-squared (R2): {r2_val}')  
print('-------------------------')  
print(f'测试集Mean Squared Error (MSE): {mse_test}')  
print(f'测试集Root Mean Squared Error (RMSE): {rmse_test}')  
print(f'测试集R-squared (R2): {r2_test}')

使用训练好的模型xRFM对训练集、验证集和测试集进行预测,并计算它们的回归性能指标

  
训练集Mean Squared Error (MSE): 0.11860602349042892  
训练集Root Mean Squared Error (RMSE): 0.34439224004745483  
训练集R-squared (R2): 0.9998574256896973  
-------------------------  
验证集Mean Squared Error (MSE): 107.11115264892578  
验证集Root Mean Squared Error (RMSE): 10.349452018737793  
验证集R-squared (R2): 0.8447951078414917  
-------------------------  
测试集Mean Squared Error (MSE): 123.71357727050781  
测试集Root Mean Squared Error (RMSE): 11.122660636901855  
测试集R-squared (R2): 0.8502494096755981

picture.image

模型在训练集上表现非常好,误差极低且R²接近1,说明拟合得几乎完美;但在验证集和测试集上的误差明显增大,虽然R²仍较高,表明模型有一定泛化能力,但存在一定过拟合现象

  
plt.figure()  
shap.summary_plot(shap_values_1, X_test, feature_names=X.columns, plot_type="dot", show=False)  
plt.savefig("SHAP-1.pdf", format='pdf',bbox_inches='tight', dpi=1200)  
plt.show()

picture.image

利用SHAP对模型xRFM进行解释基于训练集数据解释模型对测试集的预测,这里绘制各特征对预测结果的影响(SHAP值)摘要图

  
plot_shap_dependence(feature_name='MLSS', X_data=X_test_df, shap_values_df=shap_values_df, poly_degree=4,   
                     save_pdf_name="SHAP_2.pdf", legend_location='upper left')  
                       
plot_shap_dependence(feature_name='MLVSS', X_data=X_test_df, shap_values_df=shap_values_df, poly_degree=2,   
                     save_pdf_name="SHAP_3.pdf", legend_location='upper right')  
                       
plot_shap_dependence(feature_name='infS', X_data=X_test_df, shap_values_df=shap_values_df, poly_degree=2,   
                     save_pdf_name="SHAP_4.pdf", legend_location='upper left')                                          

picture.image

分别针对特征“MLSS”、“MLVSS”和“infS”(贡献排名前三特征)绘制它们的SHAP值依赖图,通过多项式曲线拟合展示每个特征对模型预测输出(SR)的非线性影响关系,图中还包括了数据分布直方图和拟合曲线的置信区间,便于理解特征与预测结果之间的具体作用趋势,具体参考文章——期刊配图:基于多项式拟合的SHAP依赖图利用拟合曲线、置信区间与直方图揭示特征趋势,更多丰富的可视化示例可参考公众号往期文章,SHAP值计算完成后,其展示方式多样且灵活,可根据需求进行多种形式的图形呈现

当然,公众号中还有更多机器学习期刊实战技巧,您可以通过历史文章进行检索和阅读,关注公众号,点击“发信息”>“历史文章”即可搜索公众号所有文章信息

picture.image

✨ 该文章案例 ✨

picture.image

在上传至交流群的文件中,像往期文章一样,将对案例进行逐步分析,确保读者能够达到最佳的学习效果。内容都经过详细解读,帮助读者深入理解模型的实现过程和数据分析步骤,从而最大化学习成果。

同时,结合提供的免费AI聚合网站进行学习,能够让读者在理论与实践之间实现融会贯通,更加全面地掌握核心概念。

✨ 介绍 ✨

本节介绍到此结束,有需要学习数据分析和Python机器学习相关的朋友欢迎到公众号后台获取作者的公众号合集。截至目前为止,合集已包含300多篇文章,购买合集的同时,还将提供免费稳定的AI大模型使用。

更新的内容包含数据、代码、注释和参考资料。 作者仅分享案例项目,不提供额外的答疑服务。项目中将提供详细的代码注释和丰富的解读,帮助您理解每个步骤 。 获取 前请咨询,避免不必要的问题。

✨ 群友反馈 ✨

picture.image

✨ 合集获取 ✨

picture.image

欢迎到公众号后台,获取更多Python机器学习和AI相关的内容 ,希望能为您的学习之路提供帮助!

✨ AI工具推荐 ✨

picture.image

往期推荐

期刊配图:模型SHAP解释特征类别柱状图、饼图与蜂巢图的组合展示

期刊复现:基于自动机器学习的预测模型构建及其残差和部分依赖分析

期刊复现:SVM、RF、BDT、DT、Logit五大模型堆叠31种组合情况最优模型的SHAP解释

期刊复现:单变量特征降维与共线性分析结合RFE集成排名进行特征筛选下的组合拳流程

期刊复现:SVM、RF、BDT、DT、Logit五大模型堆叠31种组合情况优化与最优模型选择可视化

期刊复现:基于相关系数与AUC值优化特征选择剔除冗余特征精简模型(附代码)

期刊复现:如何正确使用LASSO进行二分类特征选择?避开常见误区,掌握实用技巧

期刊复现:融合聚类与多分类转二分类的亚型可解释SHAP机器学习模型构建

期刊复现:基于LightGBM、XGBoost与RF的Lasso回归堆叠模型在连续和分类特征上的模型解释

期刊复现:基于LightGBM、XGBoost与RF的堆叠模型贝叶斯优化调参与Lasso回归元模型,结合10倍交叉验证

picture.image

如果你对类似于这样的文章感兴趣。

欢迎关注、点赞、转发~

个人观点,仅供参考

0
0
0
0
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论