簡體   English   中英

使用線性回歸預測缺失值

[英]python - using linear regression to predict missing values

我有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

我僅使用值數據,不確定方向是否正確

最好的祝福

看來您的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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM