精华内容
下载资源
问答
  • PCA LDA降维测试

    2019-08-17 15:28:48
    测试概述 该实验的主要目的是测试LDA(Linear Discriminant Analysis,线性...降维(PCA LDA)和训练(SVM)均是调用python的sklearn库,所有代码都在程序中给出。 每次使用相同数据集,通过三种不同方式测试,分...

    测试概述

    该实验的主要目的是测试LDA(Linear Discriminant Analysis,线性判别分析)和PCA(Principal components analysis,主成分分析)的降维效果(主要是训练时间)。训练模型使用SVM算法。降维(PCA LDA)和训练(SVM)均是调用python的sklearn库,所有代码都在程序中给出。

    每次使用相同数据集,通过三种不同方式测试,分别是直接训练、PCA降维后训练、LDA降维后训练。

     

    测试环境

    操作系统

    win10 64位

    CPU

    AMD Ryzen 5 2600x 6-core 3.60GHz

    内存

    16GB

    IDE/编辑器

    PyCharm

    Python版本

    3.6

     

    LDA_test.py代码

    import numpy as np
    from pandas import read_csv
    import time
    from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
    from sklearn.decomposition import PCA
    from sklearn.svm import SVC
    from sklearn import preprocessing
    
    import warnings
    warnings.filterwarnings("ignore")
    
    def sklearn_SVM(X, y, X_t, y_t):
        """
    	sklearn的SVM
        :param X: 训练集x
        :param y: 训练集y
        :param X_t: 测试集x
        :param y_t: 测试集y
        :return:
        """
        clf = SVC()  # C=1,kernel='rbf',gamma=auto
        t1 = time.time()
        clf.fit(X, y)
        t2 = time.time()
        score = clf.score(X_t, y_t)
    
        print("训练时间:%fs" % (t2 - t1))
        print("支持向量:", clf.n_support_)
        print("准确率:", score)
    
    def sklearn_PCA(X, y):
        """
    	sklearn的PCA
        :param X: 样本集x
        :param y: 样本集y
        :return: 降维后x
        """
        pca = PCA(n_components=1)  # n_components 降至的维数
        X_new = pca.fit_transform(X, y)
    
        return X_new
    
    def sklearn_LDA(X, y):
        """
    	sklearn的LDA
        :param X: 样本集x
        :param y: 样本集y
        :return: 降维后x
        """
        lda = LinearDiscriminantAnalysis(n_components=1)  # n_components 降至的维数  [1,n_classes-1)对于2分类问题只能降到1维
        X_new = lda.fit_transform(X, y)
    
        return X_new
    
    if __name__ == '__main__':
        path = "../dataset_DR/"  # 数据集路径
        dataset = "a5a.csv"  # 训练集
        dataset_t = "a5a.t.csv"  # 测试集
        print("当前训练集:", dataset)
        data = read_csv(path + dataset, header=-1).values
        data_t = read_csv(path + dataset_t, header=-1).values
        print("训练集大小:", data.shape)
        print("测试集大小:", data_t.shape)
        X = data[:, :-1]
        y = data[:, -1]
        X_t = data_t[:, :-1]
        y_t = data_t[:, -1]
        positive_point = y.tolist().count(1)
        negative_point = y.tolist().count(-1)
        print("负类:", negative_point)
        print("正类:", positive_point)
        # 归一化
        x = preprocessing.MinMaxScaler().fit_transform(X)
        x_t = preprocessing.MinMaxScaler().fit_transform(X_t)
        # 直接训练
        print("-----------------------------------")
        print("           直接训练                ")
        sklearn_SVM(x, y, x_t, y_t)
    
        print("-----------------------------------")
        print("            PCA降维                ")
        t1 = time.time()
        X_new = sklearn_PCA(x, y)
        Xt_new = sklearn_PCA(x_t, y_t)
        t2 = time.time()
        print("sklearn_PCA降维运行时间:%fs" % (t2 - t1))
        sklearn_SVM(X_new, y, Xt_new, y_t)
    
        print("-----------------------------------")
        print("            LDA降维                ")
        t1 = time.time()
        X_new = sklearn_LDA(x, y)
        Xt_new = sklearn_LDA(x_t, y_t)
        t2 = time.time()
        print("sklearn_LDA降维运行时间:%fs" % (t2 - t1))
        sklearn_SVM(X_new, y, Xt_new, y_t)
    

    测试过程

    修改数据集路径,每次测试需要修改训练集和测试集名称,运行PCA_LDA_test.py

                       

     

    测试结果

    本次实验使用人工的和真实的数据集,其中summer_10000是人工的3维数据集,axa系列是libsvm dataset的二分类数据集。每次实验使用相同的数据集用三种不同的方法训练和测试,结果如下表所示

    统计量

     

    数据

    集及

    其大小

    负类

    正类

    训练时间(s)

    支持向量

    准确率(%)

     

    PCA

    LDA

     

    PCA

    LDA

     

    PCA

    LDA

    summer-10000

    10000

    ,3

    8160

    1840

    0.338

    0.605

    0.564

    855

    852

    1862

    1840

    818

    812

    96.90

    80.15

    93.63

    a5a

    6414

    ,123

    4845

    1569

    1.97

    0.75

    0.54

    1308 1308

    1589 1464

    1089 1014

    84.15

    80.69

    84.74

    a6a

    11220

    ,123

    8528

    2692

    7.59

    2.16

    2.18

    2181 2164

    2589 2471

    1849 1797

    84.16

    80.48

    84.73

    a7a

    16100

    ,123

    12182

    3918

    18.34

    3.82

    3.18

    3094 3066

    3573 3459

    2650 2571

    84. 58

    80.52

    84.84

    a8a

    22696

    ,123

    17190

    5506

    38.30

    7.25

    6.01

    4287 4258

    4971 4864

    3731 3652

    85

    80.43

    85.44

    a9a

    32561

    ,123

    24720

    7841

    74.76

    13.02

    11.56

    5992 5962

    7018 6933

    5231 5152

    84.81

    80.17

    84.89

     

    测试结论

    1. PCA和LDA对样本降维后的训练时间都降低了
    2. axa系列数据集,PCA降维后再训练的准确率降低了4%左右,LDA降维后的准确率基本不变;summer-10000数据集,PCA降维后在训练的准确率降低了16%左右,LDA降低了3%左右
    3. PCA降维后再训练的支持向量增加,LDA降维后的支持向量减少,且都随着样本集的增大而增加/减少的更多。

      总结,PCA和LDA对样本降维后训练都更快了,但LDA降维后的分类效果更好。

    展开全文
  • 线性- LDA(Linear Discriminant ...LDA 可以提高数据分析过程中的计算效率,对于未能正则化的模型,可以降低维度灾难带来的过拟合。 LDA 降维算法展示 详细内容可参见《数据降维—线性判别分析(LDA)》: ht...

    线性- LDA(Linear Discriminant Analysis)降维算法

    LDA 是一种可作为特征抽取的技术,其目标是向最大化类间差异,最小化类内差异的方向投影,以利于分类等任务即将不同类的样本有效的分开。LDA 可以提高数据分析过程中的计算效率,对于未能正则化的模型,可以降低维度灾难带来的过拟合
    在这里插入图片描述

    LDA 降维算法展示
    #coding:utf-8
    import numpy as np
    from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
    from sklearn.datasets import load_iris
    import matplotlib.pyplot as plt
    
    '''
    author: heucoder
    email: 812860165@qq.com
    date: 2019.6.13
    '''
    
    
    def lda(data, target, n_dim):
        '''
        :param data: (n_samples, n_features)
        :param target: data class
        :param n_dim: target dimension
        :return: (n_samples, n_dims)
        '''
    
        clusters = np.unique(target)
    
        if n_dim > len(clusters)-1:
            print("K is too much")
            print("please input again")
            exit(0)
    
        #within_class scatter matrix
        Sw = np.zeros((data.shape[1],data.shape[1]))
        for i in clusters:
            datai = data[target == i]
            datai = datai-datai.mean(0)
            Swi = np.mat(datai).T*np.mat(datai)
            Sw += Swi
    
        #between_class scatter matrix
        SB = np.zeros((data.shape[1],data.shape[1]))
        u = data.mean(0)  #所有样本的平均值
        for i in clusters:
            Ni = data[target == i].shape[0]
            ui = data[target == i].mean(0)  #某个类别的平均值
            SBi = Ni*np.mat(ui - u).T*np.mat(ui - u)
            SB += SBi
        S = np.linalg.inv(Sw)*SB
        eigVals,eigVects = np.linalg.eig(S)  #求特征值,特征向量
        eigValInd = np.argsort(eigVals)
        eigValInd = eigValInd[:(-n_dim-1):-1]
        w = eigVects[:,eigValInd]
        data_ndim = np.dot(data, w)
    
        return data_ndim
    
    if __name__ == '__main__':
        iris = load_iris()
        X = iris.data
        Y = iris.target
        data_1 = lda(X, Y, 2)
    
        data_2 = LinearDiscriminantAnalysis(n_components=2).fit_transform(X, Y)
    
    
        plt.figure(figsize=(8,4))
        plt.subplot(121)
        plt.title("my_LDA")
        plt.scatter(data_1[:, 0], data_1[:, 1], c = Y)
    
        plt.subplot(122)
        plt.title("sklearn_LDA")
        plt.scatter(data_2[:, 0], data_2[:, 1], c = Y)
        plt.savefig("LDA.png")
        plt.show()
    
    展开全文
  • 在上一篇LDA线性判别分析原理及python应用(葡萄酒案例分析),我们通过详细的步骤理解LDA内部逻辑实现原理,能够更好地掌握线性判别分析的内部机制。当然,在以后项目数据处理,我们有更高效的实现方法,这篇将记录...

    基于sklearn的线性判别分析(LDA)代码实现

    一、前言及回顾

    本文记录使用sklearn库实现有监督的数据降维技术——线性判别分析(LDA)。在上一篇LDA线性判别分析原理及python应用(葡萄酒案例分析),我们通过详细的步骤理解LDA内部逻辑实现原理,能够更好地掌握线性判别分析的内部机制。当然,在以后项目数据处理,我们有更高效的实现方法,这篇将记录学习基于sklearn进行LDA数据降维,提高编码速度,而且会感觉更加简单。

    学习之后可以对数据降维处理两种实现方法进行对比:

    二、定义分类结果可视化函数

    这个函数与上一篇文章 运用sklearn进行主成分分析(PCA)代码实现 里是一样的,plot_decision_region函数在分类结果区别决策区域中可以复用。

    def plot_decision_regions(x, y, classifier, resolution=0.02):

    markers = ['s', 'x', 'o', '^', 'v']

    colors = ['r', 'g', 'b', 'gray', 'cyan']

    cmap = ListedColormap(colors[:len(np.unique(y))])

    x1_min, x1_max = x[:, 0].min() - 1, x[:, 0].max() + 1

    x2_min, x2_max = x[:, 1].min() - 1, x[:, 1].max() + 1

    xx1, xx2 = np.meshgrid(np.arange(x1_min, x1_max, resolution), np.arange(x2_min, x2_max, resolution))

    z = classifier.predict(np.array([xx1.ravel(), xx2.ravel()]).T)

    z = z.reshape(xx1.shape)

    plt.contourf(xx1, xx2, z, alpha=0.4, cmap=cmap)

    for idx, cc in enumerate(np.unique(y)):

    plt.scatter(x=x[y == cc, 0],

    y=x[y == cc, 1],

    alpha=0.6,

    c=cmap(idx),

    edgecolor='black',

    marker=markers[idx],

    label=cc)

    三、10行代码实现葡萄酒数据集分类

    sklearn依然实现了LDA类方法,我们只需要直接调用而无需自己实现内部逻辑,这样显得更加方便。所以,10行代码实现也不为过,重点需要先理解内部逻辑原理。

    关键代码如下:

    lda = LDA(n_components=2)

    lr = LogisticRegression()

    x_train_lda = lda.fit_transform(x_train_std, y_train) # LDA是有监督方法,需要用到标签

    x_test_lda = lda.fit_transform(x_test_std, y_test) # 预测时候特征向量正负问题,乘-1反转镜像

    lr.fit(x_train_lda, y_train)

    plot_decision_regions(x_train_pca, y_train, classifier=lr)

    plt.xlabel('LD1')

    plt.ylabel('LD2')

    plt.legend(loc='lower left')

    plt.show()

    使用训练集拟合模型之后,分类效果如何呢?

    可以看到模型对训练数据集精确地分类,比PCA效果好,因为LDA使用了数据集的标签,是有监督的学习。

    更准确来说,我们要看模型在测试集上的效果,对比如下:

    可见,经过逻辑回归分类器,提取了两个最具线性判别性的特征,将包含13个特征的葡萄酒数据集投影到二维子空间,实现了精确地分类。

    四、完整代码

    from sklearn.linear_model import LogisticRegression

    from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA

    from sklearn.preprocessing import StandardScaler

    from sklearn.model_selection import train_test_split

    from matplotlib.colors import ListedColormap

    import matplotlib.pyplot as plt

    import pandas as pd

    import numpy as np

    def plot_decision_regions(x, y, classifier, resolution=0.02):

    markers = ['s', 'x', 'o', '^', 'v']

    colors = ['r', 'g', 'b', 'gray', 'cyan']

    cmap = ListedColormap(colors[:len(np.unique(y))])

    x1_min, x1_max = x[:, 0].min() - 1, x[:, 0].max() + 1

    x2_min, x2_max = x[:, 1].min() - 1, x[:, 1].max() + 1

    xx1, xx2 = np.meshgrid(np.arange(x1_min, x1_max, resolution), np.arange(x2_min, x2_max, resolution))

    z = classifier.predict(np.array([xx1.ravel(), xx2.ravel()]).T)

    z = z.reshape(xx1.shape)

    plt.contourf(xx1, xx2, z, alpha=0.4, cmap=cmap)

    for idx, cc in enumerate(np.unique(y)):

    plt.scatter(x=x[y == cc, 0],

    y=x[y == cc, 1],

    alpha=0.6,

    c=cmap(idx),

    edgecolor='black',

    marker=markers[idx],

    label=cc)

    def main():

    # load data

    df_wine = pd.read_csv('D:\\PyCharm_Project\\maching_learning\\wine_data\\wine.data', header=None) # 本地加载

    # df_wine = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data',

    # header=None) # 服务器加载

    # split the data,train:test=7:3

    x, y = df_wine.iloc[:, 1:].values, df_wine.iloc[:, 0].values

    x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, stratify=y, random_state=0)

    # standardize the feature 标准化单位方差

    sc = StandardScaler()

    x_train_std = sc.fit_transform(x_train)

    x_test_std = sc.fit_transform(x_test)

    lda = LDA(n_components=2)

    lr = LogisticRegression()

    x_train_lda = lda.fit_transform(x_train_std, y_train) # LDA是有监督方法,需要用到标签

    x_test_lda = lda.fit_transform(x_test_std, y_test) # 预测时候特征向量正负问题,乘-1反转镜像

    lr.fit(x_train_lda, y_train)

    plt.figure(figsize=(6, 7), dpi=100) # 画图高宽,像素

    plt.subplot(2, 1, 1)

    plot_decision_regions(x_train_lda, y_train, classifier=lr)

    plt.title('Training Result')

    plt.xlabel('LD1')

    plt.ylabel('LD2')

    plt.legend(loc='lower left')

    plt.subplot(2, 1, 2)

    plot_decision_regions(x_test_lda, y_test, classifier=lr)

    plt.title('Testing Result')

    plt.xlabel('LD1')

    plt.ylabel('LD2')

    plt.legend(loc='lower left')

    plt.tight_layout() # 子图间距

    plt.show()

    if __name__ == '__main__':

    main()

    五、降维压缩数据技术总结

    至此,数据降维压缩的技术学习告一段落,经过这次学习,我感觉到一次比较系统的学习会收获更多,此次学习了主成分分析(PCA)和线性判别分析(LDA),这两种经典的数据降维技术各有特点。

    前者是无监督技术,忽略分类标签,寻找最大化方差方向提取主成分;后者是有监督技术,训练时候考虑分类标签,在线性特征空间最大化类的可分性。应用场景也各有优势,PCA在图像识别应用好,LDA在特征提取方面更有优势。

    这里列出这次学习过程的博文记录,方便查找:

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。

    机器学习 —— 基础整理(四)特征提取之线性方法:主成分分析PCA、独立成分分析ICA、线性判别分析LDA

    本文简单整理了以下内容: (一)维数灾难 (二)特征提取--线性方法 1. 主成分分析PCA 2. 独立成分分析ICA 3. 线性判别分析LDA (一)维数灾难(Curse of dimensiona ...

    机器学习理论基础学习3.2--- Linear classification 线性分类之线性判别分析(LDA)

    在学习LDA之前,有必要将其自然语言处理领域的LDA区别开来,在自然语言处理领域, LDA是隐含狄利克雷分布(Latent Dirichlet Allocation,简称LDA),是一种处理文档的主题 ...

    线性判别分析LDA原理总结

    在主成分分析(PCA)原理总结中,我们对降维算法PCA做了总结.这里我们就对另外一种经典的降维方法线性判别分析(Linear Discriminant Analysis, 以下简称LDA)做一个总结. ...

    线性判别分析LDA详解

    1 Linear Discriminant Analysis    相较于FLD(Fisher Linear Decriminant),LDA假设:1.样本数据服从正态分布,2.各类得协方差相等.虽然 ...

    线性判别分析 LDA

    点到判决面的距离 点\(x_0\)到决策面\(g(x)= w^Tx+w_0\)的距离:\(r={g(x)\over \|w\|}\) 广义线性判别函数 因任何非线性函数都可以通过级数展开转化为多项式函 ...

    机器学习中的数学-线性判别分析(LDA)

    前言在之前的一篇博客机器学习中的数学(7)——PCA的数学原理中深入讲解了,PCA的数学原理.谈到PCA就不得不谈LDA,他们就像是一对孪生兄弟,总是被人们放在一起学习,比较.这这篇博客中我们就来谈谈 ...

    主成分分析(PCA)与线性判别分析(LDA)

    主成分分析 线性.非监督.全局的降维算法 PCA最大方差理论 出发点:在信号处理领域,信号具有较大方差,噪声具有较小方差 目标:最大化投影方差,让数据在主投影方向上方差最大 PCA的求解方法: 对样本 ...

    LDA线性判别分析原理及python应用(葡萄酒案例分析)

    目录 线性判别分析(LDA)数据降维及案例实战 一.LDA是什么 二.计算散布矩阵 三.线性判别式及特征选择 四.样本数据降维投影 五.完整代码 结语 一.LDA是什么 LDA概念及与PCA区别 LD ...

    线性判别分析(LDA)准则:FIsher准则、感知机准则、最小二乘(最小均方误差)准则

    准则 采用一种分类形式后,就要采用准则来衡量分类的效果,最好的结果一般出现在准则函数的极值点上,因此将分类器的设计问题转化为求准则函数极值问题,即求准则函数的参数,如线性分类器中的权值向量. 分类器设 ...

    随机推荐

    R平方

    参考其他网页 通常R2越大越好,但看到亦在后面标上P值,这两者之间有何联系? R2和p值没有必然联系.就像你做线性分析和(单因素或多因素)方差分析一样,若A和K线性相关,也有可能A对K么有显著性影响一 ...

    【转】mysql安装图解

    转载地址:http://www.jb51.net/article/23876.htm 很多朋友刚开始接触mysql数据库服务器,下面是网友整理的一篇mysql的安装教程,步骤明细也有详细的说明.   ...

    PHP导出数据库数据字典脚本

    MD中bitmap源代码分析--状态机实例

    1. page_attrs的状态转换关系 之前说过,bitmap的优化核心是:bitmap设置后批量写入:bitmap延时清除.写bit用bitmap_statrwrite() + bitmap_un ...

    jmeter 通过ant集成到jenkins

    jmeter可以通过ant自动执行测试脚本,然后集成到jenkins上,并发送测试报告 1.下载安装ant 2.将jmeter安装包extras文件夹里ant-jemter-1.1.1.jar 复制到 ...

    Java面试题之Java基础

    1. JDK 和 JRE 有什么区别? JRE(JavaRuntimeEnvironment,Java运行环境),也就是Java平台.所有的Java 程序都要在JRE下才能运行.普通用户只需要运行已开 ...

    cs架构与bs架构的对比

    主要区别: Client/Server是建立在局域网的基础上的.Browser/Server是建立在广域网的基础上的. 1.硬件环境不同 C/S 一般建立在专用的网络上, 小范围里的网络环境, 局域网 ...

    阿里巴巴Web前端面试的一道JS题目,求解答!!!

    题目大概是这种: function outer(){ return inner; var inner = "a"; function inner(){}; inner = 9; } ...

    喵哈哈村的魔法考试 Round #13 (Div.2) 题解

    喵哈哈村的木星传说(一) 旋转90°,找找规律就知道(x,y)->(n-1-y,x) 然后输出就好了. #include using namespace ...

    Lua协程-测试3

    print("Lua 协程测试3") -- 实现消费者-生产者关系(生产一个就消费一个) count = -- 生产总数 -- 生产者 local newProductorCo = ...

    展开全文
  • 前言为什么要进行数据降维?直观地好处是维度降低了,便于计算...降维方法分为线性和非线性降维,非线性降维又分为基于核函数和基于特征值的方法(流形学习),代表算法有线性降维方法:PCA ICA LDA LFA基于核的非线性...

    前言

    为什么要进行数据降维?直观地好处是维度降低了,便于计算和可视化,其深层次的意义在于有效信息的提取综合及无用信息的摈弃,并且数据降维保留了原始数据的信息,我们就可以用降维的数据进行机器学习模型的训练和预测,但将有效提高训练和预测的时间与效率。

    降维方法分为线性和非线性降维,非线性降维又分为基于核函数和基于特征值的方法(流形学习),代表算法有

    线性降维方法:PCA ICA LDA LFA

    基于核的非线性降维方法KPCA KFDA

    流形学习:ISOMAP LLE LE LPP

    本文主要对线性降维方法中的PCA、ICA、LDA的Python实现进行讲解。

    请注意本文将不对各种数据降维方法的原理与理论推导过程做过多的讲解,旨在用尽可能少的语言说清楚以及如何用Python实现,先实现再理解,并在读完代码之后自行查阅相关文献理解其不同的思想。但读者应具有一定的统计学、代数学、机器学习的基础。

    主成分分析PCA

    主成分分析(Principal Component Analysis),是一种常用的数据降维方法。通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量,转换后的这组变量就叫主成分。关于主成分分析的思想与理论推导过程在互联网上很容易找到完美的证明,用人话说来就是找到一个轴,将你的数据映射到这个轴上之后所计算的方差最大,再换句人话说就是从原始数据的一堆变量中提取出一部分变量,而这部分变量能完美解释原始数据中包含的信息(或保留原始的数据特性)

    注意:

    进行主成分分析前需对数据进行归一化处理

    PCA流程:

    对数据行归一化处理

    计算归一化后的数据集的协方差矩阵与其特征值、特征向量

    对特征值从大到小排序并保留最大的个特征向量

    将数据转换到个特征向量构建的新空间中

    优点:

    无参数限制

    提取了主要信息并且结果容易理解

    缺点:

    方差小的主成分可能含有对样本差异的重要信息

    在某些情况下,PCA方法得出的主元可能并不是最优的

    相关Python代码

    sklearn.decomposition.PCA

    Python实现示例(已注释)

    #来看个官网最简单的例子

    >>> import numpy as np

    >>> from sklearn.decomposition import PCA

    #创建数据 矩阵形式

    >>> X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])

    #设定两个主成分

    >>> pca = PCA(n_components=2)

    #用X训练

    >>> pca.fit(X)

    PCA(n_components=2)

    #查看每个主成分解释程度

    >>> print(pca.explained_variance_ratio_)

    [0.9924... 0.0075...]

    >>> print(pca.singular_values_)

    [6.30061... 0.54980...]

    #降维

    >>> pca = PCA(n_components=1, svd_solver='arpack')

    >>> pca.fit(X)

    PCA(n_components=1, svd_solver='arpack')

    >>> print(pca.explained_variance_ratio_)

    [0.99244...]

    >>> print(pca.singular_values_)

    [6.30061...]

    线性判别分析LDA

    线性判别分析(Linear Discriminant Analysis)是一种有监督的(supervised)线性降维算法。与PCA保持数据信息不同,LDA的核心思想:往线性判别超平面的法向量上投影,使得区分度最大(高内聚,低耦合)。LDA是为了使得降维后的数据点尽可能地容易被区分!

    与PCA比较

    PCA为无监督降维,LDA为有监督降维

    LDA降维最多降到类别数K-1的维数,PCA没有这个限制。

    PCA希望投影后的数据方差尽可能的大(最大可分性),而LDA则希望投影后相同类别的组内方差小,而组间方差大。

    相关Python代码

    sklearn.discriminant_analysis.LinearDiscriminantAnalysis

    Python实现示例(已注释)

    import numpy as np

    import matplotlib.pyplot as plt

    from mpl_toolkits.mplot3d import Axes3D

    %matplotlib inline

    from sklearn.datasets.samples_generator import make_classification

    #生成数据

    X, y = make_classification(n_samples=1000, n_features=3, n_redundant=0, n_classes=3, n_informative=2,

    n_clusters_per_class=1,class_sep =0.5, random_state =10)

    #LDA降维

    from sklearn.discriminant_analysis import LinearDiscriminantAnalysis

    lda = LinearDiscriminantAnalysis(n_components=2)

    lda.fit(X,y)

    X_new = lda.transform(X)

    plt.scatter(X_new[:, 0], X_new[:, 1],marker='o',c=y)

    plt.show()

    独立成分分析ICA

    独立成分分析(Independent component analysis)是一种利用统计原理进行计算的方法,它是一个线性变换,这个变换把数据或信号分离成统计独立的非高斯的信号源的线性组合。之前介绍的PCA、LDA都是以观测数据点呈高斯分布模型为基本假设前提的,而ICA将适用于非高斯分析数据集,是PCA的一种有效扩展。

    与PCA比较

    ICA寻找的是最能使数据的相互独立的方向,而PCA仅要求方向是不相关的

    PCA认为主元之间彼此正交,样本呈高斯分布;ICA则不要求样本呈高斯分布

    相关Python代码

    sklearn.decomposition.FastICA

    Python实现示例(已注释)

    import numpy as np

    import matplotlib.pyplot as plt

    from scipy import signal

    from sklearn.decomposition import FastICA, PCA

    # 生成观测模拟数据

    np.random.seed(0)

    n_samples = 2000

    time = np.linspace(0, 8, n_samples)

    s1 = np.sin(2 * time) # 信号源 1 : 正弦信号

    s2 = np.sign(np.sin(3 * time)) # 信号源 2 : 方形信号

    s3 = signal.sawtooth(2 * np.pi * time) # 信号源 3: 锯齿波信号

    S = np.c_[s1, s2, s3]

    S += 0.2 * np.random.normal(size=S.shape) # 增加噪音数据

    S /= S.std(axis=0) # 标准化

    # 混合数据

    A = np.array([[1, 1, 1], [0.5, 2, 1.0], [1.5, 1.0, 2.0]]) # 混合矩阵

    X = np.dot(S, A.T) # 生成观测信号源

    # ICA模型

    ica = FastICA(n_components=3)

    S_ = ica.fit_transform(X) # 重构信号

    A_ = ica.mixing_ # 获得估计混合后的矩阵

    # PCA模型

    pca = PCA(n_components=3)

    H = pca.fit_transform(X) # 基于PCA的成分正交重构信号源

    # 图形展示

    plt.figure()

    models = [X, S, S_, H]

    names = ['Observations (mixed signal)',

    'True Sources',

    'ICA recovered signals',

    'PCA recovered signals']

    colors = ['red', 'steelblue', 'orange']

    for ii, (model, name) in enumerate(zip(models, names), 1):

    plt.subplot(4, 1, ii)

    plt.title(name)

    for sig, color in zip(model.T, colors):

    plt.plot(sig, color=color)

    plt.subplots_adjust(0.09, 0.04, 0.94, 0.94, 0.26, 0.46)

    plt.show()

    以上就是早起的统计工具箱第二期的内容,当然想要完全学会还需要自行查阅更多文献,而更多的数据降维方法、还有上一期未介绍完的python统计检验我们之后再聊。

    展开全文
  • 前言为什么要进行数据降维?直观地好处是维度降低了,便于计算和...降维方法分为线性和非线性降维,非线性降维又分为基于核函数和基于特征值的方法(流形学习),代表算法有线性降维方法:PCA ICA LDA LFA基于核的非...
  • python实现数据降维

    2020-09-28 17:06:37
    1. python实现数据降维 数据降维的情况: 1.维度数量 2.建模是否需要保留原始维度,保留:特征选择;不保留:特征转化(PCA,LDA) 3.对模型的计算效率和时效性 降维的方式:特征选择,特征转换,特征组合 import ...
  • 直观地好处是维度降低了,便于计算和可视化,其深层次的意义在于有效信息的提取综合及无用信息的摈弃,并且数据降维保留了原始数据的信息,我们就可以用降维的数据进行机器学习模型的训练和预测,但将有效提高训练和...
  • python(一)降维算法

    千次阅读 2020-05-30 14:47:26
    降维算法简介很多算法可以回归也可以分类降维算法PCA降维(主成分分析)LDA降维(线性判别分析)MDS降维(多维标度法)流形学习Isomap 简介 很多算法可以回归也可以分类 把连续值变为离散值: 1.回归模型可以做分类...
  • 前言为什么要进行数据降维?直观地好处是维度降低了,便于计算和可视化,其深...降维方法分为线性和非线性降维,非线性降维又分为基于核函数和基于特征值的方法(流形学习),代表算法有线性降维方法:PCA ICA LDA LFA...
  • Python实现降维和聚类

    万次阅读 2016-11-15 10:14:34
    主成分分析(Principal components ...在写这篇之前,我阅读了PCA、SVD和LDA。这几个模型相近,却都有自己的特点。本篇打算先介绍PCA,至于他们之间的关系,只能是边学边体会了。PCA以前也叫做Principal factor ana
  • 但是在大多数情况下,许多特征之间存在关系,从而增加了模型的复杂性,对数据分析带来不便。如果对每个特征进行分析,信息会被孤立。而且减少特征信息, 也很容易产生错误的结论。 为了能够减少分析特征的同时,对...
  • 线性模型 一、内容 1.基本形式 2.线性回归:均方误差是回归任务中最常用的性能度量 3.对数几率回归:对数几率函数(logistic function)对率...4.线性判别分析(LDA 是一种降维的方法) 5.多分类学习: 5.1...
  • 实际工作中,待测数据可能已知,也可能未知 逻辑回归整体最优(最高准度第2,平均准度第1,结果稳定,速度ok) 独热编码优于词向量 独热编码tfidf优于count 线性svm训练时间过长,结果不稳定 ...主题模型LDA是垃圾
  • LDA前言基本思想python 实现 前言     线性判别分析(Linear Discriminant Analysis,LDA)是一种经典的线性分类方法。而机器学习中还有一种用于NLP主题模型建模的潜在狄利克雷分布(Latent Dirichlet ...
  • Part1 训练机器学习的分类算法 Part2 通过sklearn了解分类算法(perceptron,logistic regression,svm,decision tree) Part3 建立好的训练集-数据预处理...Part4 数据压缩和降维(PCA,LDA) Part5 模型评估和超参数
  • Python数据挖掘课程】七.PCA降维操作及subplot子图绘制 【Python数据挖掘课程】八.关联规则挖掘及Apriori实现购物推荐 【Python数据挖掘课程】九.回归模型LinearRegression简单分析氧化物数据 【python数据挖掘...
  • 分类算法回归算法聚类算法降维算法文本挖掘算法模型优化数据预处理最后再说明一下可能不支持的算法(也可能是我没找到,但有其他模块可以实现)分类算法线性判别分析(LDA)>>> from sklearn.discriminant_...
  • LDA进行监督数据压缩 原始数据映射到新特征空间 使用核PCA进行非线性映射 用Python实现核PCA 映射新的数据点 sklearn中的核PCA 总结 第六章 模型评估和调参 通过管道创建工作流 K折交叉验证评估模型性能 使用学习...
  • 1、tfidf 2、Summarization 特点是主题模型lda什么的宝宝也不懂啊,第一反应就是又来降维也是醉了~~心疼地抱住我寄几~~
  • xxx

    2015-05-19 15:54:01
    1、LU 分解 2、SVD分解 3、PCA降维 4、EM优化 5、BFGS、LBFGS、vector-free LBGS 6、LR线性回归 GLS OLS 7、SVM 8、Kmeans 层次聚类 谱聚类 9、RF random foreast ...15、LDA主题模型 16、R Python 机器学习库 ...
  • AI学习知识点.xmind

    2019-07-15 17:54:33
    古典模型 常见的概率分布 大数定理和中心极限定理 协方差和相关系数 最大似然估计和最大后验估计 凸优化 凸优化的基本概念 凸函数 凸集 凸优化问题的标准形式 线性代数及矩阵 线性空间及线性变化 矩阵...
  • 机器学习课程-源码

    2021-02-18 19:02:42
    机器学习课程(Python / R) 第1部分-数据预处理 第2部分-回归:简单线性回归,多重线性回归,多项式回归,...第9部分-降维:PCA,LDA,内核PCA 第10部分-模型选择和增强:k折交叉验证,参数调整,网格搜索,XGBoost
  • 降维(PCA,LDA,因子分析) 自然语言处理 神经网络 推荐系统 强化学习 异常检测 链接 屏幕截图 为什么本备忘单未涵盖Python / SQL? 我计划将此资源主要涵盖算法,模型和概念,因为这些算法,模型和概念很少更改...
  • sklearn0.19中文文档

    2018-10-30 15:03:21
    1.2.3. LDA降维数学公式 1.2.4. Shrinkage(收缩) 1.2.5. 预估算法 1.3. 内核岭回归 1.4. 支持向量机 1.4.1. 分类 1.4.1.1. 多元分类 1.4.1.2. 得分和概率 1.4.1.3. 非均衡问题 1.4.2. 回归 1.4.3. 密度估计, ...

空空如也

空空如也

1 2
收藏数 26
精华内容 10
关键字:

lda模型降维python

python 订阅