实验内容

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相关推荐

  1. 机器学习 周志华 课后习题3.5 线性判别分析LDA

    机器学习 周志华 课后习题3.5 线性判别分析LDA 照着书上敲了敲啥都不会,雀食折磨 python代码 # coding=UTF-8 from numpy import * # 我安装numpy的时 ...

  2. 【机器学习】机器学习之线性判别分析(LDA)

    目录 一.线性判别分析介绍 二.线性判别分析原理 1. 类内散度矩阵(within-class scatter matrix) 2. 类间散度矩阵(between-class scatter matr ...

  3. 线性判别分析LDA—西瓜书课后题3.5—MATLAB代码

    题目:编程实现线性判别分析LDA,给出西瓜数据集 3.0a上的结果 简单说就是找一个分离度最大的投影方向,把数据投射上去. clc clear all [num,txt]=xlsread('D:\机器 ...

  4. lda 吗 样本中心化 需要_机器学习 —— 基础整理(四):特征提取之线性方法——主成分分析PCA、独立成分分析ICA、线性判别分析LDA...

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

  5. 线性分类(二)-- 线性判别分析 LDA

    在机器学习领域,LDA是两个常用模型的简称:线性判别分析(Linear Discriminant Analysis) 和隐含狄利克雷分布(Latent Dirichlet Allocation).在自 ...

  6. 数据分享|R语言逻辑回归、线性判别分析LDA、GAM、MARS、KNN、QDA、决策树、随机森林、SVM分类葡萄酒交叉验证ROC...

    全文链接:http://tecdat.cn/?p=27384 在本文中,数据包含有关葡萄牙"Vinho Verde"葡萄酒的信息(点击文末"阅读原文"获取完整代 ...

  7. ML之NB:基于news新闻文本数据集利用纯统计法、kNN、朴素贝叶斯(高斯/多元伯努利/多项式)、线性判别分析LDA、感知器等算法实现文本分类预测

    ML之NB:基于news新闻文本数据集利用纯统计法.kNN.朴素贝叶斯(高斯/多元伯努利/多项式).线性判别分析LDA.感知器等算法实现文本分类预测 目录 基于news新闻文本数据集利用纯统计法.kN ...

  8. 07_数据降维,降维算法,主成分分析PCA,NMF,线性判别分析LDA

    1.降维介绍 保证数据所具有的代表性特性或分布的情况下,将高维数据转化为低维数据. 聚类和分类都是无监督学习的典型任务,任务之间存在关联,比如某些高维数据的分类可以通过降维处理更好的获得. 降维过程可 ...

  9. 『矩阵论笔记』线性判别分析(LDA)最全解读+python实战二分类代码+补充:矩阵求导可以参考

    线性判别分析(LDA)最全解读+python实战二分类代码! 文章目录 一.主要思想! 二.具体处理流程! 三.补充二中的公式的证明! 四.目标函数的求解过程! 4.1.优化问题的转化 4.2.拉格朗 ...

  10. sklearn实现lda模型_运用sklearn进行线性判别分析(LDA)代码实现

    基于sklearn的线性判别分析(LDA)代码实现 一.前言及回顾 本文记录使用sklearn库实现有监督的数据降维技术--线性判别分析(LDA).在上一篇LDA线性判别分析原理及python应用(葡 ...

最新文章

  1. matplotlib绘制平滑的曲线
  2. debugInit.c tomcat启动错误
  3. 【Flask】jinja2根据url中的字符串,决定是否显示某个div
  4. mysql sql running no_【MySql】复制出现Slave_SQL_Running: No 错误解决
  5. matlab中图像处理的基本函数(2)
  6. android 多进程 坑,Android 开发中踩过的坑之八:多进程问题
  7. python 录制网易云登陆_Python爬虫教程,爬取网易云的音乐
  8. 算法(四)、时间复杂度、排序、查找
  9. 【Linux】目录中 / 和 ~ 的区别
  10. 小迪渗透测试学习笔记(一)基础入门-概念名词
  11. 2022 SPSSPRO杯A|B|C题思路分享【认证杯】
  12. sql分组排序,查询每组第一个数据
  13. java ajax传参问题
  14. dumple什么意思_dump是什么意思
  15. 如何混合使用Linux和Windows
  16. Python秒杀脚本丨淘宝或京东平台定时自动秒杀抢购脚本
  17. 深度学习模型轻量化(上)
  18. 基于JAVA师大家教中心管理系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署
  19. Java 形参和实参
  20. ios使用SARUnArchiveANY 解压rar文件(oc和swift版本)

热门文章

  1. 12306 下铺coding
  2. 矢量地图自定义切片样式
  3. Tableau画图初学者~新手教程~常见类型图
  4. 最优化算法——常见优化算法分类及总结
  5. 经验分享——家校互动系统功能教程资源
  6. ads软件是什么?有什么用?怎么用?
  7. ADS2020 Crack使用教程
  8. Android SDK测试
  9. MODIS数据批量下载
  10. pg数据库游标的使用