Получение предупреждения об устаревании в 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]])

  • Пример использования привязок python для библиотеки SVM, LIBSVM
  • Преобразование функции решения LinearSVC к вероятностям (Scikit learn python)
  • Реализация Python OpenCV SVM
  • Какова теоретическая основа для scikit-learn dummy классификатора?
  • Как применить стандартизацию к SVM в scikit-learn?
  • Opencv: Поезд SVM с быстрыми ключевыми точками и BRIEF функциями
  • Самая быстрая реализация SVM, используемая в Python
  • Вычисление ближайшего совпадения к среднему / Stddev парам с LibSVM
  • Поезд scikit svm один за другим (онлайн или стохастическое обучение)
  • Не целочисленные метки классов Scikit-Learn
  • Python scikit-learn SVM Classifier "ValueError: найден массив с тусклым 3. Ожидаемый <= 2"
  •  
    Interesting Posts for Van-Lav

    что означает «~» в питоне?

    Проблемы с locale.getlocale () на OSX

    Таблица синхронизации модели Django

    Почему это улучшенное сито медленнее с pypy?

    Прогнозирование будущих значений с использованием регрессии OLS (Python, StatsModels, Pandas)

    Сельдерей. Уменьшить количество процессов

    найти временной сдвиг между двумя подобными сигналами

    Каковы ваши «обязательные» пакеты Python для финансов?

    В чем разница между указателями LP_ * и указателями * _p в ctypes? (и странное взаимодействие с структурами)

    Как я могу «поймать» ошибку seg при импорте модуля F2Py?

    Прекрасная задача сельдерея

    В какой ситуации нам нужно использовать `multiprocessing.Pool.imap_unordered`?

    Python Только для чтения файловая система Ошибка с S3 и Lambda при открытии файла для чтения

    Коалесцирует значения из 2 столбцов в один столбец в кадре данных pandas

    Изменение стиля вывода PDF-Latex через конвертер IPython для ноутбуков

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