python - 在 scikit-learn 中针对特定模型计算 Lasso 回归的 R^2 分数
问题描述
我在 sci-kit learn 中的预训练数据上基于四度(1、3、7、11)的多项式回归特征对 Lasso 模型进行了正则化。我为区间 [0, 20] 上的 100 个均匀分布的点生成了预测,并将结果存储在一个 numpy 数组中。我的任务是返回每个 Lasso 模型相对于新的“黄金标准”测试集的 ^2 分数,该测试集是从没有噪声的真实基础三次多项式模型生成的。下面的代码所基于的初始模型包括一个噪声常数。我必须通过为区间 [0, 20] 上的 100 个均匀间隔点中的每一个计算真正的无噪声基础函数来计算这个新的测试集t^3/20 - t^2 - t
,并最终选择具有 R^2 的度数,以提供最佳拟合给定的功能。到目前为止,这是我的代码:
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)
y_poly = linlasso.predict(poly.fit_transform(np.linspace(0,20,100).reshape(-1,1)));
preds[i,:] = y_poly.transpose()
X_test_poly = poly.fit_transform(X_test)
las_r2.append(linlasso.score(X_test_poly, y_test))
answer = las_r2.max()
我不知道如何将上一段中提供的“黄金标准”功能合并到我的 for 循环中。
解决方案
净化空气
我咀嚼了一会儿。让我简化问题,如果这是错误的,请纠正我。
给定一个黄金标准函数
t^3/20 - t^2 - t
,以及一组通常符合该黄金标准函数的嘈杂数据,我如何部署我的建模策略,以便我可以找到最符合黄金标准的建模超参数?我定义最佳拟合的指标是 R^2
在您的情况下,超参数仅由degs = (1, 3, 7, 11)
回答
所以你有这些输入到你的问题:
X
: 输入范围 (np.linspace(0,20,100)
)- 一个“黄金标准”
t^3/20 - t^2 - t
y_noisy
:接近黄金标准的噪声值degs = (1, 3, 7, 11)
要测试的多项式度数范围
对我来说,以下策略似乎很有意义:
#for calculating R^2
from sklearn.metrics import r2_score
#x range
X = np.linspace(0,20,100)
#noisy data
y_noisy = "I'm not sure how you're getting this data.\
It could either be generated by applying random variation\
to y_gold, or it could be loaded"
#real data
y_gold = [t**(3/20) - t**2 - t for t in X]
#defining helper function
def generate_predictions(X, y_noisy, deg):
"""does all your modeling stuff, outputs predicted y values
"""
...
return y_pred
#for storing R^2 rsults
results = {}
#get R^2 for each degree
for deg in [1,3,7,11]:
y_pred = generate_predictions(X, y_noisy, deg)
results[deg] = r2_score(y_gold, y_pred)
#prints the results for each degree
print(results)
一张纸条
在现实世界中,“黄金标准”很少而且相差甚远,如果您一开始就有黄金标准,就没有充分的理由使用机器学习模型。因此,在此应用程序中使用训练和测试数据没有意义,因为直接与黄金标准进行比较在理论上是完美的。然而,在现实世界中,这种策略看起来很像过度拟合。
推荐阅读
- spring-boot - 如何在服务测试类中模拟 @Autowired HttpServletRequest?
- php - 我需要更改文件中的 php 代码,而不是当前的 json 输出
- python - 熊猫数据框,如何在一行中设置多个列值?
- angular - 无法在离子中生成带有路由的角度模块
- python - 如何调试 keras 模型
- java - 在我由 Maven 驱动的简单演示应用程序的 JAR 中包含 Postgres 的 JDBC 驱动程序
- elasticsearch - elasticsearch中的序列号与版本号
- javascript - 需要正则表达式来验证电话号码必须仅包含字符 +、-、*、?和 0-9
- python-3.x - 为什么引用完整性约束在我的代码中不起作用?我该如何解决?
- variables - 无法根据条件为 Ansible 注册变量分配默认值