对 OLS 回归模型的数据帧进行交叉验证



我有一个这样的数据帧(它更大,功能更多):

Date  Influenza[it]  Febbre[it]  Cefalea[it]  Paracetamolo[it]  
0    2008-01            989        2395         1291              2933   
1    2008-02            962        2553         1360              2547   
2    2008-03           1029        2309         1401              2735   
3    2008-04           1031        2399         1137              2296   
...              ...
tot_incidence  
0           4.56  
1           5.98  
2           6.54  
3           6.95  
....

首先,我在数据帧上进行了ols回归,没有在训练/测试集中进行拆分,这是有效的"输入配置"(tot_incidence是预测,Influenza[it]Febbre[it]Cefalea[it]是功能):

fin1=fin1.rename(columns = {'tot_incidence':'A','Influenza[it]':'B', 'Febbre[it]':'C','Cefalea[it]':'D'})
result = sm.ols(formula="A ~ B + C + D", data=fin1).fit()

还行。现在我想做一个训练和测试集。

尝试经典的拆分和 k 折叠

1° 经典分体式

可能这更容易,我可以这样做:

X_train, X_test, y_train, y_test = cross_validation.train_test_split(x, y, test_size=0.3, random_state=1)

然后在 OLS 模型中插入变量:

x_train = sm.add_constant(X_train)
model = sm.OLS(y_train, x_train)
results = model.fit()
predictions = results.predict(X_test)

在这种情况下,如何从数据帧进行x,y以将它们插入cross_validation.train_test_split函数中?

2° K 折叠(如果太用力,请不要浪费时间)

例如,我可以这样做:

from sklearn import cross_validation
array = dataframe.values
X = array[:,1:3]
Y = array[:,5]
num_folds = 10
num_instances = len(X)
seed = 7
kfold = cross_validation.KFold(n=num_instances, n_folds=num_folds, random_state=seed)

在这一点上,我卡住了,如何在 ols 中插入这个变量以进行预测?有没有更好的方法来制作训练/测试集?

在这种情况下,我如何从数据帧制作 x,y 以将它们插入 cross_validation.train_test_split 函数中?

您需要将数据帧列转换为算法可以理解的输入(x,y),即将数据帧的列转换为数字或类别,具体取决于您尝试执行的算法类型。

1) 在数据框中选择作为响应/预测变量的变量,即 Y 变量。说Influenza
y = df.Influenze.values # convert to a numpy array

2)选择X变量,比如Febbre, Cefalea, Paracetamolo
X = np.column_stack([df.Febbre.values, df.Cefalea.values, df.Paracetamolo.values])

现在,您可以调用cross_validation.train_test_split函数。

请注意,如果您的变量是类别,则必须使用某种分类,例如 one-hot。

相关内容

  • 没有找到相关文章

最新更新