Python:线性回归中的“ for”循环和迭代

时间:2018-12-06 03:44:09

标签: python for-loop machine-learning linear-regression statsmodels

我正在使用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

此循环的问题在于它不会遍历p值,而是一次删除了所有大于0.05的概率。
如果有人能帮助我,我将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:2)

我认为您还需要一个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
# after all the values are less than 0.05, assign the model to final model
finalmodel = lrmodel

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

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