基于Sklearn实现LDA算法
文章目录
- 一、LDA算法
- 二、sklearn实现LDA
- 三、结果如图
- 四、总结
- 五、参考
一、LDA算法
1.线性判别分析(Linear Discriminant Analysis, LDA)方法常被用于数据预处理中的降维(dimensionality reduction)步骤。LDA在保证良好的类别区分度的前提下,将数据集向更低维空间投影,以求在避免过拟合(“维数灾难”)的同时,减小计算消耗。
2.计算步骤
- 计算数据集中不同类别数据的 d 维均值向量。
- 计算散布矩阵,包括类间、类内散布矩阵。
- 计算散布矩阵的特征向量 e1,e2,…,ed 和对应的特征值 λ1,λ2,…,λd。
- 将特征向量按特征值大小降序排列,然后选择前 k 个最大特征值对应的特征向量,组建一个 d×k 维矩阵——即每一列就是一个特征向量。
- 用这个 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() + 1x2_min, x2_max = x[:, 1].min() - 1, x[:, 1].max() + 1xx1, 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
基于Sklearn实现LDA算法相关推荐
- ML之SVM:基于sklearn的svm算法实现对支持向量的数据进行标注
ML之SVM:基于sklearn的svm算法实现对支持向量的数据进行标注 目录 输出结果 实现代码 输出结果 实现代码 import numpy as np import matplotlib.pyp ...
- 基于sklearn实现LDA主题模型(附实战案例)
目录 LDA主题模型 1.LDA主题模型原理 2.LDA主题模型推演过程 3.sklearn实现LDA主题模型(实战) 3.1数据集介绍 3.2导入数据 3.3分词处理 3.4文本向量化 3.5构建L ...
- 基于sklearn随机森林算法对鸢尾花数据进行分类
随机森林定义 随机森林(Random Forest,RF),顾名思义就是将多棵相互之间并无关联的决策树整合起来形成一个森林,再通过各棵树投票或取均值来产生最终结果的分类器.在介绍随机森林前需要了解几个 ...
- 基于sklearn随机森林算法探究肥胖的成因
目录 项目背景 数据介绍 数据来源 属性介绍 算法介绍 随机森林算法 决策树 随机森林定义 随机森林构建过程 随机森林算法评价 随机森林算法的发展现状及趋势 实验步骤 1.导入模块与数据 2.查看数据 ...
- 基于Sklearn实现SVM算法
文章目录 一.SVM算法 二.算法实现 1.引包 2.加载数据 3.修改数据 4.定义函数 5.线性处理 6.非线性处理 7.核函数处理 8.高斯核函数处理 三.总结 四.参考 一.SVM算法 将实例 ...
- sklearn实现lda模型_运用sklearn进行线性判别分析(LDA)代码实现
基于sklearn的线性判别分析(LDA)代码实现 一.前言及回顾 本文记录使用sklearn库实现有监督的数据降维技术--线性判别分析(LDA).在上一篇LDA线性判别分析原理及python应用(葡 ...
- sklearn应用线性回归算法
sklearn应用线性回归算法 Scikit-learn 简称 sklearn 是基于 Python 语言实现的机器学习算法库,它包含了常用的机器学习算法,比如回归.分类.聚类.支持向量机.随机森林等 ...
- 机器学习算法(九): 基于线性判别LDA模型的分类(基于LDA手写数字分类实践)
机器学习算法(九): 基于线性判别模型的分类 1.前言:LDA算法简介和应用 1.1.算法简介 线性判别模型(LDA)在模式识别领域(比如人脸识别等图形图像识别领域)中有非常广泛的应用.LDA是一种监 ...
- ML之ME/LF:基于不同机器学习框架(sklearn/TF)下算法的模型评估指标(损失函数)代码实现及其函数(Scoring/metrics)代码实现(仅代码)
ML之ME/LF:基于不同机器学习框架(sklearn/TF)下算法的模型评估指标(损失函数)代码实现及其函数(Scoring/metrics)代码实现(仅代码) 目录 单个评价指标各种框架下实现 1 ...
- ML之NB:(NLP)基于sklearn库利用不同语种数据集训练NB(朴素贝叶斯)算法,对新语种进行语种检测
ML之NB:(NLP)基于sklearn库利用不同语种数据集训练NB(朴素贝叶斯)算法,对新语种进行语种检测 目录 输出结果 训练数据集 设计思路 核心代码 输出结果 测试01:I love you ...
最新文章
- 异常处理机制(Begin try Begin Catch)
- 结对编程-四则运算生成程序-GUI界面
- Tensorflow【实战Google深度学习框架】TFLearn大宝剑
- UBuntu国内镜像地址下载
- 怎么将SVG转成PNG(.NET工具包编写)
- jQuery.ajaxPrefilter()函数的使用
- hashmap怎么取值_HashMap?面试?我是谁?我在哪?我会啥?
- Java poi 列移动_如何在java xssf中移動列poi
- Redis 发布/订阅模式
- php多个表查询的方法_php+mysql+ajax实现单表多字段多关键词查询的方法
- 将PDF转为TXT文本格式提取中文
- 三角函数的思维导图(上)
- 同文输入法 android,同文输入法app下载-同文输入法手机版-同文输入法最新版_易玩网...
- Codeforces 633H Fibonacci-ish II【线段树】
- 千挂科技与东风柳汽达成前装量产合作,2024年交付自动驾驶牵引车
- 消费返利模式的众筹玩法轻松无压力
- 我教女朋友学编程Html系列(6)—Html常用表单控件
- Docker篇之镜像打标签tag
- 如何快速在线压缩图片大小(包括放大、缩小图片,指定图片尺寸和压缩图片品质)
- java定义数组变量初始化为0_java中怎么数组初始化?
热门文章
- 搭建一个属于自己的语音对话机器人
- 数据库开发综合案例——仓库管理系统设计
- Oracle连接pb,PB内置Oracle数据库接口的使用方法
- Linux查看最后一页日志,linux常用查看文件或日志命令
- 第一次网络渗透实验报告
- 局域网打印机一键共享工具_AppStore今日推荐分享 支持局域网设备共享的抓包工具...
- PHP后台数据处理及与web端进行数据交互
- 计算机简历如何写,简历计算机能力怎么写
- 笔记 黑马程序员C++教程从0到1入门编程——核心编程
- 富勒wms系统里的定时器id_WMS项目实施,该如何调研?