You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在scikit-learn中获取LDA投影矩阵的正确方法咨询

解决LDA投影矩阵获取的问题

嘿,我能看出你在从LDA模型里提取正确的投影矩阵时遇到了麻烦,咱们一步步来搞定它!

先搞清楚:scikit-learn里LDA的投影矩阵到底存在哪儿?

在scikit-learn的LinearDiscriminantAnalysis中,scalings_属性就是你要找的投影矩阵!它的每一列对应一个线性判别向量,用来把原始特征空间映射到LDA的低维子空间里。

你的代码问题出在哪儿?

你之前尝试从covariance_(类内协方差矩阵)提取特征向量,这是不对的——LDA的投影矩阵不是类内协方差矩阵的特征向量,而是通过最大化「类间散度/类内散度」的比值计算出来的,直接对covariance_做特征分解完全不是一回事。

另外,你用了fit_transform(),其实只需要fit()就足够训练模型并获取投影矩阵了(fit_transform()会直接返回投影后的数据集,不是必须的步骤)。

修正后的代码示例

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA

def get_projection(features, label):
    # 初始化LDA模型,可根据需要指定n_components(降维后的维度)
    transformer = LDA(n_components=None)  # 默认会取min(n_classes-1, n_features)
    # 仅训练模型,不需要返回投影后的数据
    transformer.fit(features, label)
    # scalings_就是我们要的投影矩阵
    projection_matrix = transformer.scalings_
    return projection_matrix

怎么用这个投影矩阵?

拿到矩阵后,你有两种方式把数据投影到LDA空间:

  1. 直接用模型的transform()方法(最省心):
    projected_data = transformer.transform(features)
    
  2. 手动做矩阵乘法(确认维度匹配:原始特征是(n_samples, n_features),投影矩阵是(n_features, n_components)):
    projected_data = features @ projection_matrix
    

额外提示

如果你需要固定降维后的维度,比如降到2维,初始化时设置LDA(n_components=2)就行,这样scalings_会自动返回对应维度的投影矩阵。

内容的提问来源于stack exchange,提问作者rj dj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:58:46