python - использование линейной регрессии для прогнозирования пропущенных значений - PullRequest
0 голосов
/ 27 августа 2018

У меня есть данные за 2012-2014 гг., Некоторые из которых были пропущены в 2014 г., и я хотел бы предсказать эти месяцы, используя модель линейной регрессии, обученную на данных за 2012/2013 гг.

2014 отсутствует в июне-августе и имеет значение '' в качестве значения, поэтому я очищаю его, используя следующий код, я также изменяю 2012,2013, чтобы иметь ту же форму, обрезая 20 данных:

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

Я толькоиспользуя значения данных, не уверен, что я в правильном направлении

С наилучшими пожеланиями

1 Ответ

0 голосов
/ 27 августа 2018

Кажется, что ваш R ^ 2 не так хорош.

В этом случае кубическая сплайн-интерполяция может работать лучше, чем линейная регрессия.
в python этот API можно назвать:

 import scipy.interpolate as st

source

также, если x - это отметка времени, а y - это значение, вы можете попробовать анализ временных рядов, например, AR или ARMA, и методы нейронной сети, такие как RNN и LSTM.

Образцы LSTM, построенные keras:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...