SVR предсказывает одинаковое значение для всех функций - PullRequest
0 голосов
/ 03 марта 2019

Я создаю базовое приложение, чтобы предсказать значение «Закрытия» запаса для дня n + 1, учитывая особенности запаса n с использованием Python и Scikit-learn

Пример строки в моем фрейме данныхвот так (2000 строк)

       Open     Close    High     Low      Volume     
0      537.40   537.10   541.55   530.47   52877.98  

Аналогично этому видео https://www.youtube.com/watch?v=SSu00IRRraY,, где он использует «Даты» и «Цена открытия».В этом примере Dates - это функции, а Open - цель.

Теперь в моем примере у меня нет значения 'Dates' в моем наборе данных, но вместо этого я хочу использовать Open, High, LowОбъемные данные как объекты, потому что я думал, что это сделает их более точными

Я определял свои функции и цели следующим образом:

features = df.loc[:,df.columns != 'Closing']
targets = df.loc[:,df.columns  == 'Closing']

Что бы вернуть df, похожий на эти функции:

       Open      High      Low      Vol from  
29     670.02    685.11    661.09   92227.36

цели:

       Close
29     674.57

Однако я понял, что данные должны быть в массиве, и теперь я получаю свои функции и цели, такие как

features = df.loc[:,df.columns != 'Closing'].values
targets = df.loc[:,df.columns  == 'Closing'].values

Так что теперь мои функции выглядят так

[6.70020000e+02 6.85110000e+02 6.61090000e+02 9.22273600e+04
  6.23944806e+07]
 [7.78102000e+03 8.10087000e+03 7.67541000e+03 6.86188500e+04
  5.41391322e+08]

, а мои цели выглядят так

[  674.57]
[ 8042.64]

Затем я разделяю свои данные, используя

X_training, X_testing, y_training, y_testing = train_test_split(features, targets, test_size=0.8)

Iпытался следовать документации Scikit-Learn, которая привела к следующему

svr_rbf = svm.SVR(kernel='rbf', C=100.0, gamma=0.0004, epsilon= 0.01 )
svr_rbf.fit(X_training, y_training)
predictions = svr_rbf.predict(X_testing)
print(predictions)

Я предполагал, что это будет предсказывать значения Y с учетом возможностей тестирования, которые я затем мог бы построить на основе фактических значений y_testing, чтобы увидеть, какпохожи они.Однако прогнозы выводят одно и то же значение для каждой функции X_testing.

[3763.84681818 3763.84681818 3763.84681818 3763.84681818 3763.84681818

Я пытался изменить значения epsilon, c и gamma, но это, похоже, не меняет того факта, что прогнозы всегда даютодно и то же значение

Я знаю, что прогнозировать цены на акции может быть неточным, но я, должно быть, сделал что-то не так, чтобы получить то же значение при применении модели к различным тестовым данным

1 Ответ

0 голосов
/ 04 марта 2019

Вам следует нормализовать свои функции перед использованием SVM для задачи классификации.SVM обычно чувствительны к ненормализованным функциям.Поскольку ваша пятая функция примерно в 10 000 раз превосходит ваши 4 другие функции, она буквально доминирует над другими функциями.

Посмотрите на эту ссылку, которая очень ясно объясняет вашу проблему: https://stats.stackexchange.com/questions/57010/is-it-essential-to-do-normalization-for-svm-and-random-forest

...