Выбор функции с помощью scikit-learn

Я новичок в компьютерном обучении. Я готовлю свои данные для классификации, используя Scikit Learn SVM. для того, чтобы выбрать лучшие функции, я использовал следующий метод:

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.

Может кто-нибудь сказать мне, как я могу преобразовать свои данные?

Спасибо заранее.

Ответ 1

Сообщение об ошибке Input X must be non-negative говорит все: Pearson chi square test (доброта соответствия) не относится к отрицательным значениям. Это логично, потому что критерий хи-квадрат предполагает распределение частот, а частота не может быть отрицательным числом. Следовательно, sklearn.feature_selection.chi2 утверждает, что вход неотрицателен.

Вы говорите, что ваши функции: "min, max, mean, median и FFT сигнала акселерометра". Во многих случаях может быть совершенно безопасно просто сдвинуть каждую функцию, чтобы сделать ее положительной или даже нормализовать до интервала [0, 1], как было предложено EdChum.

Если преобразование данных по какой-то причине невозможно (например, отрицательное значение является важным фактором), вы должны выбрать другую статистику для оценки ваших возможностей:

Поскольку вся эта процедура состоит в том, чтобы подготовить функции для другого метода, не стоит выбирать кого-либо, конечный результат обычно такой же или очень близко.