簡單線性分類學習機(平分最近點法)matlab實現?

在分類問題中,如何劃分型別是一個複雜而有意思的問題。本文介紹一種線性劃分的方法:平分最近點法。在現實資料中,例如對某種疾病預測的評價指標,假設有兩種,a因素和b因素。患病與不患病用“+”,“o”表示。即兩種狀態。

簡單線性分類學習機(平分最近點法)matlab實現

工具/原料

Matlab

方法/步驟

採用直線的垂直平分線:

首先求任意兩點的之間的距離,構成距離矩陣,並求出最近距離,返回下標,求斜率,及兩點之間的中點。並繪製垂直平分線。

簡單線性分類學習機(平分最近點法)matlab實現

程式碼:

datax=[1 2;1.5 2;0.5 1;2 1.5;2.5 2];

datay=[3 4;3.5 4;3.5 5;5 4.5;5.5 5];

distance_matrix=zeros(length(datax),length(datay));

for i=1:length(datax)

for j=1:length(datay)

distance_matrix(i,j)=sqrt((datax(i,1)-datay(j,1))^2+(datax(i,2)-datay(j,2))^2);

end

end

[c,i]=min(distance_matrix);

[k,j]=min(c);

data=[datax(i(1),:);datay(j,:)];

x=0:0.01:5;

y=-1.0/((data(2,2)-data(1,2))/(data(2,1)-data(1,1)))*(x-(data(1,1)+data(2,1))/2)+(data(1,2)+data(2,2))/2;

plot(datax(:,1),datax(:,2),'r+');hold on

plot(datay(:,1),datay(:,2),'go');hold on

plot(x,y,'b-')

xlim([0,6]);

ylim([0,6]);

plot(4,3.5,'r*')

*點用於表示檢測的資料點

簡單線性分類學習機(平分最近點法)matlab實現

求 距離矩陣,返回 最小值下標,求垂直平分線方程。k1*k2=-1,並求出中點,斜率和在直線上的點座標,構造方程,繪製曲線。scatter繪製散點圖,

簡單線性分類學習機(平分最近點法)matlab實現

簡單線性分類學習機(平分最近點法)matlab實現

簡單線性分類學習機(平分最近點法)matlab實現

接下來介紹正式的演算法:平分最近點法,

通過非線性優化函式fmincon,求出向量α,使用α求出函式引數ω和b

決策函式為:sign(ω*x+b)

程式碼如下:

datax1=[1 2;1.5 2;0.5 1;2 1.5;2.5 2];

datax2=[3 4;3.5 4;3.5 5;5 4.5;5.5 5];

syms a1 a2 a3 a4 a5;

a=[a1 a2 a3 a4 a5];

[n m]=size(datax1);

f=zeros(length(a));

for i=1:n

for j=1:m

f(i)=f(i)+datax1(i,j)-datax2(i,j);

end

end

tol=zeros(length(a),length(a));

for i=1:length(f)

for j=1:length(f)

tol(i,j)=f(i)*f(j);

end

end

tol=tol/2;

.M file:

function f=myfun_2(x)

f=8*x(1)^2 + 16*x(1)*x(2) + 28*x(1)*x(3) + 24*x(1)*x(4) + 24*x(1)*x(5) + 8*x(2)^2 + 28*x(2)*x(3) + 24*x(2)*x(4) + 24*x(2)*x(5) + (49*x(3)^2)/2 + 42*x(3)*x(4) + 42*x(3)*x(5) + 18*x(4)^2 + 36*x(4)*x(5) + 18*x(5)^2;

[x,fval]=fmincon(@myfun_2,[0.2;0.2;0.2;0.2;0.2],[-1 0 0 0 0;0 -1 0 0 0;0 0 -1 0 0;0 0 0 -1 0;0 0 0 0 -1],[0;0;0;0;0],[1 1 1 1 1],[1])

c=0;d=0;

for i=1:length(x)

c=c+datax1(i,1)*x(i)+datax1(i,2)*x(i);

end

for i=1:length(x)

d=d+datax2(i,1)*x(i)+datax2(i,2)*x(i);

end

w=c-d;

b=-1/2*((c-d)*(c+d));

簡單線性分類學習機(平分最近點法)matlab實現

簡單線性分類學習機(平分最近點法)matlab實現

關於fmincon這是一個非線性優化函式,也是常用的優化函式之一。

A*x<=b

Aeq*x=beq

lb<=x<=ub

簡單線性分類學習機(平分最近點法)matlab實現

注意事項

兩種演算法結果不一致

對matlab基礎語法要求紮實

問題, 線性, 因素, 點法, 學習機,
相關問題答案