机器学习 K-means算法_0(Matlab实现)
文章目录
- 一、解析
- 二、效果
- 1、数据展示
- 2、聚点迭代路径
- 三、代码
- 1、mian
- 2、K_means
- 3、Dist_Func
- 4、A_Rand
- 5、Show
一、解析
K_means:
接收数据集以及聚点信息
返回聚点轨迹,聚点簇,迭代次数,偏差以及偏差和
Dis_Func:
接收两点的坐标
返回两点距离
此处为欧式距离(可根据需求修改)
A_Rand:
接收数据集大小,分组数量,每组数量以及离散程度
返回随机生成有规律分布的数据集
Show:
接收聚点簇轨迹,并作出聚点移动轨迹
二、效果
1、数据展示
2、聚点迭代路径
‘+’表示数据集分布
‘*’表示聚点起点
直线表示聚点迭代轨迹
三、代码
1、mian
%A:数据集
%size_A:数据集大小
%Points:聚点集
%nums_Points:聚点数量
%Error:误差和
%Max_Iteration:最大迭代次数size_A=[20,2];
A=A_Rand(size_A,4,5,2);
%A=Temp;
plot(A(:,1),A(:,2),'+')
hold on;
nums_Points=4;
Points=50+5.*rand(nums_Points,size_A(2));
plot(Points(:,1),Points(:,2),'*')
Error=9;
Max_Iteration=20;%Points:聚点轨迹
%Points_A:聚点簇
%flag:迭代次数
%Points_Centre_Variance:聚点簇偏差
%Points_Centre_Variance_Sum:聚点簇偏差和
[Track_Points,Points_A,flag, Points_Centre_Variance,Points_Centre_Variance_Sum]=K_means(A,size_A,Points,nums_Points,Error,Max_Iteration);
%聚点轨迹作图
Show(A,size_A,Track_Points, nums_Points,flag+1);disp("最终聚点:");
disp(Track_Points((1+flag*nums_Points):(flag+1)*nums_Points,:));
disp("聚点簇:");
disp(Points_A);
disp("迭代次数:");
disp(flag);
disp("聚点簇偏差:");
disp(Points_Centre_Variance);
disp("聚点簇偏差和:");
disp(Points_Centre_Variance_Sum);
2、K_means
function [Track_Points,Points_A,flag, Points_Centre_Variance,Points_Centre_Variance_Sum] = K_means(A,size_A,Points,nums_Points,Error,Max_Iteration)
%A:���ݼ�
%size_A:���ݼ���С
%Points:�۵㼯
%nums_Points:�۵���
%Error:���ĵ�������%聚点轨迹记录
Track_Points=[];
Track_Points=[Track_Points;Points];%��������
flag=0;%���ݼ�Ԫ������ ����
Dist_A_P=zeros(size_A(1),1+nums_Points);
Dist_A_P(:,1)=(1:size_A(1))';
for i=1:size_A(1)for j=1:nums_PointsDist_A_P(i,j+1)=Dist_Func(A(i,:),Points(j,:),nums_Points);end
end%�۵����� ���� ��
Points_A=zeros(nums_Points,2+size_A(1));
Points_A(:,1)=(1:nums_Points)';
Points_A(:,2)=0;
for i=1:size_A(1)temp=find(Dist_A_P(i,2:1+nums_Points)==min(Dist_A_P(i,2:1+nums_Points)));Points_A(temp(1),2)=Points_A(temp(1),2)+1;Points_A(temp(1),2+Points_A(temp(1),2))=i;
end%���ĵ����� ���� �������ĵ�����
Points_Centre=zeros(nums_Points,1+size_A(2));
Points_Centre(:,1)=(1:nums_Points)';
for i=1:nums_PointsSum=zeros(1,size_A(2));for j=1:Points_A(i,2)Sum=Sum+A(Points_A(i,2+j),:);endif(Points_A(i,2)~=0)Points_Centre(i,2:1+size_A(2))=Sum./Points_A(i,2);end
end%ƫ������ ���� ƫ��
Points_Centre_Variance=zeros(nums_Points,2);
Points_Centre_Variance(:,1)=(1:nums_Points)';
Points_Centre_Variance_Sum=0;
for i=1:nums_PointsSum=0;for j=1:Points_A(i,2)Sum=Sum+Dist_Func(Points(i,:),A(Points_A(i,2+j),:),nums_Points);endif(Points_A(i,2)~=0)Points_Centre_Variance(i,2)=Sum./Points_A(i,2);endPoints_Centre_Variance_Sum=Points_Centre_Variance_Sum+Points_Centre_Variance(i,2);
endwhile(Points_Centre_Variance_Sum>Error && flag<Max_Iteration)%����������1flag=flag+1;%����Pointsfor i=1:nums_Pointsif(Points_A(i,2)~=0)Points(i,:)=Points_Centre(i,2:1+size_A(2));endend%聚点轨迹记录Track_Points=[Track_Points;Points];%���ݼ�Ԫ������ ���� for i=1:size_A(1)for j=1:nums_PointsDist_A_P(i,j+1)=Dist_Func(A(i,:),Points(j,:),nums_Points);endend%�۵����� ���� ��Points_A(:,2)=0;for i=1:size_A(1)temp=find(Dist_A_P(i,2:1+nums_Points)==min(Dist_A_P(i,2:1+nums_Points)));Points_A(temp(1),2)=Points_A(temp(1),2)+1;Points_A(temp(1),2+Points_A(temp(1),2))=i;end%���ĵ����� ���� �������ĵ�����for i=1:nums_PointsSum=zeros(1,size_A(2));for j=1:Points_A(i,2)Sum=Sum+A(Points_A(i,2+j),:);endif(Points_A(i,2)~=0)Points_Centre(i,2:1+size_A(2))=Sum./Points_A(i,2);endend%ƫ������ ���� ƫ��Points_Centre_Variance_Sum=0;for i=1:nums_PointsSum=0;for j=1:Points_A(i,2)Sum=Sum+Dist_Func(Points(i,:),A(Points_A(i,2+j),:),nums_Points);endif(Points_A(i,2)~=0)Points_Centre_Variance(i,2)=Sum./Points_A(i,2);endPoints_Centre_Variance_Sum=Points_Centre_Variance_Sum+Points_Centre_Variance(i,2);end
end
end
3、Dist_Func
function [ret] = Dist_Func(A,B,nums_Points)
ret=round(sqrt(sum((A-B).^2)),3);
end
4、A_Rand
function [Ret_A] = A_Rand(size_A,nums1,nums2,Dispersion)
%size_A:数据集大小
%nums1:分组数量
%nums2:每组数量
%Dispersion:每组离散程度temp=100.*rand(nums1,size_A(2));
Ret_A=Dispersion.*rand(size_A);for i=1:nums1Ret_A((nums2*(i-1)+1):(nums2*i),:)=Ret_A((nums2*(i-1)+1):(nums2*i),:)+temp(i,:);
end
end
5、Show
function [Ret_A] = Show(A,size_A,Track_Points,nums_Point,nums)
%A:数据集
%size_A:数据集大小
%Track_Points:聚点轨迹
%nums_Point:聚点数量
%nums:聚点规模
for i=1:nums_Pointtemp1= Track_Points(nums_Point*[0:nums-1]+i,1);temp2= Track_Points(nums_Point*[0:nums-1]+i,2);plot(temp1,temp2);end
机器学习 K-means算法_0(Matlab实现)相关推荐
- kmeans改进 matlab,基于距离函数的改进k―means 算法
摘要:聚类算法在自然科学和和社会科学中都有很普遍的应用,而K-means算法是聚类算法中经典的划分方法之一.但如果数据集内相邻的簇之间离散度相差较大,或者是属性分布区间相差较大,则算法的聚类效果十分有 ...
- 机器学习——K近邻算法(KNN)(K Nearest Neighbor)
参考视频与文献: python与人工智能-KNN算法实现_哔哩哔哩_bilibili 机器学习--K近邻算法(KNN)及其python实现_清泉_流响的博客-CSDN博客_python实现knn 机器 ...
- 我的K均值算法的matlab实现
这是我的第一篇博客: K-Means算法过程,略: 这是一次课程的任务2333,是利用所学K-means聚类分析方法,对iris数据集进行聚类分析,并利用已知的样本类别标 签进行聚类分析评价: 我的K ...
- [机器学习]K近邻算法及其应用--WEKA工具
K近邻算法理论基础 k近邻模型 距离度量 k值的选择 分类决策规则 WEKA实战 问题背景 数据预处理 得到分类器 对未知的数据进行分类预测 K近邻算法理论基础 (本节内容参考了:李航<统计学习 ...
- python机器学习 | K近邻算法学习(1)
K近邻算法学习 1 K近邻算法介绍 1.1算法定义 1.2算法原理 1.3算法讨论 1.3.1 K值选择 1.3.2距离计算 1.3.3 KD树 2 K近邻算法实现 2.1scikit-learn工具 ...
- 2 机器学习 K近邻算法(KNN) 学习曲线 交叉验证 手写数字识别
机器学习 1 K-近邻算法介绍 1.1 分类问题 分类问题:根据已知样本的某些特征,判断一个未知样本属于哪种样本类别. 与回归问题相比,分类问题的输出结果是离散值,用于指定输入的样本数据属于哪个类别. ...
- k means算法C语言伪代码,K均值算法(K-Means)
1. K-Means算法步骤 算法步骤 收敛性定义,畸变函数(distortion function): 伪代码: 1) 创建k个点作为K个簇的起始质心(经常随机选择) 2) 当任意一个点的蔟分配结果 ...
- 机器学习[k近邻算法]
k近邻算法简称kNN算法,由Thomas等人在1967年提出[1].它基于以下思想:要确定一个样本的类别,可以计算它与所有训练样本的距离,然后找出和该样本最接近的k个样本,统计这些样本的类别进行投票, ...
- 机器学习 感知机算法_0(Matlab实现)
文章目录 效果 代码 Main Perceptron Sign 效果 代码 Main x=[-1 7 13 9 14 14 11 -3 14 1 15 3 1]; y=[1 1 1 -1 -1 -1] ...
最新文章
- 重温强化学习之马尔可夫决策过程(MDPs)
- Redis:事件驱动(IO多路复用)
- 区域数据导入功能(OCUpload插件使用)
- jsr303jsp页面怎么显示错误信息_springmvc使用JSR-303进行数据校验实例
- pom添加mysql依赖tomcat崩溃_Spring Boot + Mybatis + Spring MVC环境配置(一) :Spring Boot初始化,依赖添加...
- 英伟达_如何超越英伟达?
- 谷歌Pixel 4真机曝光:宽大额头内含诸多玄机
- C++之new和delete探究
- epoll原理_Epoll源码阅读手札
- python中如何调用类_python中如何调用类的方法
- Fuel 9.0安装Openstack由于NTP检查没通过导致失败--解决办法
- matlab fullfile函数
- 微信公众号生成个性化推广二维码
- 酷睿7代cpu安装win7
- 服务器安全文件,文件服务器安全防护系统-虹安 - 数据防泄密,文档加密,源代码防泄密,数据防泄漏,DLP数据防泄密整体解决方案提供商...
- resultFul请求案例
- 工业级芯片可靠性试验项目条件
- 数据库索引高频面试题:传智播客java基础入门第二版答案
- 用友2020校招java笔试题_2020年快手校招JAVA岗笔试第三题-Go语言中文社区
- hashcat解密握手包
热门文章
- 学校的体育设施预订服务系统
- poj 2421 Constructing Roads
- 内网渗透-域内信息收集
- [论文阅读] (06) 万字详解什么是生成对抗网络GAN?经典论文及案例普及
- [网络安全自学篇] 二十四.基于机器学习的入侵检测和攻击识别——以KDD CUP99数据集为例
- 【数据结构与算法】之深入解析“分割数组的最大值”的求解思路与算法示例
- 20万人仍然每天活跃在“死”掉的ofo APP上:这已变成一个返利应用
- BASIC-13 数列排序
- 【ARM】Tiny4412裸板编程之MMU(段1M)
- 【Linux系统编程】进程间通信--无名管道(pipe)