scikit-learn中Lasso回归针对真实三次模型计算R²分数的实现问题
解决方案
你不需要把黄金标准的计算逻辑塞到for循环里重复执行,提前一次性生成黄金标准测试集即可,修改后的完整代码如下:
import numpy as np from sklearn.preprocessing import PolynomialFeatures from sklearn.linear_model import Lasso # 第一步:提前生成无噪声黄金标准测试集 t_test = np.linspace(0,20,100).reshape(-1,1) y_test_gold = (t_test**3)/20 - t_test**2 - t_test degs = (1, 3, 7, 11) las_r2 = [] preds = np.zeros((4,100)) for i, deg in enumerate(degs): poly = PolynomialFeatures(degree=deg) # 训练逻辑保持不变,沿用原有带噪声训练集拟合 X_poly = poly.fit_transform(X_train) linlasso = Lasso(alpha=0.01, max_iter = 10000).fit(X_poly, y_train) # 存储[0,20]区间100个点的预测结果逻辑不变 y_poly = linlasso.predict(poly.fit_transform(t_test)) preds[i,:] = y_poly.ravel() # 关键修改:使用黄金标准测试集计算R²得分 X_test_poly = poly.transform(t_test) las_r2.append(linlasso.score(X_test_poly, y_test_gold)) # 可同时获取最大R²和对应的最优多项式阶数 best_r2 = max(las_r2) best_deg = degs[las_r2.index(best_r2)]
修改说明
- 提前生成黄金标准测试集
t_test和y_test_gold,避免在循环内重复计算,提升运行效率 - 替换原代码中的
X_test、y_test为黄金标准数据,保证R²得分是和无噪声真实函数对比计算,符合任务要求 - 把测试集侧的
poly.fit_transform调用改为transform,避免重复拟合多项式特征,符合scikit-learn的使用规范 - 新增最优阶数提取逻辑,除了最大R²值外可以直接得到对应的最优多项式阶数,满足最终选型需求
内容的提问来源于stack exchange,提问作者Hefe
相关产品推荐
相关产品推荐

