今天使用sklearn进行特征选择的时候出现一个错误:
ValueError: Input X must be non-negative.
找了stackoverflow,原来是卡方验证不能用于负值。
卡方分布是通过统计当前变量的频次,和目标变量的频次来分析当前变量时候有关系来衡量当前变量的重要程度,所以用来做特征选择。这里细致讲解,请看参考博客第三个。
频次当然不是负数,所以不能输入负数值。
解决办法:
1.把输入变化到0-1.
sklearn.preprocessing.MinMaxScaler().fit_transform(YOUR_TRAINING_FEATURES_HERE)
2.用其他的特征选择方法。
klearn.feature_selection.f_classif
计算 ANOVA f-value
sklearn.feature_selection.mutual_info_classif
计算 mutual information
参考博客:
1.stackoverflow:https://stackoverflow.com/questions/64596532/problem-with-negative-numbers-in-sklearn-feature-selection-selectkbest-feautre-s
2.https://stackoverflow.com/questions/25792012/feature-selection-using-scikit-learn/46608239#46608239
3.推荐:统计学——卡方检验和卡方分布
4.sklearn特征选择doc:https://scikit-learn.org/stable/modules/feature_selection.html