在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空间:
- 直接用模型的
transform()方法(最省心):projected_data = transformer.transform(features) - 手动做矩阵乘法(确认维度匹配:原始特征是
(n_samples, n_features),投影矩阵是(n_features, n_components)):projected_data = features @ projection_matrix
额外提示
如果你需要固定降维后的维度,比如降到2维,初始化时设置LDA(n_components=2)就行,这样scalings_会自动返回对应维度的投影矩阵。
内容的提问来源于stack exchange,提问作者rj dj
相关产品推荐
相关产品推荐

