`
huangyongxing310
  • 浏览: 490622 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

LDA降维和分类

 
阅读更多
LDA降维和分类




LDA可以降维和分类
LinearDiscriminantAnalysis(LDA):
就是将多维的样本数据集映射到一个坐标轴上(可以是多维的(以降维作为目的)),使得样本数据可以在这个坐标轴上就可以进行分类,和最小的类内距离,投影后使样本在新的子空间有最大的类间距离即样本在该空间中有最佳的可分离性。(即用这个坐标系就可以进行样本分类了,以达到计算简单,减小计算时间)
分类前的降维
LDA降维:是为了在坐标轴上的同类更集中,异类更分散

# coding=utf-8

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn import datasets
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
import numpy as np


def main():
    np.random.seed(0)
    # 设置随机种子,不设置的话默认是按系统时间作为参数,因此每次调用随机模块时产生的随机数都不一样设置后每次产生的一样
    iris = datasets.load_iris()
    # 导入鸢尾花的数据集,iris是一个类似于结构体的东西,内部有样本数据,如果是监督学习还有标签数据
    iris_x = iris.data
    # 样本数据150*4二维数据,代表150个样本,每个样本4个属性分别为花瓣和花萼的长、宽
    iris_y = iris.target
    # 长150的以为数组,样本数据的标签
    indices = np.random.permutation(len(iris_x))
    # permutation接收一个数作为参数(150),产生一个0-149一维数组,只不过是随机打乱的,当然她也可以接收一个一维数组作为参数,结果是直接对这个数组打乱
    iris_x_train = iris_x[indices[:-10]]
    # 随机选取140个样本作为训练数据集
    iris_y_train = iris_y[indices[:-10]]

    # 并且选取这140个样本的标签作为训练数据集的标签
    iris_x_test = iris_x[indices[-10:]]
    # 剩下的10个样本作为测试数据集

    iris_y_test = iris_y[indices[-10:]]

    # 降为2维进行分类
    lda = LinearDiscriminantAnalysis(n_components=2)
    lda.fit(iris_x_train, iris_y_train)

    # 显示训练结果
    print("lda.means_")
    print(lda.means_)  # 中心点
    print("score")
    print(lda.score(iris_x_test, iris_y_test))  # score是指分类的正确率
    print("lda.scalings_")
    print(lda.scalings_)  # score是指分类的正确率

    X_2d_test = lda.transform(iris_x_test)
    print("X_2d_test")
    print(X_2d_test)  # score是指分类的正确率

    # 降维后进行训练
    X_2d = lda.transform(iris_x_train)  # 现在已经降到二维X_2d=np.dot(X-lda.xbar_,lda.scalings_)
    lda.fit(X_2d, iris_y_train)

    # 降维后预测
    predict_y = lda.predict(X_2d_test)

    print("predict_y")
    print(predict_y)  #
    # [1 2 1 0 0 0 2 1 2 0]

    print("iris_y_test")
    print(iris_y_test)  #
    # [1 1 1 0 0 0 2 1 2 0]

    # # 对于二维数据,我们做个可视化
    # # 区域划分
    # # lda.fit(X_2d, iris_y_test)
    h = 0.02
    # 得到最大值和最小值
    x_min, x_max = X_2d[:, 0].min() - 1, X_2d[:, 0].max() + 1
    y_min, y_max = X_2d[:, 1].min() - 1, X_2d[:, 1].max() + 1
    # 网格数据
    xx, yy = np.meshgrid(np.arange(x_min, x_max, h),
                         np.arange(y_min, y_max, h))

    predict_x = np.c_[xx.ravel(), yy.ravel()]
    print("predict_x")
    print(predict_x)  #

    Z = lda.predict(predict_x)
    print("Z")
    print(Z)  #
    # [2 2 2... 0 0 0]

    #变为与XX的维数相同
    Z = Z.reshape(xx.shape)
    print("Z")
    print(Z)  #

    # contour和contourf都是画三维等高线图的,不同点在于contourf会对等高线间的区域进行填充,
    plt.contourf(xx, yy, Z, cmap=plt.cm.Paired)
    #
    # 做出原来的散点图
    class1_x = X_2d[iris_y_train == 0, 0]#得到iris_y_train == 0的数组X,布尔索引
    class1_y = X_2d[iris_y_train == 0, 1]#得到iris_y_train == 0的数组Y
    l1 = plt.scatter(class1_x, class1_y, color='b', label=iris.target_names[0])
    class1_x = X_2d[iris_y_train == 1, 0]
    class1_y = X_2d[iris_y_train == 1, 1]
    l2 = plt.scatter(class1_x, class1_y, color='y', label=iris.target_names[1])
    class1_x = X_2d[iris_y_train == 2, 0]
    class1_y = X_2d[iris_y_train == 2, 1]
    l3 = plt.scatter(class1_x, class1_y, color='r', label=iris.target_names[2])

    plt.legend(handles=[l1, l2, l3], loc='best')

    plt.grid(True)
    plt.show()


if __name__ == '__main__':
    main()




# coding=utf-8

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn import datasets
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
import numpy as np


def main():
    data=np.array([[1,1],[2,2],[1.5,1.5],[3,3],[2,3],[1,5]])

    X = data[:, 0].reshape(-1, 1)  # 将array转换成矩阵(变成n行1列)
    y = data[:, 1].reshape(-1, 1)

    print("X=", X)
    print("y=", y)
    # 画相关的点
    plt.plot(X, y, "b.")
    plt.xlabel('X')
    plt.ylabel('y')
    plt.show()

    z_train = [0,0,0,1,1,1]

    lda = LinearDiscriminantAnalysis(n_components=2)
    lda.fit(data, z_train)
    predict_y = lda.predict([[2,1.5]])
    print('predict_y', predict_y)  # 中心点

    train_lda_X = lda.transform(data)
    print("train_lda_X ", train_lda_X)
    print("截距: ", lda.intercept_)
    print("系数: ", lda.coef_)


    # 显示训练结果
    # print(lda.means_)  # 中心点
    # print(lda.score(X_test, Y_test))  # score是指分类的正确率
    # print(lda.scalings_)  # score是指分类的正确率

    # predict_y = lda.predict([2,1.5])
    # print("predict_y: ", predict_y)







if __name__ == '__main__':
    main()


分享到:
评论

相关推荐

    LDA.zip_LDA降维_lda 降维_有监督降维_降维

    - **预处理步骤**:在分类和回归任务中作为预处理步骤,提高模型性能。 - **模式识别**:在图像识别、文本分类等任务中,LDA可以帮助提取关键特征。 **5. LDA与PCA(主成分分析)的对比** 虽然PCA也是常见的降维...

    lda.rar_LDA空间_LDA降维_特征 降维_特征值降维_矩阵降维

    LDA降维的过程通常包括以下几个步骤: 1. **计算均值**:首先,我们需要计算每个类别的样本均值。 2. **计算协方差**:接着,计算总体协方差矩阵或类内协方差矩阵,这取决于我们是执行线性判别还是降维。 3. **求解...

    LDA降维经典程序

    - `Jonathan Huang`可能包含一个完整的LDA降维程序,包括数据读取、预处理、LDA算法实现以及结果可视化等步骤。具体代码细节需要查看文件内容才能了解。 - 通常,一个简单的LDA实现可能会包括以下结构: ```...

    LDA与降维后的LDA在人脸识别中的应用

    为了解决上述挑战,研究者们提出了降维后的LDA方法,即先通过主成分分析(Principal Component Analysis,简称PCA)进行降维,再在降维后的空间中应用LDA进行特征提取和分类。PCA是一种无监督的降维技术,它能够找到...

    基于matlab的PCA特征提取,归一化PCA特征提取,LDA特征提取以及归一化LDA特征提取四种算法的数据分类对比+操作视频

    3.用处:用于PCA和LDA降维特征提取算法编程学习 4.指向人群:本硕博等教研学习使用 5.运行注意事项: 使用matlab2021a或者更高版本测试,运行里面的Runme_.m文件,不要直接运行子函数文件。运行时注意matlab左侧...

    Matlab Toolbox for Dimensionality Reduction.zip_LDA降维_lda_pca_数据

    MATLAB平台下的这个工具包提供了一个便捷的接口,让用户能够轻松地实现PCA和LDA降维。它可能包括预处理函数(如数据标准化)、降维函数(PCA和LDA实现)、可视化工具(帮助理解降维结果)以及评估指标(如分类准确率...

    LLE.zip_LDA降维_PCA的降维_lle_lle降维_pca降维

    综合来看,PCA适用于线性关系显著的数据,而LLE和LDA在处理非线性数据时更有优势,LLE尤其适用于保持数据的局部结构,LDA则更注重分类性能。在实际应用中,选择哪种降维方法应根据具体的数据特性和任务需求来决定。...

    人脸表情/微表情识别,毕设作品 使用gabor滤波,pca+lda降维,svm分类 图形界面使用pyqt

    人脸表情/微表情识别,毕设作品。使用gabor滤波,pca+lda降维,svm分类。图形界面使用pyqt。libSVM经过重新编译,可通过设置全局变量OMP_NUM_THREADS来使用多线程训练模型。

    降维算法LDA用于分类

    本资源是机器学习常见方法LDA(线性判别分析)的源码,其主要功能类似于PCA,都属于降维算法。本次实现是依托于项目工程,裁剪掉了图像预处理特征提取部分,是降维算法在分类问题上的一次实现,为Matlab代码实现

    ORL-Tensorflow-master.zip_PCA/LDA降维_TensorFlow 识别_involvedstw_ld

    - LDA处理:使用PCA得到的特征向量,进一步进行LDA降维,以增强类别间的区分度。 - 构建模型:基于TensorFlow创建分类模型,可能包括CNN或其他类型的神经网络。 - 训练与验证:使用PCA-LDA处理后的数据训练模型,...

    特征提取数据降维PCA、LDA、MDS、LLE、TSNE等降维算法的python实现.zip

    2. LDA(线性判别分析):LDA是一种有监督的降维方法,主要应用于分类问题。与PCA不同,LDA的目标不是最大化方差,而是找到最佳的投影方向,使类间距离最大化,类内距离最小化,从而提高分类效果。LDA假设数据服从...

    2D-LDA,对人脸数据降维后识别

    LDA,全称为Linear Discriminant Analysis,其主要目的是通过线性变换找到能够最大化类间距离同时最小化类内距离的特征空间,从而实现数据的有效降维和分类。 在人脸识别的应用中,2D-LDA通常用于处理二维图像数据...

    PCA人脸识别+ORL人脸数据.rar_-baijiahao_ORL人脸图片数据集_orl人脸lda降维_pca_人脸匹配

    在ORL人脸数据集上使用PCA和LDA降维后,可以有效地降低计算复杂度,同时保持识别率。在实际应用中,PCA通常用于初步降维,而LDA作为后续的分类器,以实现更好的人脸识别效果。文件名称“PCA人脸识别+ORL人脸数据”...

    lda降维matlab代码-pel304-pca-mlda:pel304-pca-mlda

    lda降维matlab代码硅Craft.io SiProcess是图像处理实验室存储库。 在这里,您会发现一些Matlab / Python算法可以对数据进行线性分类。 分类 分类代码导入您的数据(矢量化图像的矩阵),使用进行降维,并使用/分隔...

    lda matlab算法

    - **可视化**:可以使用MATLAB的散点图或者主成分分析(PCA)图来直观展示LDA降维后的效果。 3. **`corr_LDA`文件的作用** "corr_LDA"可能是一个MATLAB数据文件,其中包含了计算相关性的LDA结果。在MATLAB中,...

    LDA的降维原理1

    LDA降维后的维度受到类别数限制,最多为k-1维,而PCA没有此限制。此外,LDA不仅可以用于降维,还可用于分类任务,尤其在类别均值差异明显时,LDA的表现优于PCA。 总之,LDA是一种结合了监督信息的降维方法,特别...

    TwoD_LDA_2DLDA_ORL人脸数据_分类_降维_

    在提供的文件"TwoD_LDA.m"中,我们可以预期看到的是一个MATLAB脚本,实现了上述2D LDA的流程,可能包括定义参数、加载ORL数据、执行2D LDA降维以及应用某种分类器进行测试。这个脚本是理解2D LDA如何在实际任务中...

    LDA二分类代码(Matlab实现).zip_LDA 分类_LDA 二分类_LDA二分类_matlab LDA 分类_分类

    LDA,全称为线性判别分析(Linear Discriminant Analysis),是一种统计方法,常用于特征降维和分类问题。在机器学习领域,LDA被广泛应用于预处理步骤,特别是当数据集具有高维特征时,它能帮助我们找到最优的低维...

    pca+lda做特征降维snn分类器对数据进行分类

    pca+lda做特征降维snn分类器对数据进行分类,协同神经网络做模式识别,pca对整体原始数据进行降维处理,然后构造随机子空间分类器snn分类,效果不错

    人脸表情 / 微表情识别,毕业设计.zip

    人脸表情/微表情识别,可用于毕设,使用gabor滤波,pca+lda降维,svm分类。图形界面使用pyqt。libSVM经过重新编译,可通过设置全局变量OMP_NUM_THREADS来使用多线程训练模型。 人脸表情/微表情识别,可用于毕设,...

Global site tag (gtag.js) - Google Analytics