web-dev-qa-db-fra.com

Obtention d'un avertissement de dépréciation dans Sklearn sur un tableau 1d, bien qu'il ne dispose pas d'un tableau 1D

J'essaie d'utiliser SKLearn pour exécuter un modèle SVM. Je suis en train de l'essayer maintenant avec quelques exemples de données. Voici les données et le code:

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, quand je cours 

import sklearn
sklearn.__version__

Il affiche 0,17.

Maintenant, quand je lance print(clf.predict([1, 1])), je reçois l'avertissement suivant:

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)

Cela me donne une prédiction, ce qui est excellent. Cependant, je trouve cela étrange pour plusieurs raisons.

Je n'ai pas de tableau 1d. Si vous imprimez A, vous obtenez

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

Ce qui me semble être 2 dimensions. Mais d'accord, disons simplement que ce que j'ai est en fait un tableau 1D. Essayons de le changer en utilisant reshape, comme suggéré par l'erreur.

Même code que ci-dessus, mais maintenant nous avons

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

Mais alors cela produit un tableau de longueur 20, ce qui n’a aucun sens et n’est pas ce que je veux. Je l'ai également essayé avec reshape(1, -1) mais cela me donne une seule observation/liste de 20 éléments. 

Comment puis-je remodeler mes données dans des tableaux numpy afin de ne pas recevoir cet avertissement?


J'ai regardé deux réponses sur SO, et aucune n'a fonctionné pour moi. Question 1 et Question 2 . Il semble que Q1 était en réalité des données 1D et a été résolu en utilisant reshape, que j'ai essayé et échoué à. Q2 a une réponse sur la façon de suivre les avertissements et les erreurs, ce qui n'est pas ce que je veux. L'autre réponse est à nouveau une instance d'un tableau 1D.

15
Katya Handler

Au lieu de courir 

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

Courir

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

l'échantillon pour la prédiction intuitivement pourrait être:

[1,9]

Mais vous pouvez modifier le vecteur comme réponse précédente. Ou simplement faire ce qui suit:

[[1,9]]

EXEMPLE

import numpy en tant que np de sklearn import svm import random as random

A = np.array ([[random.randint (0, 20) pour i dans la plage (2)] pour i dans la plage (10)]) Lab = [0, 1, 0, 1, 0, 1 , 0, 1, 0, 1]

clf = svm.SVC (noyau = 'linéaire', C = 1.0) clf.fit (A, lab)

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

0