我有2012-2014年的数据,2014年少了几个月。我想使用基于2012/2013年数据训练的线性回归模型来预测这几个月。
2014缺少6-8月,并有'‘作为它的值,所以我使用以下代码来清理它,我还通过剪切20个数据将2012、2013更改为具有相同的形状:
data2014NaN=data2014['mob'].replace(' ', np.nan)
data2014CleanNaN = data2014NaN[data2014NaN.notnull()]
data2012[0:300]
data2013[0:300]然后,我使用这两年作为训练集来训练线性回归模型。
X = pd.concat([data2012[0:300], data2013[0:300]], axis=1, join='inner')
y = data2014CleanNaN .values
y = y.reshape(-1,1)
from sklearn.model_selection import train_test_split
# Split into 75% train and 25% test
X_train, X_test, y_train, y_test = train_test_split(X, y,
train_size=0.75,
random_state=4)
lm = LinearRegression()
lm.fit(X_train,y_train)
score = lm.score(X_test,y_test)
print("The prediction score on the test data is {:.2f}%".format(score*100))然而,我得到的结果是糟糕的4.65%,我不太确定如何处理这个问题,我想我在削减2012和2013年的数据时做错了什么
这里我附加了数据(这只是虚拟数据):
2014:
date value
29/01/2014 10
30/01/2014 20
31/01/2014 15
1/02/2014 ' '
2012:
date value
29/01/2014 15
30/01/2014 18
31/01/2014 19
1/02/2014 50我只使用值数据,不确定我的方向是否正确
诚挚的问候
发布于 2018-08-27 15:23:40
您的R^2似乎不太好。
在这种情况下,三次样条线插值的性能可能比线性回归更好。
在python中,可以调用此api:
import scipy.interpolate as st此外,如果x是时间戳,y是一个值,您可以尝试像AR或ARMA这样的时间序列分析,以及像RNN和LSTM这样的神经网络方法。
由keras构建的LSTM示例:
model = Sequential()
model.add(LSTM(activation='tanh',input_shape = dataX[0].shape, output_dim=5, return_sequences = False))
model.add(Dense(output_dim = 1))
model.compile(optimizer='adam', loss='mae',metrics=['mse'])
model.fit(dataX , dataY, epochs = times , batch_size=1, verbose = 2,shuffle=False)
y_pred = model.predict(dataX)https://stackoverflow.com/questions/52034043
复制相似问题