基于Sklearn实现LDA算法

2023-11-01

一、LDA算法

1.线性判别分析(Linear Discriminant Analysis, LDA)方法常被用于数据预处理中的降维(dimensionality reduction)步骤。LDA在保证良好的类别区分度的前提下,将数据集向更低维空间投影,以求在避免过拟合(“维数灾难”)的同时,减小计算消耗。

2.计算步骤

  1. 计算数据集中不同类别数据的 d 维均值向量。
  2. 计算散布矩阵,包括类间、类内散布矩阵。
  3. 计算散布矩阵的特征向量 e1,e2,…,ed 和对应的特征值 λ1,λ2,…,λd。
  4. 将特征向量按特征值大小降序排列,然后选择前 k 个最大特征值对应的特征向量,组建一个 d×k 维矩阵——即每一列就是一个特征向量。
  5. 用这个 d×k-维特征向量矩阵将样本变换到新的子空间。这一步可以写作矩阵乘法 Y=X×W 。 X 是 n×d 维矩阵,表示 n 个样本; y 是变换到子空间后的 n×k 维样本。

二、sklearn实现LDA

1.导入包

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

2.定义可视化函数用于结果展示

#可视化函数
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)

3.拟合数据

#数据集来源
data = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data',header=None)

#切割数据集
#x数据
#y标签
x, y = data.iloc[:, 1:].values, data.iloc[:, 0].values

#按照8:2比例划分训练集和测试集
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, stratify=y, random_state=0)

#标准化单位方差
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)
#测试
x_test_lda = lda.fit_transform(x_test_std, y_test)
#拟合
lr.fit(x_train_lda, y_train)

4.结果展示

# 画图高宽,像素
plt.figure(figsize=(6, 7), dpi=100)  
plot_decision_regions(x_train_lda, y_train, classifier=lr)
plt.show()

三、结果如图

在这里插入图片描述

四、总结

LDA优点:

  • LDA在样本分类信息依赖均值而不是方差的时候,比PCA分类的算法更优
  • 在降维过程中可以使用类别的先验知识经验,而像PCA这样的无监督学习则无法使用类别先验知识

LDA缺点:

  • LDA与PCA都不适合对非高斯分布的样本进行降维
  • LDA降维最多降到类别数K-1的维数
  • LDA在样本分类信息依赖方差而不是均值的时候降维效果不好
  • LDA可能过度拟合数据

五、参考

https://blog.csdn.net/Charzous/article/details/108064317

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于Sklearn实现LDA算法 的相关文章

随机推荐

  • linux 动态库 段错误,dlopen加载so动态链接库出现段错误的问题

    so库中暴露出来的函数 写在某基类头文件中 大体如下 ifdef cplusplus extern C endif Object construct return new Object void destroy Object object
  • Linux操作系统基础知识学习

    Q1 什么是GNU Linux与GNU有什么关系 A 1 GNU是GNU is Not Unix的递归缩写 是自由软件基金会 Free Software Foundation FSF 的一个项目 该项目已经开发了许多高质量的编程工具 包括e
  • STM32串口调试一直打印 00 00

    在STM32串口调试过程中 通过printf函数往串口打印英文字母 串口助手却一直收到 00 凭直觉 这种情况一般都是时钟没配置好 但是查代码很难找到原因 经过反复查找 发现是STM32CubeMX中时钟源选择错误 就是下面这个地方 切记一
  • Go 语言运行时环境变量快速导览

    原文 http dave cheney net 2015 11 29 a whirlwind tour of gos runtime environment variables Go 语言运行时环境变量快速导览 介绍 Go Runtime除
  • ubuntu 打包deb并带有安装目录

    0 简介 当在ubuntu下开发了一个工程 期望以deb包的形式发布出去的时候 会涉及到打包操作 基本指令是 dpkg b
  • docker registry2 仓库搭建与使用

    docker registry2 仓库搭建与使用 docker pull registry 1 docker io distribution registry 2 1 1 以TLS证书认证启动docker registry2 产生证书 mk
  • hibernate关联关系

    前言 今天要分享的知识是hibernate框架的关联关系 码字不易 点个赞 转载请说明 开发工具 eclipse 目录 一 一对多的配置 二 懒加载 1 定义 懒加载可以这样理解 只加载某一项东西 其他的东西不会加载 2 操作 在我们进行项
  • 问题解决:WSL2 中进行 apt-get-update 失败

    WSL2 子系统在一些操作上还是很方便的 但因为有些配置和 Windows 共用的原因 总会出现这样那样的问题 比如今天安装 Redis 的时候需要提前进行包更新 结果却报错 Failed to fetch 这个问题的出现我首先是考虑国外源
  • Error: JAVA_HOME is not set

    启动Hadoop时显示这句话 解决方法 通过echo JAVA HOME找到java安装目录 在hadoop的配置目录etc hadoop中 我的是 usr local hadoop etc hadoop 修改hadoop env sh配置
  • jenkins - Manage and Assign Roles

    Role Strategy Plugin 插件 针对多个project进行权限控制 访问 上几张图 希望你能看明白 哈哈 1 png 710dba0dgy1fkgqp3cze1j219g0kmn24 jpg 710dba0dgy1fkgqp
  • MySQL查询语句in子查询的优化

    项目中有需要 使用MySQL的in子查询 查询符合in子查询集合中条件的数据 但是没想到的是 MySQL的in子查询会如此的慢 让人无法接收 于是上网搜索解决办法 下面记录下 一 原始in子查询 SELECT FROM basic zdjb
  • Ubuntu系统上安装WPS

    前言 在Ubuntu系统下 想使用WPS的功能 觉得用起来更加方便 所以在此记录一下安装的步骤 记录两种安装方法 方法一 Ubuntu Software中搜索WPS 如图所示 在Ubuntu Software中搜索WPS 可能需要稍等一会再
  • python使用局部敏感性哈希算法,在海量数据中查询相似序列

    文章目录 一 原生python实现 二 第三方库datasketch使用 1 官方示例 2 LSH算法 3 MinHashLSHForest 局部敏感性哈希是指 相似的哈希具有相似的原始序列 整体思路 首先将数据装在不同的桶里 通过桶之间的
  • 2023国赛数学建模思路 - 案例:随机森林

    文章目录 1 什么是随机森林 2 随机深林构造流程 3 随机森林的优缺点 3 1 优点 3 2 缺点 4 随机深林算法实现 建模资料 0 赛题思路 赛题出来以后第一时间在CSDN分享 https blog csdn net dc sinor
  • 隐私计算S2赛季-谁是真正的王者

    去年至今 隐私计算大约经历了如火如荼的一年 身为局中人 看穿居中事 道尽居中话 为的无非是让更多的来了解这个比较细分的AI领域 秋天本是硕果累累的丰收季 隐私计算这个行业算是金秋吗 一喜一悲 一喜为百花齐放 我所知道在布 挂 局 钩 隐私计
  • VL53L0X调试总结

    最近调VL53L0X花了不少时间 特总结下 https www st com content st com en search html q vl53l t products page 1 VL53L0X测距2m VL53L1X测距4m 支
  • networkx 中文学习手册

    文章目录 创建图表 节点 边 检查图的元素 从图中删除元素 使用图构造函数 什么用作节点和边 访问边和邻居 向图 节点和边添加属性 图形属性 节点属性 边缘属性 多图 图生成器和图操作 1 应用经典的图操作 例如 2 使用对经典小图之一的调
  • Harmony OS WiFi编程——连接热点、创建热点

    本节主要介绍如何在HiSpark WiFi IoT套件上使用Hamony OS的WiFi相关编程接口 相关知识点 WiFi的工作模式 AP模式 热点模式 提供无线接入服务 允许其它无线设备接入 提供数据访问 一般的无线路由 网桥工作在该模式
  • JavaNote 1.7final、finally、访问权限

    一 final 1 final的变量的值不能被改变 2 final的方法不能被重写 3 final的类不能被继承 二 finally finally 语句块 必须执行 通常在finally语句块中执行资源清除工作 如关闭打开的文件 删除临时
  • 基于Sklearn实现LDA算法

    文章目录 一 LDA算法 二 sklearn实现LDA 三 结果如图 四 总结 五 参考 一 LDA算法 1 线性判别分析 Linear Discriminant Analysis LDA 方法常被用于数据预处理中的降维 dimension