✨ 欢迎关注Python机器学习AI ✨
本节介绍:树模型与核方法融合的xRFM递归特征机在表格数据特征学习中的回归应用与SHAP解释,数据采用模拟数据无任何现实意义,作者根据个人对机器学习的理解进行代码实现与图表输出,仅供参考。完整数据和代码将在稍后上传至交流群,成员可在交流群中获取下载。需要的朋友可关注公众文末提供的获取方式。文末提供高效的学习工具~!
✨ 论文信息 ✨
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
模型在训练集上表现非常好,误差极低且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()
利用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')
分别针对特征“MLSS”、“MLVSS”和“infS”(贡献排名前三特征)绘制它们的SHAP值依赖图,通过多项式曲线拟合展示每个特征对模型预测输出(SR)的非线性影响关系,图中还包括了数据分布直方图和拟合曲线的置信区间,便于理解特征与预测结果之间的具体作用趋势,具体参考文章——期刊配图:基于多项式拟合的SHAP依赖图利用拟合曲线、置信区间与直方图揭示特征趋势,更多丰富的可视化示例可参考公众号往期文章,SHAP值计算完成后,其展示方式多样且灵活,可根据需求进行多种形式的图形呈现
当然,公众号中还有更多机器学习期刊实战技巧,您可以通过历史文章进行检索和阅读,关注公众号,点击“发信息”>“历史文章”即可搜索公众号所有文章信息
✨ 该文章案例 ✨
在上传至交流群的文件中,像往期文章一样,将对案例进行逐步分析,确保读者能够达到最佳的学习效果。内容都经过详细解读,帮助读者深入理解模型的实现过程和数据分析步骤,从而最大化学习成果。
同时,结合提供的免费AI聚合网站进行学习,能够让读者在理论与实践之间实现融会贯通,更加全面地掌握核心概念。
✨ 介绍 ✨
本节介绍到此结束,有需要学习数据分析和Python机器学习相关的朋友欢迎到公众号后台获取作者的公众号合集。截至目前为止,合集已包含300多篇文章,购买合集的同时,还将提供免费稳定的AI大模型使用。
更新的内容包含数据、代码、注释和参考资料。 作者仅分享案例项目,不提供额外的答疑服务。项目中将提供详细的代码注释和丰富的解读,帮助您理解每个步骤 。 获取 前请咨询,避免不必要的问题。
✨ 群友反馈 ✨
✨ 合集获取 ✨
欢迎到公众号后台,获取更多Python机器学习和AI相关的内容 ,希望能为您的学习之路提供帮助!
✨ AI工具推荐 ✨
往期推荐
期刊配图:模型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倍交叉验证
如果你对类似于这样的文章感兴趣。
欢迎关注、点赞、转发~
个人观点,仅供参考
