«ValueError: Ожидаемый 2D-массив, вместо него получен 1D-массив» при прогнозировании с использованием SVC в python - PullRequest
0 голосов
/ 16 сентября 2018

Используя sklearn SVC (), я получаю ошибку ниже

import sklearn

from sklearn.datasets import load_iris

iris = load_iris()

X, y = iris.data, iris.target

from sklearn.svm import SVC

# create the model
mySVC = SVC()

# fit the model to data
mySVC.fit(X,y)

# test the model on (new) data
result = mySVC.predict([3, 5, 4, 2])
print(result)
print(iris.target_names[result])

ValueError                                Traceback (most recent call last)
<ipython-input-47-8994407a09e3> in <module>()
      1 # test the model on (new) data
----> 2 result = mySVC.predict([3, 5, 4, 2])
      3 print(result)
      4 print(iris.target_names[result])

/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/sklearn/svm/base.py in predict(self, X)
    546             Class labels for samples in X.
    547         """
--> 548         y = super(BaseSVC, self).predict(X)
    549         return self.classes_.take(np.asarray(y, dtype=np.intp))
    550 

/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/sklearn/svm/base.py in predict(self, X)
    306         y_pred : array, shape (n_samples,)
    307         """
--> 308         X = self._validate_for_predict(X)
    309         predict = self._sparse_predict if self._sparse else self._dense_predict
    310         return predict(X)

/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/sklearn/svm/base.py in _validate_for_predict(self, X)
    437         check_is_fitted(self, 'support_')
    438 
--> 439         X = check_array(X, accept_sparse='csr', dtype=np.float64, order="C")
    440         if self._sparse and not sp.isspmatrix(X):
    441             X = sp.csr_matrix(X)

/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/sklearn/utils/validation.py in check_array(array, accept_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, warn_on_dtype, estimator)
    439                     "Reshape your data either using array.reshape(-1, 1) if "
    440                     "your data has a single feature or array.reshape(1, -1) "
--> 441                     "if it contains a single sample.".format(array))
    442             array = np.atleast_2d(array)
    443             # To ensure that array flags are maintained

ValueError: Expected 2D array, got 1D array instead:
array=[3. 5. 4. 2.].
Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.

1 Ответ

0 голосов
/ 16 сентября 2018

Как уже упоминалось, вы должны передать 2-D массив. Вы можете попробовать использовать следующее:

result = mySVC.predict([[3, 5, 4, 2]])

Вам необходимо передать сэмплы, здесь каждый сэмпл является массивом, так что вы передаете только один сэмпл (, так как у одного сэмпла есть 4 функции ), а не сэмплы. Обратите внимание, что вы получите массив / список прогнозов, а также для каждой выборки, переданной для прогнозирования в порядке.

Из документации :

предсказать (X)

Выполнить классификацию образцов в X.

Для модели с одним классом возвращается +1 или -1.

Параметры :

X: {массивоподобная, разреженная матрица}, форма (n_samples, n_features) Для ядра = «предварительно вычислено» ожидаемая форма X равна [n_samples_test, n_samples_train]

Возвращает :

y_pred: массив, форма (n_samples,)

Класс меток для образцов в X.

...