首页 文章

使用chi2测试进行连续特征选择(Scikit Learn)

提问于
浏览
2

我试图从许多连续特征中预测二元(分类)目标,并希望在进入模型拟合之前缩小特征空间 . 我注意到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)

该示例使用chi2测试来确定应在模型中使用哪些功能 . 然而,据我所知,chi2测试严格意味着在我们具有预测分类性能的分类特征的情况下使用 . 我不认为chi2测试可以用于这样的场景 . 我的理解错了吗?是否可以使用chi2检验来检验分类变量是否依赖于连续变量?

1 回答

  • 0

    具有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).
    

    这意味着函数期望接收包含所有样本的特征向量 . 但是稍后当计算出预期值时,您会看到:

    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)
    

    如果X和Y向量只有1和0,那么这些代码行才有意义 .

相关问题