Получение предупреждения об устаревании в Sklearn над массивом 1d, несмотря на отсутствие массива 1D

Я пытаюсь использовать SKLearn для запуска SVM-модели. Я просто пытаюсь это сделать сейчас с некоторыми примерами данных. Вот данные и код:

import numpy as np from sklearn import svm import random as random A = np.array([[random.randint(0, 20) for i in range(2)] for i in range(10)]) lab = [0, 1, 0, 1, 0, 1, 0, 1, 0, 1] clf = svm.SVC(kernel='linear', C=1.0) clf.fit(A, lab) 

FYI, когда я бегу

 import sklearn sklearn.__version__ 

Он выводит 0,17.

Теперь, когда я запускаю print(clf.predict([1, 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 sa single sample. DeprecationWarning) 

Это дает мне предсказание, и это здорово. Тем не менее, я нахожу это странным по нескольким причинам.

У меня нет 1d массива. Если вы напечатаете A, вы получите

 array([[ 9, 12], [ 2, 16], [14, 14], [ 4, 2], [ 8, 4], [12, 3], [ 0, 0], [ 3, 13], [15, 17], [15, 16]]) 

Который кажется мне двумерным. Но хорошо, давайте просто скажем, что то, что у меня есть, на самом деле является 1D-массивом. Попробуем изменить его с помощью reshape , как это было предложено ошибкой.

Тот же код, что и выше, но теперь у нас есть

 A = np.array([[random.randint(0, 20) for i in range(2)] for i in range(10)]).reshape(-1,1) 

Но тогда это выводит массив длиной 20, что не имеет смысла и не то, что я хочу. Я также попробовал его с reshape(1, -1) но тогда это дает мне один список наблюдения / списка с 20 элементами в нем.

Как я могу изменить свои данные в массивах numpy, чтобы я не получил это предупреждение?


Я посмотрел на два ответа на SO, и ни один из них не работал для меня. Вопрос 1 и Вопрос 2 . Кажется, что Q1 был фактически 1D данными и был решен с использованием reshape , с которым я пытался и не смог. Q2 имеет ответ о том, как отслеживать предупреждения и ошибки, чего я не хочу. Другой ответ снова является экземпляром массива 1D.

3 Solutions collect form web for “Получение предупреждения об устаревании в Sklearn над массивом 1d, несмотря на отсутствие массива 1D”

Ошибка исходит из метода прогнозирования. Numpy будет интерпретировать [1,1] как 1d-массив. Поэтому это должно избегать предупреждения:

clf.predict(np.array([[1,1]]))

Заметить, что:

 In [14]: p1 = np.array([1,1]) In [15]: p1.shape Out[15]: (2,) In [16]: p2 = np.array([[1,1]]) In [17]: p2.shape Out[17]: (1, 2) 

Также обратите внимание, что вы не можете использовать массив фигур (2,1)

 In [21]: p3 = np.array([[1],[1]]) In [22]: p3.shape Out[22]: (2, 1) In [23]: clf.predict(p3) --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-23-e4070c037d78> in <module>() ----> 1 clf.predict(p3) /home/juan/anaconda3/lib/python3.5/site-packages/sklearn/svm/base.py in predict(self, X) 566 Class labels for samples in X. 567 """ --> 568 y = super(BaseSVC, self).predict(X) 569 return self.classes_.take(np.asarray(y, dtype=np.intp)) 570 /home/juan/anaconda3/lib/python3.5/site-packages/sklearn/svm/base.py in predict(self, X) 303 y_pred : array, shape (n_samples,) 304 """ --> 305 X = self._validate_for_predict(X) 306 predict = self._sparse_predict if self._sparse else self._dense_predict 307 return predict(X) /home/juan/anaconda3/lib/python3.5/site-packages/sklearn/svm/base.py in _validate_for_predict(self, X) 472 raise ValueError("X.shape[1] = %d should be equal to %d, " 473 "the number of features at training time" % --> 474 (n_features, self.shape_fit_[1])) 475 return X 476 ValueError: X.shape[1] = 1 should be equal to 2, the number of features at training time 

Вместо запуска

 print(clf.predict([1, 1])) 

Бег

 print(clf.predict([[1,1]]) 

образец для прогнозирования интуитивно может быть:

[1,9]

Но вы можете изменить вектор в качестве предыдущего ответа. Или просто выполните следующие действия:

[[1,9]]

ПРИМЕР

импортировать numpy как np из sklearn import svm import случайный как случайный

A = np.array ([[random.randint (0, 20) для i в диапазоне (2)] для i в диапазоне (10)]) lab = [0, 1, 0, 1, 0, 1, 0, 1, 0, 1]

clf = svm.SVC (kernel = 'linear', C = 1.0) clf.fit (A, lab)

print clf.predict ([[1,9]])

  • Импортировать SVM-модель в PMML в Java или Python?
  • Python scikit-learn SVM Classifier "ValueError: найден массив с тусклым 3. Ожидаемый <= 2"
  • Как использовать пользовательское ядро ​​SVM?
  • Как я могу отформатировать свой список, чтобы передать его в качестве входа в svm.train () в opencv3.0
  • Не целочисленные метки классов Scikit-Learn
  • Индекс за пределами: установка SSVM с использованием Pystruct
  • как настроить параметры пользовательской функции ядра с помощью конвейера в scikit-learn
  • Предпочитаете один класс в libsvm (python)
  •  
    Interesting Posts for Van-Lav

    Почему можно заменить set () на {}?

    передача аргументов динамической форме в django

    Использование crontab с django

    Как преобразовать XML-файл в красивую базу данных pandas?

    Python: чтение базы данных и распределение степени графа

    Проблема с использованием django mptt

    прочитайте очень большой однострочный txt-файл и разделите его

    Как получить «USDJPY» (курсы валют) с помощью pandas и yahoo finance?

    Как сохранить и восстановить несколько переменных в python?

    Обнаружение кодирования в Python, используйте библиотеку шрифтов или нет?

    Сроки процессорного времени программы python?

    Как запустить функцию в каждой строке в DataFrame и добавить результат в новый DataFrame

    HTML-код для отображения разбитого data_frame на одной странице html с использованием python

    Почему некоторые методы используют точечную нотацию, а другие нет?

    в чем разница между BaseHTTPServer и SimpleHTTPServer? когда и где его использовать?

    Python - лучший язык программирования в мире.