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

编程实现线性判别分析,并给出西瓜数据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)

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

上一篇:Auto.js微信抢红包脚本


下一篇:UVa12569树上的机器人的规划