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?
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:
sklearn.feature_selection.f_classif
calcule la valeur f de l'ANOVAsklearn.feature_selection.mutual_info_classif
calcule les informations mutuellesÉ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.