我正在尝试使用scikit学习线性回归量对pandas数据帧进行简单的线性回归.我的数据是时间序列,pandas数据框有一个日期时间索引:
value
2007-01-01 0.771305
2007-02-01 0.256628
2008-01-01 0.670920
2008-02-01 0.098047
Run Code Online (Sandbox Code Playgroud)
做一些简单的事情
from sklearn import linear_model
lr = linear_model.LinearRegression()
lr(data.index, data['value'])
Run Code Online (Sandbox Code Playgroud)
不起作用:
float() argument must be a string or a number
Run Code Online (Sandbox Code Playgroud)
所以我尝试创建一个包含日期的新列,以尝试对其进行转换:
data['date'] = data.index
data['date'] = pd.to_datetime(data['date'])
lr(data['date'], data['value'])
Run Code Online (Sandbox Code Playgroud)
但现在我得到:
ValueError: Input contains NaN, infinity or a value too large for dtype('float64').
Run Code Online (Sandbox Code Playgroud)
因此回归量无法处理日期时间.我看到了一些将整数数据转换为datetime的方法,但是找不到从datetime转换为integer的方法,例如.
这样做的正确方法是什么?
PS:我对使用scikit感兴趣,因为我打算稍后用它做更多的东西,所以现在没有statsmodels.
Tom*_*ger 15
你可能想要从开始以来的天数这样的东西作为你的预测器.假设一切都已排序:
In [36]: X = (df.index - df.index[0]).days.reshape(-1, 1)
In [37]: y = df['value'].values
In [38]: linear_model.LinearRegression().fit(X, y)
Out[38]: LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)
Run Code Online (Sandbox Code Playgroud)
您用于预测器的确切单位并不重要,可能是几天或几个月.系数和解释将发生变化,以便一切都能达到相同的效果.另外,请注意我们需要a reshape(-1, 1)以使其X符合预期的格式.
| 归档时间: |
|
| 查看次数: |
8602 次 |
| 最近记录: |