【MATLAB】机器学习:线性判别分析LDA
实验内容
1.将LDA在训练样本上的低维表示结果可视化。
2.使用距离最短对测试样本进行分类。
实验代码
clear;clc;
%% 导入数据
load("train.mat");
x=train(:,1:4);
y=train(:,5);
load("test.mat");
x_test=test;% *********************问题二*******************
% **********************************************
%% 训练样本的结果可视化
[mappedX,mapping]=lda(x,y,2);
% 训练样本中的第一等级
index1=find(y==1);
plot(mappedX(index1,1),mappedX(index1,2),'or','MarkerSize',15);
hold on;
% 训练样本中的第二等级
index2=find(y==2);
plot(mappedX(index2,1),mappedX(index2,2),'^g','MarkerSize',15);
hold on;
% 训练样本中的第三等级
index3=find(y==3);
plot(mappedX(index3,1),mappedX(index3,2),'sb','MarkerSize',15);
legend('训练样本中的第一等级','训练样本中的第二等级','训练样本中的第三等级');
hold on;% ********************问题三********************
% **********************************************
%% 距离最短对测试样本进行分类
for i=1:size(x_test,1)for j=1:size(x,1)dist(i,j)=sqrt(sum((x_test(i,:)-x(j,:)).^2,2));end
end
[min,index]=min(dist,[],2);
y_test=[y(index(1));y(index(2))];
%% 全部样本的可视化
X=[x;x_test];
Y=[y;y_test];
[mappedX,mapping]=lda(X,Y,2);
% 测试样本中的第一等级
temp1=find(Y==1);
ind1=find(temp1>size(x,1));
index1=temp1(ind1); % 全部样本中属于第一等级且为测试样本的索引
plot(mappedX(index1,1),mappedX(index1,2),'ok','MarkerSize',15);
hold on;
% 测试样本中的第二等级
temp2=find(Y==2);
ind2=find(temp2>size(x,1));
index2=temp2(ind2); % 全部样本中属于第二等级且为测试样本的索引
plot(mappedX(index2,1),mappedX(index2,2),'^k','MarkerSize',15);
hold on;
% 测试样本中的第三等级
temp3=find(Y==3);
ind3=find(temp3>size(x,1));
index3=temp3(ind3); % 全部样本中属于第三等级且为测试样本的索引
plot(mappedX(index3,1),mappedX(index3,2),'sb','MarkerSize',15);
其中,lda函数调用的lda.m代码文件如下
function [mappedX, mapping] = lda(X, labels, no_dims)
% 函数功能:使用LDA对数据集A进行降维至no_dims维
% 函数的参数:X(数据集)、labels(数据集X对应的标签)、no_dims(投影后的维度)
% 函数返回值:mappedX(投影后的no_dims维数据集)% 步骤一:求均值
mapping.mean = mean(X, 1);
X = bsxfun(@minus, X, mapping.mean);% 步骤二:求类内散度矩阵
[classes, bar, labels] = unique(labels);
nc = length(classes); % 确定标签的种类
Sw = zeros(size(X, 2), size(X, 2)); % 初始化Sw
St = cov(X); % 计算整体的协方差矩阵
for i=1:nccur_X = X(labels == i,:);C = cov(cur_X);p = size(cur_X, 1) / (length(labels) - 1);Sw = Sw + (p * C);
end% 步骤三:计算类间散度矩阵
Sb = St - Sw;
Sb(isnan(Sb)) = 0;
Sw(isnan(Sw)) = 0;
Sb(isinf(Sb)) = 0;
Sw(isinf(Sw)) = 0;
if nc <= no_dimsno_dims = nc - 1;warning(['Target dimensionality reduced to ' num2str(no_dims) '.']); % 确保不要映射到较高维度
end% 步骤四:求最大特征矩阵和特征向量
[M, lambda] = eig(Sb, Sw);
lambda(isnan(lambda)) = 0;
[lambda, ind] = sort(diag(lambda), 'descend');
M = M(:,ind(1:min([no_dims size(M, 2)])));
% 步骤五:计算投影数据
mappedX = X * M;
mapping.M = M;
mapping.val = lambda;
end
实验结果
图1. 训练样本可视化 图2. 全体样本可视化
实验心得
通过本次“线性判别分析实验”的课上和课下学习,我对LDA这种有监督的数据降维方法有了更加深刻的理解:将带有标签的数据降维,投影到低维空间同时满足三个条件:①尽可能多地保留数据样本的信息(即选择最大的特征是对应的特征向量所代表的方向)。②寻找使样本尽可能好分的最佳投影方向。③投影后使得同类样本尽可能近,不同类样本尽可能远。
【MATLAB】机器学习:线性判别分析LDA相关推荐
- 机器学习 周志华 课后习题3.5 线性判别分析LDA
机器学习 周志华 课后习题3.5 线性判别分析LDA 照着书上敲了敲啥都不会,雀食折磨 python代码 # coding=UTF-8 from numpy import * # 我安装numpy的时 ...
- 【机器学习】机器学习之线性判别分析(LDA)
目录 一.线性判别分析介绍 二.线性判别分析原理 1. 类内散度矩阵(within-class scatter matrix) 2. 类间散度矩阵(between-class scatter matr ...
- 线性判别分析LDA—西瓜书课后题3.5—MATLAB代码
题目:编程实现线性判别分析LDA,给出西瓜数据集 3.0a上的结果 简单说就是找一个分离度最大的投影方向,把数据投射上去. clc clear all [num,txt]=xlsread('D:\机器 ...
- lda 吗 样本中心化 需要_机器学习 —— 基础整理(四):特征提取之线性方法——主成分分析PCA、独立成分分析ICA、线性判别分析LDA...
本文简单整理了以下内容: (一)维数灾难 (二)特征提取--线性方法 1. 主成分分析PCA 2. 独立成分分析ICA 3. 线性判别分析LDA (一)维数灾难(Curse of dimensiona ...
- 线性分类(二)-- 线性判别分析 LDA
在机器学习领域,LDA是两个常用模型的简称:线性判别分析(Linear Discriminant Analysis) 和隐含狄利克雷分布(Latent Dirichlet Allocation).在自 ...
- 数据分享|R语言逻辑回归、线性判别分析LDA、GAM、MARS、KNN、QDA、决策树、随机森林、SVM分类葡萄酒交叉验证ROC...
全文链接:http://tecdat.cn/?p=27384 在本文中,数据包含有关葡萄牙"Vinho Verde"葡萄酒的信息(点击文末"阅读原文"获取完整代 ...
- ML之NB:基于news新闻文本数据集利用纯统计法、kNN、朴素贝叶斯(高斯/多元伯努利/多项式)、线性判别分析LDA、感知器等算法实现文本分类预测
ML之NB:基于news新闻文本数据集利用纯统计法.kNN.朴素贝叶斯(高斯/多元伯努利/多项式).线性判别分析LDA.感知器等算法实现文本分类预测 目录 基于news新闻文本数据集利用纯统计法.kN ...
- 07_数据降维,降维算法,主成分分析PCA,NMF,线性判别分析LDA
1.降维介绍 保证数据所具有的代表性特性或分布的情况下,将高维数据转化为低维数据. 聚类和分类都是无监督学习的典型任务,任务之间存在关联,比如某些高维数据的分类可以通过降维处理更好的获得. 降维过程可 ...
- 『矩阵论笔记』线性判别分析(LDA)最全解读+python实战二分类代码+补充:矩阵求导可以参考
线性判别分析(LDA)最全解读+python实战二分类代码! 文章目录 一.主要思想! 二.具体处理流程! 三.补充二中的公式的证明! 四.目标函数的求解过程! 4.1.优化问题的转化 4.2.拉格朗 ...
- sklearn实现lda模型_运用sklearn进行线性判别分析(LDA)代码实现
基于sklearn的线性判别分析(LDA)代码实现 一.前言及回顾 本文记录使用sklearn库实现有监督的数据降维技术--线性判别分析(LDA).在上一篇LDA线性判别分析原理及python应用(葡 ...
最新文章
- matplotlib绘制平滑的曲线
- debugInit.c tomcat启动错误
- 【Flask】jinja2根据url中的字符串,决定是否显示某个div
- mysql sql running no_【MySql】复制出现Slave_SQL_Running: No 错误解决
- matlab中图像处理的基本函数(2)
- android 多进程 坑,Android 开发中踩过的坑之八:多进程问题
- python 录制网易云登陆_Python爬虫教程,爬取网易云的音乐
- 算法(四)、时间复杂度、排序、查找
- 【Linux】目录中 / 和 ~ 的区别
- 小迪渗透测试学习笔记(一)基础入门-概念名词
- 2022 SPSSPRO杯A|B|C题思路分享【认证杯】
- sql分组排序,查询每组第一个数据
- java ajax传参问题
- dumple什么意思_dump是什么意思
- 如何混合使用Linux和Windows
- Python秒杀脚本丨淘宝或京东平台定时自动秒杀抢购脚本
- 深度学习模型轻量化(上)
- 基于JAVA师大家教中心管理系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署
- Java 形参和实参
- ios使用SARUnArchiveANY 解压rar文件(oc和swift版本)