2016-12-24 4 views
0

У меня есть набор данных ежедневной температуры, индексированный по дате, и мне нужно предсказать будущую температуру, используя [SVR] [1] в scikit-learn.Прогнозирование временных рядов с svr в scikit learn

Я застрял с выбором X и Y тренинга и X тестирования набора. Например, если я хочу, чтобы предсказать Y во время t то мне нужно обучающего набора, чтобы содержать X & Y в t-1, t-2, ..., t-N где N является количеством предыдущих дней, используемых для прогнозирования Y на t.

Как я могу это сделать?

это он.

df=daily_temp1 
# define function for create N lags 
def create_lags(df, N): 
    for i in range(N): 
     df['datetime' + str(i+1)] = df.datetime.shift(i+1) 
     df['dewpoint' + str(i+1)] = df.dewpoint.shift(i+1) 
     df['humidity' + str(i+1)] = df.humidity.shift(i+1) 
     df['pressure' + str(i+1)] = df.pressure.shift(i+1) 
     df['temperature' + str(i+1)] = df.temperature.shift(i+1) 
    df['vism' + str(i+1)] = df.vism.shift(i+1) 
    df['wind_direcd' + str(i+1)] = df.wind_direcd.shift(i+1) 
    df['wind_speed' + str(i+1)] = df.wind_speed.shift(i+1) 
    df['wind_direct' + str(i+1)] = df.wind_direct.shift(i+1) 

    return df 

# create 10 lags 
df = create_lags(df,10) 


# the first 10 days will have missing values. can't use them. 
df = df.dropna() 

# create X and y 
y = df['temperature'] 
X = df.iloc[:, 9:] 

# Train on 70% of the data 
train_idx = int(len(df) * .7) 

# create train and test data 
X_train, y_train, X_test, y_test = X[:train_idx], y[:train_idx], X[train_idx:], y[train_idx:] 


# fit and predict 
clf = SVR() 
clf.fit(X_train, y_train) 

clf.predict(X_test) 

ответ

1

Вот решение, которое строит матрицу функций X как просто lag1 - lagN где lag1 является предыдущие дни температура и lagN является температура N дней назад.

# create fake temperature 
df = pd.DataFrame({'temp':np.random.rand(500)}) 

# define function for create N lags 
def create_lags(df, N): 
    for i in range(N): 
     df['Lag' + str(i+1)] = df.temp.shift(i+1) 
    return df 

# create 10 lags 
df = create_lags(df,10) 

# the first 10 days will have missing values. can't use them. 
df = df.dropna() 

# create X and y 
y = df.temp.values 
X = df.iloc[:, 1:].values 

# Train on 70% of the data 
train_idx = int(len(df) * .7) 

# create train and test data 
X_train, y_train, X_test, y_test = X[:train_idx], y[:train_idx], X[train_idx:], y[:train_idx] 

# fit and predict 
clf = SVR() 
clf.fit(X_train, y_train) 

clf.predict(X_test) 
+0

Спасибо! Я попытался подогнать его к своей цели, потому что мне также нужны другие функции рядом с предыдущей температурой, но у меня все еще есть ошибка. TypeError: float() аргумент должен быть строкой или числом –

+0

scikit learn не может обрабатывать строки. Вы должны преобразовать все строки в числовые. Если у вас есть фрейм данных pandas, используйте 'pd.get_dummies'. Если вы работаете строго с sklearn, используйте «LabelBinarizer» в модуле предварительной обработки. –

+0

я уже изменил струнные те, Теперь у меня есть поплавок и DateTime типы данных –

Смежные вопросы