Python 使用scikit学习功能选择

Python 使用scikit学习功能选择,python,machine-learning,scikit-learn,feature-selection,chi-squared,Python,Machine Learning,Scikit Learn,Feature Selection,Chi Squared,我是机器学习新手。我正在准备使用Scikit学习SVM进行分类的数据。为了选择最佳功能,我使用了以下方法: SelectKBest(chi2, k=10).fit_transform(A1, A2) 由于我的数据集由负值组成,因此出现以下错误: ValueError Traceback (most recent call last) /media/5804B87404B856AA/TFM_UC3M/test2_v.py in &l

我是机器学习新手。我正在准备使用Scikit学习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.
有人能告诉我如何转换数据吗?

错误消息Input X必须是非负数,说明一切:不适用于负值。这是合乎逻辑的,因为卡方检验假设频率分布,频率不能是负数。因此,断言输入是非负的

你是说你的特征是加速度计信号的最小值、最大值、平均值、中值和FFT。在许多情况下,简单地改变每个特征,使其全部为正,甚至按照EdChum的建议,将其标准化为[0,1]间隔,可能是非常安全的

如果由于某些原因无法进行数据转换,例如负值是一个重要因素,则应选择另一个统计数据对特征进行评分:

计算方差分析f值 计算互信息
由于此过程的全部目的是为另一种方法准备特征,因此挑选任何人都不是什么大问题,最终结果通常相同或非常接近。

您可以将值标准化为0到1之间,或者取绝对值。如果您的数据不是非负的,可能chi2不是一种好方法。你可以使用f_分数。您的数据的性质是什么?谢谢EdChum和Andreas。我的数据包括加速度计信号的最小值、最大值、平均值、中值和FFT。只需使用sklearn.preprocessing.MinMaxScaler.fit\u transform您的\u TRAINING\u FEATURES\u这里使用默认值将您的训练特征从0缩放到1挑选任何人都没什么大不了的,我只是想确认我在这里读对了你的意思-你是说选择f_classif、mutual_info_classif或SelectKBest@DonieM我现在正在使用它,但我有相同的错误:…scaler=MinMaxScaler df1[self.num\u features]=scaler.fit\u transformdf1[self.num\u features]返回df1