前瞻性选择策略-使用np.arrays()进行回归

时间:2018-10-11 13:57:18

标签: python arrays python-3.x numpy

我有一个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值。我正在尝试使用前向选择策略功能来选择具有低于0.05 p值的特征。

这是我到目前为止所拥有的,

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值附加到新数组中。我查找了创建新数组online的过程,但这需要启动维度。现在,我不知道会有多少。

否则,我唯一的选择是将功能保留在x中。如果必须保留该功能,该怎么办?

1 个答案:

答案 0 :(得分:0)

除了错误的表示法之外,您的代码中还有一个大错误,您尝试将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]