Стратегия выбора Foraward - регрессия с помощью np.arrays () - PullRequest
0 голосов
/ 11 октября 2018

У меня есть массив np, подобный этому,

[[ 1.     ,  2.33,  0.125     , 4.36   ,  0.     ,  0.215  ],
 [ 1.     ,  0.168 , 36.     ,  2.99   ,  0.198  ,  0.6683 ],
 [ 1.     ,  0.55778,  0.     , 21.89   ,  0.    ,  0.895  ],
 [ 1.     ,  1.62864,  0.     , 21.89   ,  0.    ,  0.624  ],
 [ 1.     ,  0.1146 , 20.     ,  6.96   ,  0.    ,  0.464  ],
 [ 1.     ,  0.55778,  0.     , 21.89   ,  0.    ,  0.624  ]]

, каждый столбец в этом массиве является столбцом.первый столбец - значение intercept.Я пытаюсь использовать стратегию прямого выбора, чтобы выбрать функции с p-значением ниже 0,05.

Это то, что у меня пока есть,

import statsmodels.api as sm

def forward(y, x):

    features = len(x[1])

    for i in range(0,features):
        model = sm.OLS(y,x[:,[i]]).fit()
        pval = model.pvalues

        if pval < 0.05:
           x = np.append(x,x[:,[i]],1) # Here, I want to append it to a new np.array
        else:
            #go back and check next feature 
    return x

У меня проблемы с добавлением самого низкого p-значения в новый массив.Я посмотрел, создавая новые массивы онлайн , но для этого требуются измерения.Пока я не знаю, сколько это будет.

В противном случае мой единственный вариант - сохранить функцию в x.Если я должен сохранить функцию, как я могу это сделать?

1 Ответ

0 голосов
/ 12 октября 2018

Помимо плохих обозначений, в вашем коде есть большая ошибка, вы пытаетесь добавить x к входному значению, чтобы у вас были повторяющиеся столбцы.Я не запускал этот код, но он должен работать нормально.

def forward(y, x):

    features = len(x[1])

    x_new=np.empty_like(x)
    j=0
    for i in range(features):
        model = sm.OLS(y,x[:,i]).fit()
        pval = model.pvalues

        if pval < 0.05:
           x_new[:,j] = x[:,i]
           j+=1
    return x_new[:,:j+1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...