Python: циклы for и итерации в линейной регрессии - PullRequest
0 голосов
/ 06 декабря 2018

Я строю базовую модель линейной регрессии, используя пакет statsmodel, и вот что я пытаюсь сделать:
Создайте цикл 'for', который проверяет вероятности каждой из функций, проверяет,Если значение больше 0,05, если да, отбросьте функцию из данных обучения (и тестирования), снова подберите модель и повторяйте, пока все вероятности не станут <0,05. <br>Вот что я сделал до сих пор:

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

Проблема с этим циклом состоит в том, что он не выполняет итерации по значениям, скорее он удаляет все вероятности> 0,05 в одном кадре.
Если кто-нибудь может мне помочь, я был бы признателен.Спасибо!

1 Ответ

0 голосов
/ 06 декабря 2018

Я думаю, что вам нужен цикл 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:

...