sar*_*ara 20 python machine-learning chi-squared feature-selection scikit-learn
我是机器学习的新手.我正在使用Scikit Learn SVM准备我的数据进行分类.为了选择最好的功能,我使用了以下方法:
SelectKBest(chi2, k=10).fit_transform(A1, A2)
Run Code Online (Sandbox Code Playgroud)
由于我的数据集由负值组成,因此出现以下错误:
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.
Run Code Online (Sandbox Code Playgroud)
有人能告诉我如何转换我的数据?
Max*_*xim 18
错误消息Input X must be non-negative说明了一切:Pearson的卡方检验(拟合优度)不适用于负值.这是合乎逻辑的,因为卡方检验假定频率分布,频率不能是负数.因此,sklearn.feature_selection.chi2断言输入是非负的.
你的意思是你的功能是"加速度计信号的最小值,最大值,平均值,中值和FFT".在许多情况下,简单地移动每个特征以使其全部为正,或者甚至[0, 1]按照EdChum的建议归一化到间隔可能是非常安全的.
如果由于某种原因数据转换不可能(例如,负值是一个重要因素),您应该选择另一个统计数据来评分您的功能:
由于该程序的整点是要准备的另一种方法的特征,这不是什么大不了的事来接人,最后的结果通常是相同或非常接近.