其他分享
首页 > 其他分享> > 机器学习(周志华)——线性判别分析

机器学习(周志华)——线性判别分析

作者:互联网

编程实现线性判别分析,并给出西瓜数据3.0a上的结果。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
首先分类知道编号(1-8)为一类,编号(9-17)为另一类
计算 u 1 = [ 0.691 + 0.774 + . . . + 0.437 8 ; 0.460 + 0.376 + . . . + 0.211 8 ] u_1=[\frac{0.691+0.774+...+0.437}{8} ;\frac{0.460+0.376+...+0.211}{8}] u1​=[80.691+0.774+...+0.437​;80.460+0.376+...+0.211​]
u 0 = [ 0.666 + 0.243 + . . . + 0.719 9 ; 0.091 + 0.267 + . . . + 0.103 9 ] u_0=[\frac{0.666+0.243+...+0.719}{9} ;\frac{0.091+0.267+...+0.103}{9}] u0​=[90.666+0.243+...+0.719​;90.091+0.267+...+0.103​]
计算出类内散度矩阵 S w S_w Sw​

由公式 w = S w − 1 ∗ ( u 0 − u 1 ) w=S_w^{-1}*(u_0-u_1) w=Sw−1​∗(u0​−u1​)得系数

matlab程序实现如下:

clear;clc
tic
%初始数据集
x=[0.697 0.460
    0.774 0.376
    0.634 0.264
    0.608 0.318
    0.556 0.215
    0.403 0.237
    0.481 0.149
    0.437 0.211
    0.666 0.091
    0.243 0.267
    0.245 0.057
    0.343 0.099
    0.639 0.161
    0.657 0.198
    0.360 0.370
    0.593 0.042
    0.719 0.103]';
y=[1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0];
%%线性判别分析
%前期数据处理
k_1=sum(y==1);                    %获取真例的个数
k_0=sum(y==0);                    %获取假例的个数
X1=x(:,1:k_1);                    %获取真例的数据
X0=x(:,(k_1+1):end);              %获取假例的数据
u1=mean(X1,2);          %计算真例的均值向量
u0=mean(X0,2);          %计算假例的均值向量

k=size(x,1);            %获取x的维数
M_1=zeros(k,k);
for i=1:k_1
    M_1=M_1+(X1(:,i)-u1)*(X1(:,i)-u1)';
end
M_0=zeros(k,k);
for i=1:k_0
    M_0=M_0+(X0(:,i)-u0)*(X0(:,i)-u0)';
end

S_w=M_1+M_0;          %类内散度矩阵
w=inv(S_w)*(u0-u1)

在这里插入图片描述

标签:周志华,0.103,0.211,u1,判别分析,u0,线性,0.437,+...+
来源: https://blog.csdn.net/mynameisgt/article/details/115054526