如何在 sklearn 中使用 K 折交叉验证进行负二项式回归?
How can I use K-fold cross validation for negative binomial regression in sklearn?
我将在数据集上应用负二项式回归模型,并使用交叉验证 (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)
你定义了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)
我将在数据集上应用负二项式回归模型,并使用交叉验证 (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)
你定义了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)