2014-09-11 16 views
11

Sono nuovo nell'apprendimento automatico. Sto preparando i miei dati per la classificazione usando Scikit Learn SVM. al fine di selezionare le migliori caratteristiche che ho usato il seguente metodo:Selezione delle funzioni con scikit-learn

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

Poiché il mio set di dati costituiti da valori negativi, ottengo il seguente errore:

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. 

qualcuno può dirmi come posso trasformare i miei dati?

Grazie in anticipo.

+1

È possibile normalizzare i valori tra 0 e 1 o prendere valori assoluti, forse – EdChum

+3

Se i dati non sono non negativi, forse chi2 non è un buon metodo. Puoi usare f_score. Qual è la natura dei tuoi dati? –

+0

Grazie EdChum e Andreas. I miei dati consistono in min, max, media, mediana e FFT del segnale dell'accelerometro – sara

risposta

3

Il messaggio di errore Input X must be non-negative dice tutto: Pearson's chi square test (goodness of fit) non si applica ai valori negativi. È logico perché il test del chi quadrato presuppone la distribuzione delle frequenze e una frequenza non può essere un numero negativo. Di conseguenza, sklearn.feature_selection.chi2 asserisce che l'input non è negativo.

Stai dicendo che le tue caratteristiche sono "min, max, media, mediana e FFT del segnale dell'accelerometro". In molti casi, potrebbe essere abbastanza semplice spostare ogni funzionalità per renderla completamente positiva o addirittura normalizzare nell'intervallo [0, 1] come suggerito da EdChum.

Se trasformazione dei dati è per qualche motivo non è possibile (ad esempio, un valore negativo è un fattore importante), si dovrebbe scegliere un altro dato statistico a segnare le vostre caratteristiche:

Poiché l'intero punto di questa procedura è preparare le funzionalità per un altro metodo, non è un grosso problema scegliere qualcuno, il risultato finale di solito è lo stesso o ve ry close.

Problemi correlati