【问题标题】:How can I use K-fold cross validation for negative binomial regression in sklearn?如何在 sklearn 中使用 K 折交叉验证进行负二项式回归?
【发布时间】:2020-11-22 06:17:00
【问题描述】:

我将在数据集上应用负二项式回归模型,并使用交叉验证 (K-Fold) 检查模型分数以及特征的权重和显着性。这是应用 MinMax 缩放器后的数据框。 w4 是一个分类变量。

data.head()


     w1      w2      w3      w4     Y
0   0.17    0.44    0.00    2004    1   
1   0.17    0.83    0.22    2004    0   
2   0.00    1.00    0.34    2005    0
3   1.00    0.00    1.00    2005    1
4   1.00    0.22    0.12    2006    3

我使用以下代码来获取训练模型在测试数据集上的分数,但在处理模型的训练和测试数据集时似乎存在问题。如果有人可以提供帮助,我将不胜感激。

scores = []
kfold = KFold(n_splits=10, shuffle=True, random_state=1)
for train, test in kfold.split(data):
    model = smf.glm(formula = "Y ~ w1 + w2 + w3 + C(w4)", data=X.iloc[train,:], family=sm.families.NegativeBinomial()).fit()
    scores = scores.append(model.get_prediction(X.iloc[test,:])
    
print(scores)

【问题讨论】:

    标签: python sklearn-pandas non-linear-regression k-fold


    【解决方案1】:

    您是否定义了 X 和 Y?似乎您正在将 data DataFrame 传递给 kfold.split 方法,但您稍后将 X 和 Y 引用为数据对象。尝试先设置X = data[['w1', 'w2', 'w3', 'w4']],然后像在示例中那样引用它们。

    另外,我注意到您在 scores = model.get_prediction(X.iloc[test,:]) 中覆盖了您原来的 scores 列表 例如:

    X = data[['w1', 'w2', 'w3', 'w4']].values
    Y = data['Y'].values
    preds, scores = [], []
    kfold = KFold(n_splits=10, shuffle=True, random_state=1)
    for train_idx, test_idx in kfold.split(data):
        X_train, X_test = X[train_idx], X[test_idx]
        y_test = Y[test_idx]
        model = smf.glm(formula = "Y ~ w1 + w2 + w3 + C(w4)", 
                        data=X_train, 
                        family=sm.families.NegativeBinomial()).fit()
        preds.append(model.get_prediction(X_test))
        scores.append(model.score(X_test, y_test))
    print(scores)
    

    【讨论】:

      猜你喜欢
      • 2017-02-06
      • 2020-02-06
      • 2017-05-04
      • 1970-01-01
      • 1970-01-01
      • 2021-01-25
      • 2020-07-08
      • 1970-01-01
      • 2020-12-01
      相关资源
      最近更新 更多