Python: ‘for’ 循环和线性回归中的迭代

我正在使用 statsmodel 包构建一个基础的线性回归模型,以下是我想要做的:
构建一个 ‘for’ 循环,检查每个特征的概率,如果概率大于 0.05,则从训练(和测试)数据中删除该特征,再次拟合模型,并重复此过程直到所有概率都小于 0.05。
这是我目前所做的:

for x,y in zip(lrmodel.pvalues,xtrain.columns):    if x>0.05:      xtrain = xtrain.drop(y,axis=1)      xtest = xtest.drop(y,axis=1)      lrmodel = sm.OLS(ytrain,xtrain).fit()      finalmodel = lrmodel    else:      finalmodel = lrmodel

这个循环的问题在于它不会迭代 pvalues,而是一次性移除所有概率大于 0.05 的特征。
如果有人能帮我,我将不胜感激。谢谢!


回答:

我认为你需要在这个基础上添加一个 while 循环:

while max(lrmodel.pvalues)>0.05:    for x,y in zip(lrmodel.pvalues,xtrain.columns):         if x>0.05:            xtrain = xtrain.drop(y,axis=1)            xtest = xtest.drop(y,axis=1)            lrmodel = sm.OLS(ytrain,xtrain).fit()            break# 当所有值都小于 0.05 后,将模型赋值给最终模型finalmodel = lrmodel

这样做的一个潜在问题是:你必须确保所有值最终都会小于 0.05,否则你需要额外的逻辑来终止循环。例如,

while len(lrmodel.pvalues)>0 and max(lrmodel.pvalues)>0.05:

Related Posts

在使用k近邻算法时,有没有办法获取被使用的“邻居”?

我想找到一种方法来确定在我的knn算法中实际使用了哪些…

Theano在Google Colab上无法启用GPU支持

我在尝试使用Theano库训练一个模型。由于我的电脑内…

准确性评分似乎有误

这里是代码: from sklearn.metrics…

Keras Functional API: “错误检查输入时:期望input_1具有4个维度,但得到形状为(X, Y)的数组”

我在尝试使用Keras的fit_generator来训…

如何使用sklearn.datasets.make_classification在指定范围内生成合成数据?

我想为分类问题创建合成数据。我使用了sklearn.d…

如何处理预测时不在训练集中的标签

已关闭。 此问题与编程或软件开发无关。目前不接受回答。…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注