首页 > 解决方案 > 在 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 循环中。

标签: pythonscikit-learnregressionlasso-regression

解决方案


净化空气

我咀嚼了一会儿。让我简化问题,如果这是错误的,请纠正我。

给定一个黄金标准函数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)
  

一张纸条

在现实世界中,“黄金标准”很少而且相差甚远,如果您一开始就有黄金标准,就没有充分的理由使用机器学习模型。因此,在此应用程序中使用训练和测试数据没有意义,因为直接与黄金标准进行比较在理论上是完美的。然而,在现实世界中,这种策略看起来很像过度拟合。


推荐阅读