Python中二分类数据集能否用LDA从20万特征中筛选出100个最优特征?
问题解答
核心结论先明确
- 如果你是要从原始20万特征中筛选出100个原有特征:完全可以通过LDA的判别指标实现,Python环境也有成熟工具支持
- 如果你是要通过LDA降维生成100个新的线性组合特征:二分类场景下不可能做到,原生LDA最多只能生成1个判别特征
原理说明
LDA的核心设计是最大化类间差异、最小化类内差异,其可生成的独立线性判别分量的上限为 类别数 - 1。你的场景只有2个类别,因此原生LDA降维最多只能输出1个合成特征,不可能直接得到100个独立的LDA降维特征。
但如果你的需求是从原始特征里做筛选,不需要生成新特征,完全可以用LDA的判别规则给每个特征单独计算区分能力得分,再取得分最高的100个特征即可,这个方案不存在维度限制。
Python实现方案
可以直接用scikit-learn的特征选择工具实现,对应指标f_classif本质就是单个特征的LDA判别能力量化:
from sklearn.feature_selection import SelectKBest, f_classif # X为形状为 [样本数量, 200000] 的特征矩阵,y为形状为 [样本数量] 的二分类标签 selector = SelectKBest(score_func=f_classif, k=100) X_filtered = selector.fit_transform(X, y) # X_filtered 就是筛选得到的100个最优特征组成的矩阵 # 可以通过 selector.get_support() 得到被选中特征的索引
内容的提问来源于stack exchange,提问作者crazy_stupid
相关产品推荐
相关产品推荐

