sklearn之线性判别分析(LDA)类库介绍

转载自:http://blog.sina.com.cn/s/blog_62970c250102xgyt.html
本文介绍如何使用scikit-learn中线性判别分析(LDA)类库对数据进行降维。

1. scikit-learn中LDA类的概述
在scikit-learn中,LDA类是sklearn.discriminant_analysis.LinearDiscriminantAnalysis。它既可以用于分类也可以用于降维。当然,应用场景最多的还是降维。和PCA类似,LDA降维基本也不用调参,只需要指定降维到的维度即可。

2. LinearDiscriminantAnalysis类概述
下面我们总结一下LinearDiscriminantAnalysis类的基本参数。
参数 描述
solver 求LDA超平面特征矩阵使用的方法,可以选择的方法有奇异值分解”svd”、最小二乘”lsqr”和特征分解”eigen”。一般来说特征非常多的时候推荐使用”svd”,而特征不多的时候推荐使用”eigen”。需要注意的是,如果使用”svd”,则不能指定正则化参数shrinkage进行正则化。默认值是”svd”。
shrinkage 正则化参数,可以增强LDA分类的泛化能力。如果仅仅是为了降维,则可以忽略这个参数。默认值是None,即不进行正则化。可以选择”auto”,让算法自己决定是否正则化。当然也可以选择不同的[0,1]之间的值进行交叉验证调参。需要注意的是,shrinkage只在solver为最小二乘”lsqr”和特征分解”eigen”时有效。
priors 类别权重,在做分类模型时可以指定不同类别的权重,进而影响分类模型的建立。降维时一般不需要关注这个参数。
n_components 进行LDA降维时降到的维度。在降维时需要输入这个参数。可选值只能为[1,类别数-1)范围之间的整数。如果不是用于降维,则这个值可以用默认的None。
从上面的描述可以看出,如果我们只是为了降维,则只需要输入n_components,注意这个值必须小于”类别数-1”,而PCA则没有这个限制。

3. LinearDiscriminantAnalysis降维实例
线性判别分析LDA原理一文中讲过,PCA和LDA都可以用于降维,两者没有绝对的优劣之分,使用两者的原则实际上取决于数据的分布情况。由于LDA可以利用类别信息,因此某些时候比无监督的PCA会更好。
代码如下所示:
—————————————————————————————————
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
import numpy as np
import mnist

if __name__ == “__main__”:
    np.set_printoptions(linewidth=200)
    # 读取Mnist数据集
    mnistSet = mnist.loadLecunMnistSet()
    train_X, train_Y, test_X, test_Y = mnistSet[0], mnistSet[1], mnistSet[2], mnistSet[3]

    # 类别数量
    n_class = len(np.unique(train_Y))
    for n in range(1, n_class - 2):
        print “n = “, n
        # 使用LDA降维
        lda = LinearDiscriminantAnalysis(n_components=n)
        lda.fit(train_X, train_Y)
        train_lda_X = lda.transform(train_X)
        print “截距: “, lda.intercept_
        print “系数: “, lda.coef_
        print “各维度的方差值占总方差值的比例: “, lda.explained_variance_ratio_, “各维度的方差值之和占总方差值的比例: “, np.sum(
            lda.explained_variance_ratio_)
—————————————————————————————————

猜你喜欢

转载自blog.csdn.net/zztingfeng/article/details/80584633