Python/Scikit-learn/regressions - 从 pandas 数据帧到 Scikit 预测
Python/Scikit-learn/regressions - from pandas Dataframes to Scikit prediction
我有以下 pandas DataFrame,称为 main_frame
:
target_var input1 input2 input3 input4 input5 input6
Date
2013-09-01 13.0 NaN NaN NaN NaN NaN NaN
2013-10-01 13.0 NaN NaN NaN NaN NaN NaN
2013-11-01 12.2 NaN NaN NaN NaN NaN NaN
2013-12-01 10.9 NaN NaN NaN NaN NaN NaN
2014-01-01 11.7 0 13 42 0 0 16
2014-02-01 12.0 13 8 58 0 0 14
2014-03-01 12.8 13 15 100 0 0 24
2014-04-01 13.1 0 11 50 34 0 18
2014-05-01 12.2 12 14 56 30 71 18
2014-06-01 11.7 13 16 43 44 0 22
2014-07-01 11.2 0 19 45 35 0 18
2014-08-01 11.4 12 16 37 31 0 24
2014-09-01 10.9 14 14 47 30 56 20
2014-10-01 10.5 15 17 54 24 56 22
2014-11-01 10.7 12 18 60 41 63 21
2014-12-01 9.6 12 14 42 29 53 16
2015-01-01 10.2 10 16 37 31 0 20
2015-02-01 10.7 11 20 39 28 0 19
2015-03-01 10.9 10 17 75 27 87 22
2015-04-01 10.8 14 17 73 30 43 25
2015-05-01 10.2 10 17 55 31 52 24
我一直无法探索 Scikit-learn 上的数据集,我不确定问题是否出在 pandas 数据集、日期作为索引、NaN's/Infs/Zeros (我不知道如何解决),一切,我无法追踪的其他事情。
我想构建一个简单的回归来根据名为 "Input" (1,2,3..) 的变量预测下一个 target_var 项目。
请注意,时间序列中有很多零和 NaN,最终我们也可能会发现 Inf。
您应该首先尝试删除具有 Inf
、-Inf
或 NaN 值的任何行(其他方法包括使用特征的平均值等填充 NaN)。
df = df.replace(to_replace=[np.Inf, -np.Inf], value=np.NaN)
df = df.dropna()
现在,创建一个包含您的特征的 numpy 矩阵和一个包含您的目标的向量。鉴于您的目标变量位于第一列,您可以使用基于整数的索引,如下所示:
X = df.iloc[:, 1:].values
y = df.iloc[:, 0].values
然后创建并拟合您的模型:
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(X=X, y=y)
现在您可以观察您的估计:
>>> model.intercept_
12.109583092421092
>>> model.coef_
array([-0.05269033, -0.17723251, 0.03627883, 0.02219596, -0.01377465,
0.0111017 ])
我有以下 pandas DataFrame,称为 main_frame
:
target_var input1 input2 input3 input4 input5 input6
Date
2013-09-01 13.0 NaN NaN NaN NaN NaN NaN
2013-10-01 13.0 NaN NaN NaN NaN NaN NaN
2013-11-01 12.2 NaN NaN NaN NaN NaN NaN
2013-12-01 10.9 NaN NaN NaN NaN NaN NaN
2014-01-01 11.7 0 13 42 0 0 16
2014-02-01 12.0 13 8 58 0 0 14
2014-03-01 12.8 13 15 100 0 0 24
2014-04-01 13.1 0 11 50 34 0 18
2014-05-01 12.2 12 14 56 30 71 18
2014-06-01 11.7 13 16 43 44 0 22
2014-07-01 11.2 0 19 45 35 0 18
2014-08-01 11.4 12 16 37 31 0 24
2014-09-01 10.9 14 14 47 30 56 20
2014-10-01 10.5 15 17 54 24 56 22
2014-11-01 10.7 12 18 60 41 63 21
2014-12-01 9.6 12 14 42 29 53 16
2015-01-01 10.2 10 16 37 31 0 20
2015-02-01 10.7 11 20 39 28 0 19
2015-03-01 10.9 10 17 75 27 87 22
2015-04-01 10.8 14 17 73 30 43 25
2015-05-01 10.2 10 17 55 31 52 24
我一直无法探索 Scikit-learn 上的数据集,我不确定问题是否出在 pandas 数据集、日期作为索引、NaN's/Infs/Zeros (我不知道如何解决),一切,我无法追踪的其他事情。
我想构建一个简单的回归来根据名为 "Input" (1,2,3..) 的变量预测下一个 target_var 项目。
请注意,时间序列中有很多零和 NaN,最终我们也可能会发现 Inf。
您应该首先尝试删除具有 Inf
、-Inf
或 NaN 值的任何行(其他方法包括使用特征的平均值等填充 NaN)。
df = df.replace(to_replace=[np.Inf, -np.Inf], value=np.NaN)
df = df.dropna()
现在,创建一个包含您的特征的 numpy 矩阵和一个包含您的目标的向量。鉴于您的目标变量位于第一列,您可以使用基于整数的索引,如下所示:
X = df.iloc[:, 1:].values
y = df.iloc[:, 0].values
然后创建并拟合您的模型:
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(X=X, y=y)
现在您可以观察您的估计:
>>> model.intercept_
12.109583092421092
>>> model.coef_
array([-0.05269033, -0.17723251, 0.03627883, 0.02219596, -0.01377465,
0.0111017 ])