Python:'for' 线性回归中的循环和迭代
Python: 'for' loops and iteration in Linear Regression
我正在使用 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 的概率。
如果有人能帮助我,我将不胜感激。谢谢!
我想你还需要一个 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:
我正在使用 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 的概率。
如果有人能帮助我,我将不胜感激。谢谢!
我想你还需要一个 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: