2025年1月发表在《Nature》上的一篇名为《Accurate predictions on small data with a tabular foundation model》的研究,研究提出了 TabPFN (Tabular Prior-data Fitted Network),结合Transformer和表格数据,直接起飞了。 Nature正刊首页 最近的Claude 3.7十分强大,我们来复现看看。
准备工作 首先安装环境
pip install tabpfn
如果提示缺少什么库自己安装就行了,这个AI无法替代
代码 然后上3A级 连招(AI写代码,AI写文档,AI做项目)
提示词:
阅读我的TabPFN示例代码,帮我在我自己的数据上使用该方法,其中因变量为P降水,自变量是Runoff, LWSC , E, Area, 输入数据为machine_l.csv。【这里复制Nature正刊提供的示例代码】
AI写出的代码:
import pandas as pd import numpy as np from sklearn.model_selection import train_test_split from sklearn.metrics import mean_squared_error, r2_score import matplotlib.pyplot as plt from scipy.stats import pearsonr from tabpfn import TabPFNRegressor # 读取数据 df = pd.read_csv( 'data/machine_l.csv' ) # 定义特征和目标变量 X = df[[ 'Runoff' , 'LWSC' , 'E' , 'Area' ]] y = df[ 'P' ] # 划分训练集和测试集,比例为8:2 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 初始化TabPFN模型 model = TabPFNRegressor() # 训练模型 model.fit(X_train, y_train) # 预测 y_pred_train = model.predict(X_train) y_pred_test = model.predict(X_test) # 计算评估指标
train_mse = mean_squared_error(y_train, y_pred_train) test_mse = mean_squared_error(y_test, y_pred_test) train_r2 = r2_score(y_train, y_pred_train) test_r2 = r2_score(y_test, y_pred_test) train_corr, _ = pearsonr(y_train, y_pred_train) test_corr, _ = pearsonr(y_test, y_pred_test) # 打印评估结果 print (f '训练集 MSE: {train_mse:.4f}' ) print (f '测试集 MSE: {test_mse:.4f}' ) print (f '训练集 R² Score: {train_r2:.4f}' ) print (f '测试集 R² Score: {test_r2:.4f}' ) print (f '训练集 相关系数: {train_corr:.4f}' ) print (f '测试集 相关系数: {test_corr:.4f}' ) # 可视化预测结果 plt.figure(figsize=(12, 5)) # 训练集预测结果 plt.subplot(1, 2, 1) plt.scatter(y_train, y_pred_train, alpha=0.6) plt.plot([y_train.min(), y_train.max()], [y_train.min(), y_train.max()], 'r--' ) plt.xlabel( 'Actual Precipitation' ) plt.ylabel( 'Predicted Precipitation' ) plt.title(f 'Training Set (R² = {train_r2:.4f})' ) # 测试集预测结果 plt.subplot(1, 2, 2) plt.scatter(y_test, y_pred_test, alpha=0.6) plt.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], 'r--' ) plt.xlabel( 'Actual Precipitation' ) plt.ylabel( 'Predicted Precipitation' ) plt.title(f 'Test Set (R² = {test_r2:.4f})' ) plt.tight_layout() plt.show() # 如果TabPFN支持特征重要性分析,可以添加相关代码 # 注意:TabPFN可能不直接支持SHAP值分析,这取决于库的实现 try: feature_importance = model.feature_importance(X_test) plt.figure(figsize=(10, 6)) plt.barh(X.columns, feature_importance) plt.xlabel( 'Feature Importance' ) plt.title( 'TabPFN Feature Importance' ) plt.tight_layout() plt.show() except: print ( "Feature importance analysis not available for TabPFN" )
结果如图:
训练集和测试集的结果 写一段代码,绘制训练集的美化散点图
import seaborn as sns import matplotlib.pyplot as plt import pandas as pd plt.figure(figsize=(10, 6)) rc = { 'font.sans-serif' : [ 'Times New Roman' ]} sns.set(context= 'notebook' , style= "darkgrid" , font_scale=2, rc=rc) sns.jointplot(x=y_train, y=y_pred_train, kind= "reg" , truncate=False, xlim=(0, 120), ylim=(0, 120), height=7)
训练集的结果 Claude 3.7仅需一步就学习到了Nature正刊的代码,并成功应用到了我们的示例数据。
我们看到模型的R2相当高,在训练集和测试集上都很平衡,这非常不错!
接下来,我们运行可解释机器学习!
这一步模型不太确定是否能得到可解释结果,我们进一步提示:
请阅读官方的可解释shap示例代码,然后写出适合我们的数据正确的形式
# 创建SHAP解释器 explainer = shap.Explainer(model.predict, X_train) # 计算SHAP值 shap_values = explainer(X_test) # 绘制SHAP摘要图 shap.summary_plot(shap_values, X_test) # 绘制SHAP条形图 - 显示特征的平均绝对SHAP值 plt.figure(figsize=(8, 6)) shap.plots.bar(shap_values, show=False) plt.title( 'Feature Importance (Bar Plot)' ) plt.tight_layout() plt.show() # 绘制SHAP瀑布图 - 展示单个预测的解释 plt.figure(figsize=(10, 6)) # 选择第一个样本进行解释 shap.plots.waterfall(shap_values[0], show=False) plt.title( 'SHAP Waterfall Plot for First Sample' ) plt.tight_layout() plt.show()
特征SHAP散点图 特征重要性绝对值 各个特征的效应 结果表明:
对降水的预测贡献:蒸散发(E)> 径流(R)> 水储量变化(LWSC)> 流域面积(Area)
其中E和R都是符号相反的贡献(这符合水量平衡原则)
可见,Claude 3.7很快就帮我们复现了Nature方法
工程创建 然后我们用刚刚写好的代码,启动Cursor的Agent模式(智能体模式)
转变Chat模式为Agent模式 提示词:
请学习整个项目路径,在当前文件夹生成README和requirement文件,以符合工程规范。其中README应该包含文件结构。
结果如图,Cursor + Claude 3.7直接帮我把事情干完了:
AI帮忙撰写的工程项目文件 我只需要点两个对号,确认就行了。
版本控制 然后,我们切换Git,直接让AI帮我控制版本
AI辅助版本控制 提示词为:
在main分支直接push所有新内容,覆盖
然后,他把每一步需要执行的代码都写好了,我们都点 接受
就行了
注意,下面所有内容都是我点了运行,然后系统的git运行我的指令,AI实时检验结果并继续写代码,可以说是真正的Agent智能体了!
AI帮我提交到Github仓库 最后,让我们检查远程GitHub仓库(https://github.com/GISWLH/GeoTabPFN):
3A大作-Github仓库 无敌了,效果特别好!
以上所有的内容,我一个字母也没写,代码碰都没碰,全都点 Accept
直接接受AI的代码和工程。。。
3A级连招(AI写代码,AI写文档,AI做项目)真是太强了
说不定哪天自己就被取代了
自己尝试 如果你也想用Claude 3.7 + Cursor...
建议一张虚拟卡来订阅服务
登录野卡平台注册账号,登录,先开一张卡片,网址如下
https://yeka.ai/i/ER4VMUC2 (从此邀请码进入可以减免十几块钱的开卡费)
野卡首页 然后选择订阅的产品(Cursor或Claude)
支持多产品 直接充值相应金额(支付宝)
就可以开一张虚拟卡 然后把卡片信息复制到你要订阅的服务中(Cursor或Claude),好处是自己的账号,自己官方充值,不担心封号或拼车。