【问题标题】:How to get eigenvectors from Linear Discriminant Analysis with scikit-learn如何使用 scikit-learn 从线性判别分析中获取特征向量
【发布时间】:2017-05-19 20:41:26
【问题描述】:

如何从 scikit-learn 线性判别分析对象中获得基变化矩阵?

对于形状为m x pm 样本和p 特征)和N 类的数组X,缩放矩阵具有p 行和N-1 列。该矩阵可用于将数据从原始空间转换为线性子空间。


艾莉亚回答后编辑:

让我们考虑以下示例:

from sklearn.datasets import make_blobs
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA

X, label = make_blobs(n_samples=100, n_features=2, centers=5, cluster_std=0.10, random_state=0)
lda = LDA()
Xlda = lda.fit(X, label)
Xlda.scalings_
#array([[ 7.35157288,  6.76874473],
#       [-6.45391558,  7.97604449]])
Xlda.scalings_.shape
#(2, 2)

我希望 scalings_ 矩阵的形状为 (2,4),因为我有 2 个特征,而 LDA 将提供 5-1 个组件。

【问题讨论】:

    标签: scikit-learn


    【解决方案1】:

    让我们将您的LinearDiscriminantAnalysis 对象称为lda。您可以使用lda.scalings_ 访问缩放矩阵。描述这一点的文档显示为here

    import sklearn.datasets as ds
    from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA
    
    iris = ds.load_iris()
    iris.data.shape
    # (150, 4)
    len(iris.target_names)
    # 3
    
    lda = LDA()
    lda.fit(iris.data, iris.target)
    lda.scalings_
    # array([[-0.81926852,  0.03285975],
    #        [-1.5478732 ,  2.15471106],
    #        [ 2.18494056, -0.93024679],
    #        [ 2.85385002,  2.8060046 ]])
    lda.scalings_.shape
    # (4, 2)
    

    【讨论】:

    • 非常感谢您的关注。确实,对于 iris 数据集,它似乎工作正常(结果与我从 R 获得的结果不同,但我猜这是由于一些标准化预处理。)然而,对于不同的示例,scaling_ 矩阵无法满足之前对其形状的要求,请参阅我使用 make_blob 的回答。 `
    • 我编辑了我的问题,以展示一个缩放矩阵的形状似乎错误的示例。
    • 这值得向 scikit-learn 的维护者提交 issue
    • 已添加问题:link to issue on GitHub
    • @AryaMcCarthy 在这个例子中, lda.scalings_ 是特征向量?
    猜你喜欢
    • 2019-05-21
    • 2014-06-10
    • 2015-07-20
    • 2017-08-24
    • 2019-08-18
    • 2015-09-15
    • 2016-09-11
    • 2020-01-18
    • 2016-02-12
    相关资源
    最近更新 更多