van*_*man 5 python chi-squared feature-selection scikit-learn
我试图从许多连续特征中预测二元(分类)目标,并希望在进入模型拟合之前缩小特征空间。我注意到 SKLearn 的 Feature Selection 包中的 SelectKBest 类在 Iris 数据集上有以下示例(它也从连续特征预测二进制目标):
from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
iris = load_iris()
X, y = iris.data, iris.target
X.shape
(150, 4)
X_new = SelectKBest(chi2, k=2).fit_transform(X, y)
X_new.shape
(150,2)
Run Code Online (Sandbox Code Playgroud)
该示例使用 chi2 检验来确定模型中应使用哪些特征。然而,我的理解是 chi2 测试严格用于我们具有预测分类性能的分类特征的情况。我不认为 chi2 测试可以用于这样的场景。我的理解有误吗?chi2 检验能否用于检验分类变量是否依赖于连续变量?
小智 5
带有 chi2 检验的 SelectKBest 函数仅适用于分类数据。事实上,只有当特征只有 1 和 0 时,测试结果才具有实际意义。
如果你稍微检查一下chi2的实现,你会发现代码只对每个特征应用一个总和,这意味着该函数只需要二进制值。此外,接收 chi2 函数的参数指示如下:
def chi2(X, y):
...
X : {array-like, sparse matrix}, shape = (n_samples, n_features_in)
Sample vectors.
y : array-like, shape = (n_samples,)
Target vector (class labels).
Run Code Online (Sandbox Code Playgroud)
这意味着该函数期望接收带有所有样本的特征向量。但是稍后在计算预期值时,您会看到:
feature_count = X.sum(axis=0).reshape(1, -1)
class_prob = Y.mean(axis=0).reshape(1, -1)
expected = np.dot(class_prob.T, feature_count)
Run Code Online (Sandbox Code Playgroud)
这些代码行只有在 X 和 Y 向量只有 1 和 0 时才有意义。
| 归档时间: |
|
| 查看次数: |
1931 次 |
| 最近记录: |