Sklearn Chi2 For Feature Selection

我正在学习关于特征选择的卡方检验,并发现了像这个的代码

然而,我的理解是,卡方得分越高意味着特征越独立(因此对模型的用处越小),所以我们应该关注那些得分最低的特征。然而,使用scikit-learn的SelectKBest,选择器返回的是卡方得分最高的值。我对使用卡方检验的理解是否有误?还是说sklearn中的卡方得分产生了不同于卡方统计量的其他东西?

请看下面的代码以了解我的意思(除了结尾部分,大部分是从上面的链接中复制过来的)

from sklearn.datasets import load_irisfrom sklearn.feature_selection import SelectKBestfrom sklearn.feature_selection import chi2import pandas as pdimport numpy as np# 加载鸢尾花数据iris = load_iris()# 创建特征和目标X = iris.datay = iris.target# 通过将数据转换为整数来转换为分类数据X = X.astype(int)# 选择卡方统计量最高的两个特征chi2_selector = SelectKBest(chi2, k=2)chi2_selector.fit(X, y)# 查看选择器为每个特征返回的得分chi2_scores = pd.DataFrame(list(zip(iris.feature_names, chi2_selector.scores_, chi2_selector.pvalues_)), columns=['ftr', 'score', 'pval'])chi2_scores# 你可以看到SelectKBest返回的kbest是得分最高的两个特征kbest = np.asarray(iris.feature_names)[chi2_selector.get_support()]kbest

回答:

你的理解是相反的。

卡方检验的原假设是“两个分类变量是独立的”。因此,卡方统计量的值越高意味着“两个分类变量是相关的”,对分类更加有用。

SelectKBest根据更高的卡方值为你提供最好的两个(k=2)特征。因此,你需要获取它提供的那些特征,而不是获取卡方选择器上的“其他特征”。

你从chi2_selector.scores_获取卡方统计量并从chi2_selector.get_support()获取最佳特征是正确的。它将根据独立性检验的卡方检验为你提供“花瓣长度(cm)”和“花瓣宽度(cm)”作为前两个特征。希望这能澄清这个算法。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注