📅  最后修改于: 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)']
这说明最好的两个特征是花瓣的长度和宽度。通过卡方检验,我们可以从原始数据中选择最具有代表性和判别性的特征,从而提高分类的准确性。