У меня ужасное время, устраняя проблему предупреждения, описанную в this question, к сожалению, следуя предложенным исправлениям, я не решаю проблему.Получение предупреждения об устаревании в Sklearn над массивом 1d
Видимо, я подаю 1D-массив в SVM.SVC, и я получаю предупреждения об устаревании. Я просто не могу понять, что я делаю неправильно, и я надеюсь, что кто-то может помочь мне исправить мой код. Я уверен, что это небольшая коррекция, которую мне не хватает.
Я использую Python 2.7
Я начинаю с dataframe data_df (размеры уменьшенной здесь для ясности, но кода и структуры являются точными):
Price/Sales Price/Book Profit Margin Operating Margin
0 2.80 6.01 29.56 11.97
1 2.43 4.98 25.56 6.20
2 1.61 3.24 4.86 5.38
3 1.52 3.04 4.86 5.38
4 3.31 4.26 6.38 3.58
изменить dataframe к Numpy массива:
X = data_df.values
, который дает мне:
[[ 2.8, 6.01, 29.56, 11.97],
[ 2.43, 4.98, 25.56, 6.2 ],
[ 1.61, 3.24, 4.86, 5.38],
[ 1.52, 3.04, 4.86, 5.38],
[ 3.31, 4.26, 6.38, 3.58]]
Тогда я центрирования и нормализовать мои данные:
X = preprocessing.scale(X)
которые дают мне:
[[ 0.67746872 1.5428404 1.39746257 1.90843628]
[ 0.13956437 0.61025495 1.03249454 -0.10540376]
[-1.05254797 -0.96518067 -0.85621499 -0.3915994 ]
[-1.18338957 -1.14626523 -0.85621499 -0.3915994 ]
[ 1.41890444 -0.04164945 -0.71752714 -1.01983373]]
Моя у представляет собой серию из 0 и 1.:
[0, 0, 1, 0, 1]
Фактический набор данных составляет около 10 000 наблюдений. Я использую следующий код для выбора подмножества для обучения, тестирования и проверки точности:
test_size = 500
clf = svm.SVC(kernel = "linear", C=1.0)
clf.fit(X[:-test_size],y[:-test_size])
correct_count = 0
for x in range(1, test_size+1):
if clf.predict(X[-x])[0] == y[-x]:
correct_count += 1
print("Accuracy: ", correct_count/test_size * 100.00)
Тест набор факторов корма в clf.predict
(X [-x] при х = 1 до test_size +1) Приводит следующее предупреждение:
C:\Users\me\AppData\Local\Continuum\Anaconda2\lib\site-packages\sklearn\ut
ils\validation.py:386: DeprecationWarning: Passing 1d arrays as data is deprecat
ed in 0.17 and willraise ValueError in 0.19. Reshape your data either using X.re
shape(-1, 1) if your data has a single feature or X.reshape(1, -1) if it contain
s a single sample.
DeprecationWarning)
код работает, и я получаю прогнозы и я в состоянии вычислить точность, но я до сих пор бросает предупреждение.
Насколько я могу судить по поиску и указанному выше вопросу, мои данные находятся в надлежащей форме. Что мне не хватает?
Заранее за вашу помощь.
Спасибо за этот ответ. Я думал, что попробовал это, но у меня появилось другое перекрывающееся предупреждение, которое заставило меня думать, что это не работает. Однако вы могли бы более подробно объяснить, что делает .resape (-1,1)? Массив все еще представляет собой 1D массив списков.Кроме того, вы могли бы прояснить свое заявление «неясно, было ли ваше намерение единым значением с несколькими функциями или несколькими значениями с помощью одной функции». Благодарю. – Windstorm1981
'-1' в' .reshape (1, -1) 'создает новое измерение в массиве, превращая 1D-массив в 2D-массив. Результат имеет 1 строку и столько же значений, сколько требуется новому измерению для хранения исходных 1D-данных. Обратите внимание на дополнительные круглые скобки при печати, обозначая размерность. 'clf.predict' может использовать несколько независимых переменных для прогнозирования одного результата, и он может прогнозировать сразу несколько результатов, каждый из которых имеет свой собственный срез двумерного входного массива. Если ему задан массив 1D, не сразу понятно, хотите ли вы использовать многие независимые переменные или предсказывать множество результатов. – Brian