我如何获得LDA的组件在科学知识-学习?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (21)

在sklearn中使用PCA时,很容易将组件分离出来:

from sklearn import decomposition
pca = decomposition.PCA(n_components=n_components)
pca_data = pca.fit(input_data)
pca_components = pca.components_

但是我不能在我的生活中弄清楚如何从LDA中获取组件,因为没有components_属性。在sklearn lda中是否有类似的属性?

提问于
用户回答回答于

有一个 coef_属性可能包含你正在寻找的东西。它应该被记录。由于这是一个线性决策函数,coef_因此可能是sklearn命名方案中的正确名称。

你也可以直接使用该transform方法将数据投影到新空间。

用户回答回答于

在PCA的情况下,文件是清楚的。这pca.components_是特征向量。

在LDA的情况下,我们需要lda.scalings_属性。

使用iris数据和sklearn的示例:

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis


iris = datasets.load_iris()
X = iris.data
y = iris.target
#In general it is a good idea to scale the data
scaler = StandardScaler()
scaler.fit(X)
X=scaler.transform(X)

lda = LinearDiscriminantAnalysis()
lda.fit(X,y)

x_new = lda.transform(X)   

def myplot(score,coeff,labels=None):
    xs = score[:,0]
    ys = score[:,1]
    n = coeff.shape[0]

    plt.scatter(xs ,ys, c = y) #without scaling
    for i in range(n):
        plt.arrow(0, 0, coeff[i,0], coeff[i,1],color = 'r',alpha = 0.5)
        if labels is None:
            plt.text(coeff[i,0]* 1.15, coeff[i,1] * 1.15, "Var"+str(i+1), color = 'g', ha = 'center', va = 'center')
        else:
            plt.text(coeff[i,0]* 1.15, coeff[i,1] * 1.15, labels[i], color = 'g', ha = 'center', va = 'center')

plt.xlabel("LD{}".format(1))
plt.ylabel("LD{}".format(2))
plt.grid()

#Call the function. 

myplot(x_new[:,0:2], lda.scalings_) 
plt.show()

验证lda.scalings_是特征向量:

print(lda.scalings_)
print(lda.transform(np.identity(4)))

结果

扫码关注云+社区