机器学习之二分类LDA线性判别(最大特征值法)

目录

一、实验数学原理

二、算法实现步骤

三、实例分析

四、实验结果及分析


一、实验数学原理

        线性判别分析((Linear Discriminant Analysis ,简称 LDA)是一种经典的线性学习方法,在二分类问题上因为最早由 [Fisher,1936] 提出,亦称 ”Fisher 判别分析。并且LDA也是一种监督学习的降维技术,也就是说它的数据集的每个样本都有类别输出。

        其思想主要为:给定训练样例集,设法将样例投影到一条直线上,使得同样样例的投影尽可能接近、异样样例的投影点尽可能远离;在对新样本进行分类时,将其投影到同样的这条直线上,再根据投影点的位置来确定新样本的类别。其实可以用一句话概括:就是“投影后类内方差最小,类间方差最大

        可以用二维图表示如下:其中“+”,“-”分别表示两种不同类的数据集,椭圆表示数据集的外轮廓,虚线表示点的投影线的最短距离,虚线与实线的交点为数据集的投影点,绿色方块和蓝色方块分别这两类原始数据的中心点,实心三角和圆分别为投影后数据的中心点。

       给定一个数据集D,将数据集划分训练集和测试集,根据类别对数据集再次进行划分,然后对每个类别的数据集进行求值

如:

二、算法实现步骤

二分类LDA线性判别实验算法:

本次二分类LDA线性判别实验步骤:

1.创建主程序LDA.m,拟合函数程序LDAfit.m,预测函数程序LDApredict.m,绘制分类图程序LDAplot.m

2.对完整数据集进行读取和划分,以ID1-ID75样本作为为训练集,ID76-ID95样本作为测试集,ID96-ID115为待预测集。

3.对训练集样本进行拟合求出w

4.对测试集样本进行预测并对预测结果进行评价

5.对待预测集样本进行分类预测

三、实例分析

部分数据展示如下:

IDxylable
18.1223.2511
21.6474.7960
32.2707.1280
45.6804.5631
57.9154.1841
65.5653.5131
72.8926.1660
86.6244.3291
91.7405.2620
106.4173.1341

在本次实验中,只讲最大特征值法求解,其他的看后续情况吧,如普通法、奇异值分解法等。

主程序LDA.m 创建

close all;clc;clear;
%% 第一步:读取数据
data = xlsread('D:\桌面\LDAdata.xlsx');%% 第二步:分离数据集
%分离训练集
train_X = data(1:75,2:3);
train_lei = data(1:75,4);
%分测试集
test_X = data(76:95,2:3);
test_lei = data(76:95,4);
%分离预测集
predict_X =  data(96:end,2:3);%% 第三步:对训练集进行训练和预测
% 求解w
[x0,x1,y0,y1,w1]=LDAfit(train_X,train_lei);
% 定义分类点
u = mean(train_X*w1);
% 预测结果的分类情况
[y1_pred,lei1] = LDApredict(train_X,w1,1,u);
% 对训练集分类绘图
LDAplot(x0,x1,y0,y1,w1,0,u)
title('训练集分类图')
% 预测结果的准确率
accu=1-sum(abs(lei1'-train_lei))./length(train_lei);
fprintf('\n训练集的预测的准确率为:%d\n',accu)
fprintf('\n')
% 
%% 第四步:对测试集集预测并输出结果
% 此处不求解w,仍用上面训练集那个
[x0,x1,y0,y1,w]=LDA2fit(test_X,test_lei);
% 对测试集的预测结果进行分类
[y2_pred,lei2] = LDApredict(test_X,w1,76,u);
% 预测结果的准确率
accu=1-sum(abs(lei2'-test_lei))./length(test_lei);
fprintf('\n测试集的预测的准确率为:%d\n',accu)
fprintf('\n')
% 对测试集分类进行绘图
figure() %重新开一个图,不在上一个图上继续绘制
LDAplot(x0,x1,y0,y1,w1,0,u)
title('测试集集分类图')%% 第五步:对预测集进行预测并输出预测结果
[y3_pred,lei3] = LDApredict(predict_X,w1,96,u);
%对预测集进行绘图
figure() %重新开一个图,不在上一个图上继续绘制
%由结果清楚知道前10为类比0,后10为类别1
x0 = data(96:105,2);
x1 = data(106:end,2);
y0 = data(96:105,3);
y1 = data(106:end,3);
LDAplot(x0,x1,y0,y1,w1,0,u)
title('预测集的分类图')

拟合函数程序LDAfit.m 创建

%% X为数据集在此数据集只有2个变量,lei代表类别,此只适用于2二分类
% 如果数据集的变量个数有变化,请自行改正
%%
function [x0,x1,y0,y1,w]=LDA2fit(X,lei)
%% 变量解释
% X为待拟合的数据集集,lei为待拟合数据集中的类别列数据集
%% 第一步:按类别分离X0,X1
x = X(:,1);
Y = X(:,2);
x0 = x(find(lei==0));
x1 = x(find(lei==1));
y0 = Y(find(lei==0));
y1 = Y(find(lei==1));
X0= [x0,y0];
X1= [x1,y1];%% 第二步:求均值
u0 = mean(X0,1);
u1 = mean(X1,1);%% 第三步:求X0,X1的行数
% ,并按其构建相应均值矩阵
% 求行数的小,1代表列,2代表行
n0 = size(X0,1);
n1 = size(X1,1);
% % 构建均值矩阵
% U0 = repmat(u0,n0,1);
% U1 = repmat(u1,n1,1);%% 第四步:计算协方差矩阵
%X0的协方差矩阵
% E0 = sum((X0-U0)'*(X0-U0));
E0 = cov(X0,0);
%X1的协方差矩阵
% E1 = sum((X1-U1)'*(X1-U1));
E1 = cov(X1,0);%% 第五步:求类内散度矩阵
% Sw = (n0*E0 + n1*E1)/(n0+n1);
Sw = E0 + E1;%% 第六步:求类间散度矩阵
Sb = (u0-u1)'*(u0-u1);%% 第七步:求最大特征向量和特征值
[V,D] = eig(inv(Sw)*Sb);
[a1,a2] = max(max(D));
%% 第八步:求解w
w = V(:,a2);end

预测函数程序LDApredict.m 创建

function [y_pred,lei] = LDApredict(x,w,a,u)
%%  变量解释
% x 为待预测集 ; w 为训练集的w ; a 为变量起始序列号
% u 为分类点
%% 对预测结果进行分类
disp('----------------本次预测开始--------------------')
lei=[];
y_pred=[];
for i = 1:size(x,1)h = w' * [x(i,1),x(i,2)]';y_pred(i) = h;lei(i) = 1*(h>u);
%     fprintf('第%d个数据的类别属于:%d\n',a,lei(i))
%     a = a+1;
end
fprintf('第%d号到%d号的数据的预测分类结果为:\n',a,a+length(x)-1)
disp(lei)
disp('----------------本次预测结束--------------------')

绘制分类图程序LDAplot.m 创建

function LDAplot(x0,x1,y0,y1,w,b,u)
%%  变量解释
% x0,x1,y0,y1 为待预测集中的x0,x1,y0,y1 ; 
% w 为训练集的w ; b 为方程的截距
% u 为分类点
%% 第一步:绘制类别0的原始数据集
plot(x0,y0,'or')
%% 第二步:绘制类别1的原始数据集
hold on
plot(x1,y1,'ob')
%% 第三步:绘制原始数据的各类别的中心点
hold on
plot(mean(x0),mean(y0),'*c')
plot(mean(x1),mean(y1),'*g')
%% 第四步:绘制投影线
hold on
k=w(2)/w(1);
x = -3:5;
yy = k*x+b;
plot(x,yy,'k')
%% 第五步:绘制投影线的垂线
xx = linspace(0,6,80);
yyy = (u-xx*w(1))/w(2);
plot(xx,yyy,'--m')
%% 第六步:绘制各类别的投影点
plot((k*(y0-b)+x0)/(k^2+1),k*(k*(y0-b)+x0)/(k^2+1)+b,'+r');
plot((k*(y1-b)+x1)/(k^2+1),k*(k*(y1-b)+x1)/(k^2+1)+b,'+b');
%% 第七步:绘制各类别的投影点的中心点
plot(mean((k*(y0-b)+x0)/(k^2+1)),mean(k*(k*(y0-b)+x0)/(k^2+1)+b),'<c','markerfacecolor','c');
plot(mean((k*(y1-b)+x1)/(k^2+1)),mean(k*(k*(y1-b)+x1)/(k^2+1)+b),'>g','markerfacecolor','g');
%% 第八步:对x轴,y轴添加标签
xlabel('变量x')
ylabel('变量y')
%% 第九步:对以上各部分添加图例
legend('类别0','类别1','类别0中心点','类别1中心点','投影线','分类线','类别0投影点','类别1投影点','类别0投影点中心点','类别1投影点中心点','Location','EastOutside')end

四、实验结果及分析

结果1

根据给出数据的ID1-ID75样本为训练集进行学习,得到如下学习样本图形输出

结果2

通过由训练集得到的w值对测试集进行预测,得到预测结果如下

让预测分类结果与测试集原分类结果进行比较,得到准确率1

结果3

继续以训练集得到w值对测试集进行预测,得预测结果如下

本次分享就到这里了,如果有任何错误请及时联系哦,如有转载请标明原处!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/564744.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在布局空间标注的尺寸量不对_卫生间最佳布局尺寸,合理布局做到1毫米都不浪费!...

房子不论大小里面都会配置一个卫生间&#xff0c;卫生间分为大致三个区域&#xff0c;一个是洗涮区&#xff0c;可以在这里每天洗脸刷牙&#xff0c;还有就是淋浴区我们可以每天在这里洗澡&#xff0c;洗掉一天的疲惫。最后就是如厕区。这三大区域各个设计尺寸不同&#xff0c;…

机器学习 —— 向量机(matlab)

目录 一、SVM基本介绍 1.1 SVM算法定义 1.2 SVM和逻辑回归的区别 二、实验数学原理 三、实验算法和实验步骤 四、实例分析 一、SVM基本介绍 1.1 SVM算法定义 SVM全称是supported vector machine&#xff08;支持向量机&#xff09;&#xff0c;即寻找到一个超平面使样本…

excel如何去重统计户数_公式解读第三期 单元格中数字如何去重排序?

公式解读 第三期 -单元格中数字的去重排序&#xff01;本期涉及到函数较多&#xff0c;你可以一次性根据这个案例&#xff0c;学习多少很多常用 函数的用法&#xff0c;同时我也会讲解思路&#xff0c;这个很重要&#xff0c;思路决定了出路。直接先看一下我们的效果图&#xf…

机器学习 —— 神经网络(matlab)

目录 一、介绍 二、实验数学原理 三、实验算法和实验步骤 四、实例分析 一、介绍 神经网络是一种运算模型&#xff0c;由大量的节点&#xff08;或称“神经元”&#xff0c;或“单元”&#xff09;和之间相互联接构成。每个节点代表一种特定的输出函数&#xff0c;称为激励…

ARIMA加法季节模型

目录 ARIMA加法季节模型 ARIMA加法季节模型函数 例题 ARIMA加法季节模型 季节效应和其它效应之间是加法关系 通过简单的趋势差分、季节差分之后转化为平稳&#xff0c;模型结构通常如下 ARIMA加法季节模型函数 例题 部分数据&#xff1a; timexJan-93977.5Feb-93892.5Mar…

Java在远程方法调用中运用反射机制

我们将介绍反射机制在网络编程中的应用&#xff0c;实现如何在客户端通过远程方法调用服务器端的方法。 假定在服务器端有一个 HelloService 接口&#xff0c;该接口具有 getTime() 和 echo() 方法&#xff0c;具体代码如下&#xff1a; import java.util.Date;public interf…

多元时间序列分析 —— 因果检验

目录 因果检验 因果关系的识别 例 Granger 因果关系定义 两变量之间的4种因果关系 Granger因果检验 1.假设条件 2.检验统计量 例 进行Granger因果检验应该注意的问题 因果检验 因果关系的识别 对于多元时间序列而言&#xff0c;如果能找到对响应变量有显.著影响的输…

华为仿苹果字体_华为mate40系列再次霸榜DXO,网友:无敌是多么寂寞

阅读本文前&#xff0c;请您先点击上面的蓝色字体&#xff0c;再点击“关注”&#xff0c;这样您就可以免费收到最新内容了。每天都有分享&#xff0c;完全是免费订阅&#xff0c;请放心关注。声明&#xff1a;本文转载自网络&#xff0c;如有侵权&#xff0c;请在后台留言联系…

Java常见异常处理

异常&#xff08;exception&#xff09;是在运行程序时产生的一种异常情况&#xff0c;已经成为了衡量一门语言是否成熟的标准之一。 异常简介 Java 中的异常又称为例外&#xff0c;是一个在程序执行期间发生的事件&#xff0c;它中断正在执行程序的正常指令流。为了能够及时…

干预分析 + 伪回归

目录 干预分析 干预分析的定义 干预分析的产生背景 干预分析的实质 干预分析步骤 步骤一 步骤二 步骤三 步骤四 步骤五 步骤六 干预机制的选择 伪回归 定义 伪回归随机模拟试验 伪回归产生原因 干预分析 干预分析的定义 时间序列常常受到某些外部事件的影响…

R如何安装MSBVAR包!!!请看这里!!

目录 1.MSBVAR介绍 2.为何R上安装失败 3.解决方案 1.MSBVAR介绍 MSBVAR: 估计贝叶斯向量自回归模型和贝叶斯结构向量自回归模型&#xff0c;也可以用于时间序列的因果检验。 2.为何R上安装失败 MSBVAR现在不属于R中的库&#xff0c;属于第三方安装库&#xff0c;并且它在…

easy excel根据行列excel_Excel函数如何根据地级市匹配所在省份计算快递费用

前些日子一个学员问的关于excel计算快递费的问题&#xff0c;office小超老师觉得很有代表性。在这里和大家分享一下具体处理快递费的处理流程。在她的这个案例中&#xff0c;订单信息地区仅为各个地级市&#xff0c;现在的问题就是要根据不同的地级市和各个地区不同的快递费用&…

智能计算之遗传算法(GA)介绍

目录 1. 简介 2. GA思想来源及建立过程 3. 研究发展 4. GA的基本结构 5. GA的实现流程 (1) 染色体编​辑 (2) 群体的初始化 (3) 适应值评价 (4) 选择算子(父体选择) (5) 交配算子(杂交算子) (6) 变异算子 (7) 算法流程 6. 实例举例 7. 遗传算法的改进 (1) 算子的…

sublimetext3插件安装_sublime text 3 交互python

爱折腾的我最近在用sublime text 3 写python&#xff0c;但是原生态的编译模式不支持交互。在网上找了许多资料&#xff0c;想要可以交互运行python&#xff0c;大都需要sublimeREPL这个插件&#xff0c;我不想用这个插件。在多次摸索过后找到了如下解决方案&#xff0c;在此记…

如何用手机打开dcm格式图片_压缩图片用这个神奇吧(电脑版)

一码不扫&#xff0c;可以扫天下&#xff1f;Light Image Resizer是将数码照片和图像存在电脑中&#xff0c;并希望重新调整图片大小&#xff0c;压缩&#xff0c;转换&#xff0c;创建备份&#xff0c;导入或组织图片的人们设计的完美工具。Light Image Resizer 专业的图像缩放…

智能计算之神经网络(BP)介绍

目录 1. 神经网络流行原因 2. 人工神经网络定义 3. 人工神经网络的学习能力 4. 人工神经网络的基本原理 5. 神经网络的研究进展 6. 神经网络的典型结构 6.1 单层感知器网络 6.2 前馈型网络 6.3 前馈内层互联网络 6.4 反馈型网络 6.5 全互联网络 7. 神经网络的学习算…

python系统关键字_Python基础教程 - global关键字及全局变量的用法

Python中global关键字主要作用是声明变量的作用域。 在C语言中&#xff0c;由于变量一定是先声明&#xff0c;后使用&#xff0c;所以我们可以清楚的知道&#xff0c;现在使用的变量是全局还是局部&#xff0c;比如&#xff1a; int a 5; void test(void) { a 1; // 没有先声…

智能计算之神经网络(Hopfield网络-DHNN,CHNN )介绍

目录 1. 神经网络受欢迎的原因 2. 人工神经网络定义 3. 人工神经网络的学习能力 4. 人工神经网络的基本原理 5. 神经网络的研究进展 6. 神经网络的典型结构 6.1 单层感知器网络 6.2 前馈型网络 6.3 前馈内层互联网络 6.4 反馈型网络 6.5 全互联网络 7. 神经网络的学…

智能计算之蚁群算法(ACO)介绍

目录 1. 简介 2. 基本思想 3. 研究进展 4. 基本流程 &#xff08;1&#xff09;路径构建 &#xff08;2&#xff09;信息素更新 ​5. 应用举例 6. 改进版 6.1 精华蚂蚁系统 6.2 基于排列的蚂蚁系 6.3 最大最小蚂蚁系 6.4 蚁群系统 7. 参数设置​编辑 8. 练习题 …

Java try catch finally语句

在实际开发中&#xff0c;根据 try catch 语句的执行过程&#xff0c;try 语句块和 catch 语句块有可能不被完全执行&#xff0c;而有些处理代码则要求必须执行。例如&#xff0c;程序在 try 块里打开了一些物理资源&#xff08;如数据库连接、网络连接和磁盘文件等&#xff09…