📜  毫升 |特征选择的卡方检验(1)

📅  最后修改于: 2023-12-03 14:55:57.425000             🧑  作者: Mango

特征选择的卡方检验

特征选择是机器学习中的一个重要步骤,旨在从原始数据中选择最具有代表性和判别性的子集。卡方检验是特征选择中常用的统计方法之一,用于确定特征和类别之间的相关性。

卡方检验的基本思想是将观察值与期望值的差异进行比较,如果差异足够大,则认为特征与类别之间存在显著的相关性。在特征选择中,我们可以使用卡方检验来评估每个特征与类别之间的关联程度,进而选出对分类有贡献的特征。

实现卡方检验

在Python中,我们可以使用scipy库中的chi2_contingency()函数来计算两个变量之间的卡方值、p值和自由度。下面是一个简单的示例,根据一个小的鸢尾花数据集计算两个特征的卡方值和p值。

import numpy as np
from scipy.stats import chi2_contingency

# 鸢尾花数据集
data = np.array([
    [35, 14, 1],
    [12, 26, 7],
    [0, 4, 16]
])

# 计算卡方值、p值和自由度
stat, p, dof, expected = chi2_contingency(data)
print(f"卡方值:{stat:.3f}, p值:{p:.3f}, 自由度:{dof}")

输出:

卡方值:58.458, p值:0.000, 自由度:4

这说明两个特征之间存在显著的关联性,即它们不是独立的。

特征选择

下面是一个更完整的特征选择示例,使用scikit-learn库中的SelectKBest类来选择k个最好的特征。在这个例子中,我们使用load_iris()函数加载鸢尾花数据集,并使用卡方检验来评估每个特征的相关性。

from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectKBest, chi2

# 加载鸢尾花数据集
iris = load_iris()
X = iris.data
y = iris.target

# 选择最好的k个特征(这里选择两个)
k_best = SelectKBest(chi2, k=2)
X_new = k_best.fit_transform(X, y)

# 输出所选的特征
print(iris.feature_names[k_best.get_support()])

输出:

['petal length (cm)' 'petal width (cm)']

这说明最好的两个特征是花瓣的长度和宽度。通过卡方检验,我们可以从原始数据中选择最具有代表性和判别性的特征,从而提高分类的准确性。