【问题标题】:Compute R^2 Score for Lasso Regression Against Specific Model in scikit-learn在 scikit-learn 中针对特定模型计算 Lasso 回归的 R^2 分数
【发布时间】:2021-11-03 18:40:04
【问题描述】:

我在 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 循环中。

【问题讨论】:

    标签: python scikit-learn regression lasso-regression


    【解决方案1】:

    净化空气

    我对此进行了一段时间的研究。让我简化问题,如果有错误请纠正我。

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

    备注

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

    【讨论】:

      猜你喜欢
      • 2015-07-03
      • 2017-08-01
      • 2018-12-01
      • 2021-02-07
      • 2014-10-09
      • 2013-09-30
      • 2017-01-04
      • 2020-08-08
      • 2020-01-29
      相关资源
      最近更新 更多