2014-09-11 48 views
11

Makine öğrenimi konusunda yeniyim. Verilerimi Scikit Learn SVM kullanarak sınıflandırma için hazırlıyorum. iyi özelliklerini seçmek için ben şu yöntemi kullandık: my veri kümesi negatif değerleri oluşur beri, aşağıdaki hatayı alıyorumscikit-learn kullanarak özellik seçimi

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

:

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. 

birisi bana söyleyebilir Nasıl verebilirim Verilerimi dönüştür

Önceden teşekkür ederiz.

+1

Değerleri 0 ile 1 arasında normalleştirebilir veya mutlak değerler alabilirsin – EdChum

+3

Verileriniz negatif değilse, chi2 iyi bir yöntem olmayabilir. F_score kullanabilirsiniz. Verilerinizin doğası nedir? –

+0

Teşekkürler EdChum ve Andreas. Verilerim ivmeölçer sinyalinin min, maks, ortalama, medyan ve FFT – sara

cevap

3

Input X must be non-negative hata iletisi, herşeyi belirtir: Pearson's chi square test (goodness of fit), negatif değerler için geçerli değildir. Mantıksaldır çünkü chi kare testi frekans dağılımını kabul eder ve bir frekans negatif bir sayı olamaz. Sonuç olarak, sklearn.feature_selection.chi2, girdinin negatif olmadığını doğrular.

Özelliklerininizin "min, max, ortalama, medyan ve ivmeölçer sinyalinin FFT" olduğunu söylüyorsunuz. Birçok durumda, her özelliği sadece pozitif yapmak için kaydırmak, hatta EdChum tarafından önerilen şekilde [0, 1] aralığına normalize etmek oldukça güvenli olabilir. veri dönüşümü (örneğin negatif bir değer önemli bir faktördür) mümkün değildir nedense ise

, kendi özelliklerini skoru başka istatistik almalı:

Bu yordamın tüm amacı, başka bir yönteme ilişkin özellikleri hazırlamak olduğundan, herhangi birini seçmek için çok önemli değil, sonuç genellikle aynı veya ry yakın.

İlgili konular