本人新手小白,研一渣渣一名,信息与通信工程专业,本科为物联网专业。研究生期间想在网上学习一些知识,但是无从下手,于是乎想用写博客的方式来督促自己学习,我没有什么方向,还请志同道合的伙伴为我指明方向,一起讨论同时进步。这是我学习的第一个程序在matlab下可以运行,转载自百度经验,如有不妥之处请大家见谅,这是一个简单线性分类学习机(利用了平分最近点法)matlab实现https://jingyan.baidu.com/album/6079ad0eafe4b028ff86dbf8.html?picindex=3。
我们假设现在又两类样本点A 类,B类,每类分别拥有5个数据样本,A类的五个坐标如图:
B类的五个坐标如下:
假设现在有一个点(4,3.5)我们需要判别它具体应该属于哪一类,我们需要进行如下代码,作者已经给出详细的注释:
clc;
clear all;
%@ auther yutianduo
% 2018 July 19th
%@简单线性分类学习机matlab代码实现
%请大家互相交流学习 QQ:120371935
datax=[1 2;1.5 2;0.5 1;2 1.5;2.5 2];%属于A类的5个样本点datay=[3 4;3.5 4;3.5 5;5 4.5;5.5 5];%属于B类的5个样本点
distance_matrix=zeros(length(datax),length(datay));%建立一个5X5的零矩阵
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,:)];%data中保存的是两类中距离最短的点的坐标A类(2.5,2)B类(3,4)
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;%y-y0=-1/k(x-x0)
plot(datax(:,1),datax(:,2),'r+');hold on %画出第A类数据在坐标系中的位置,并用红色+号标注出来 保持
plot(datay(:,1),datay(:,2),'go');hold on%画出第B类数据在左边系中的位置 并用绿色圆圈标注 保持
plot(x,y,'b-') ;%绘制中垂线 用蓝色短线
xlim([0,6]); %设置 x的范围
ylim([0,6]); %设置 y的范围
plot(4,3.5,'r*') %标出来你想分类的(4,3.5)这个点在坐标系中的位置
如图我们将A类数据用红色加号表示,B类数据用绿色圆圈表示,图中绘制的直线将平面区域分成两部分,红色星号为所需分类的样本点,我们由图可知,他被分到了B类。这是我对这个程序的理解和解读。希望大家多多指教。这也是我的第一篇博客,希望大家给我这个小小的信通研一小白多多提供方向,小弟感激不尽。