web-dev-qa-db-fra.com

Sélection des fonctionnalités à l'aide de scikit-learn

Je suis nouveau dans l'apprentissage automatique. Je prépare mes données pour la classification à l'aide de Scikit Learn SVM. Afin de sélectionner les meilleures fonctionnalités, j'ai utilisé la méthode suivante:

SelectKBest(chi2, k=10).fit_transform(A1, A2)

Étant donné que mon ensemble de données se compose de valeurs négatives, j'obtiens l'erreur suivante:

ValueError                                Traceback (most recent call last)

/media/5804B87404B856AA/TFM_UC3M/test2_v.py in <module>()
----> 1 
      2 
      3 
      4 
      5 

/usr/local/lib/python2.6/dist-packages/sklearn/base.pyc in fit_transform(self, X, y,     **fit_params)
    427         else:
    428             # fit method of arity 2 (supervised transformation)

--> 429             return self.fit(X, y, **fit_params).transform(X)
    430 
    431 

/usr/local/lib/python2.6/dist-packages/sklearn/feature_selection/univariate_selection.pyc in fit(self, X, y)
    300         self._check_params(X, y)
    301 
--> 302         self.scores_, self.pvalues_ = self.score_func(X, y)
    303         self.scores_ = np.asarray(self.scores_)
    304         self.pvalues_ = np.asarray(self.pvalues_)

/usr/local/lib/python2.6/dist-  packages/sklearn/feature_selection/univariate_selection.pyc in chi2(X, y)
    190     X = atleast2d_or_csr(X)
    191     if np.any((X.data if issparse(X) else X) < 0):
--> 192         raise ValueError("Input X must be non-negative.")
    193 
    194     Y = LabelBinarizer().fit_transform(y)

ValueError: Input X must be non-negative.

Quelqu'un peut-il me dire comment transformer mes données?

24
sara

Le message d'erreur Input X must be non-negative dit tout: test du chi carré de Pearson (qualité de l'ajustement) ne s'applique pas aux valeurs négatives. C'est logique car le test du chi carré suppose une distribution de fréquences et une fréquence ne peut pas être un nombre négatif. Par conséquent, sklearn.feature_selection.chi2 affirme que l'entrée n'est pas négative.

Vous dites que vos caractéristiques sont "min, max, moyenne, médiane et FFT du signal d'accéléromètre". Dans de nombreux cas, il peut être tout à fait sûr de simplement déplacer chaque fonctionnalité pour la rendre positive, ou même de la normaliser à [0, 1] intervalle comme suggéré par EdChum.

Si la transformation des données n'est pas possible pour une raison quelconque (par exemple, une valeur négative est un facteur important), vous devez choisir une autre statistique pour noter vos fonctionnalités:

Étant donné que le but de cette procédure est de préparer les fonctionnalités pour une autre méthode, ce n'est pas un problème de choisir quelqu'un, le résultat final étant généralement le même ou très proche.

24
Maxim