文章目录

  • 一、解析
  • 二、效果
    • 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实现)相关推荐

  1. kmeans改进 matlab,基于距离函数的改进k―means 算法

    摘要:聚类算法在自然科学和和社会科学中都有很普遍的应用,而K-means算法是聚类算法中经典的划分方法之一.但如果数据集内相邻的簇之间离散度相差较大,或者是属性分布区间相差较大,则算法的聚类效果十分有 ...

  2. 机器学习——K近邻算法(KNN)(K Nearest Neighbor)

    参考视频与文献: python与人工智能-KNN算法实现_哔哩哔哩_bilibili 机器学习--K近邻算法(KNN)及其python实现_清泉_流响的博客-CSDN博客_python实现knn 机器 ...

  3. 我的K均值算法的matlab实现

    这是我的第一篇博客: K-Means算法过程,略: 这是一次课程的任务2333,是利用所学K-means聚类分析方法,对iris数据集进行聚类分析,并利用已知的样本类别标 签进行聚类分析评价: 我的K ...

  4. [机器学习]K近邻算法及其应用--WEKA工具

    K近邻算法理论基础 k近邻模型 距离度量 k值的选择 分类决策规则 WEKA实战 问题背景 数据预处理 得到分类器 对未知的数据进行分类预测 K近邻算法理论基础 (本节内容参考了:李航<统计学习 ...

  5. 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工具 ...

  6. 2 机器学习 K近邻算法(KNN) 学习曲线 交叉验证 手写数字识别

    机器学习 1 K-近邻算法介绍 1.1 分类问题 分类问题:根据已知样本的某些特征,判断一个未知样本属于哪种样本类别. 与回归问题相比,分类问题的输出结果是离散值,用于指定输入的样本数据属于哪个类别. ...

  7. k means算法C语言伪代码,K均值算法(K-Means)

    1. K-Means算法步骤 算法步骤 收敛性定义,畸变函数(distortion function): 伪代码: 1) 创建k个点作为K个簇的起始质心(经常随机选择) 2) 当任意一个点的蔟分配结果 ...

  8. 机器学习[k近邻算法]

    k近邻算法简称kNN算法,由Thomas等人在1967年提出[1].它基于以下思想:要确定一个样本的类别,可以计算它与所有训练样本的距离,然后找出和该样本最接近的k个样本,统计这些样本的类别进行投票, ...

  9. 机器学习 感知机算法_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] ...

最新文章

  1. 重温强化学习之马尔可夫决策过程(MDPs)
  2. Redis:事件驱动(IO多路复用)
  3. 区域数据导入功能(OCUpload插件使用)
  4. jsr303jsp页面怎么显示错误信息_springmvc使用JSR-303进行数据校验实例
  5. pom添加mysql依赖tomcat崩溃_Spring Boot + Mybatis + Spring MVC环境配置(一) :Spring Boot初始化,依赖添加...
  6. 英伟达_如何超越英伟达?
  7. 谷歌Pixel 4真机曝光:宽大额头内含诸多玄机
  8. C++之new和delete探究
  9. epoll原理_Epoll源码阅读手札
  10. python中如何调用类_python中如何调用类的方法
  11. Fuel 9.0安装Openstack由于NTP检查没通过导致失败--解决办法
  12. matlab fullfile函数
  13. 微信公众号生成个性化推广二维码
  14. 酷睿7代cpu安装win7
  15. 服务器安全文件,文件服务器安全防护系统-虹安 - 数据防泄密,文档加密,源代码防泄密,数据防泄漏,DLP数据防泄密整体解决方案提供商...
  16. resultFul请求案例
  17. 工业级芯片可靠性试验项目条件
  18. 数据库索引高频面试题:传智播客java基础入门第二版答案
  19. 用友2020校招java笔试题_2020年快手校招JAVA岗笔试第三题-Go语言中文社区
  20. hashcat解密握手包

热门文章

  1. 学校的体育设施预订服务系统
  2. poj 2421 Constructing Roads
  3. 内网渗透-域内信息收集
  4. [论文阅读] (06) 万字详解什么是生成对抗网络GAN?经典论文及案例普及
  5. [网络安全自学篇] 二十四.基于机器学习的入侵检测和攻击识别——以KDD CUP99数据集为例
  6. 【数据结构与算法】之深入解析“分割数组的最大值”的求解思路与算法示例
  7. 20万人仍然每天活跃在“死”掉的ofo APP上:这已变成一个返利应用
  8. BASIC-13 数列排序
  9. 【ARM】Tiny4412裸板编程之MMU(段1M)
  10. 【Linux系统编程】进程间通信--无名管道(pipe)