K-means算法的matlab程序
K-means算法的matlab程序
在“K-means算法的matlab程序(初步)”这篇文章中已经用matlab程序对iris数据库进行简单的实现,下面的程序最终的目的是求准确度。
作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/
1.采用iris数据库
iris_data.txt
5.1 3.5 1.4 0.2
4.9 1.4 0.2
4.7 3.2 1.3 0.2
4.6 3.1 1.5 0.2
3.6 1.4 0.2
5.4 3.9 1.7 0.4
4.6 3.4 1.4 0.3
3.4 1.5 0.2
4.4 2.9 1.4 0.2
4.9 3.1 1.5 0.1
5.4 3.7 1.5 0.2
4.8 3.4 1.6 0.2
4.8 1.4 0.1
4.3 1.1 0.1
5.8 1.2 0.2
5.7 4.4 1.5 0.4
5.4 3.9 1.3 0.4
5.1 3.5 1.4 0.3
5.7 3.8 1.7 0.3
5.1 3.8 1.5 0.3
5.4 3.4 1.7 0.2
5.1 3.7 1.5 0.4
4.6 3.6 0.2
5.1 3.3 1.7 0.5
4.8 3.4 1.9 0.2
1.6 0.2
3.4 1.6 0.4
5.2 3.5 1.5 0.2
5.2 3.4 1.4 0.2
4.7 3.2 1.6 0.2
4.8 3.1 1.6 0.2
5.4 3.4 1.5 0.4
5.2 4.1 1.5 0.1
5.5 4.2 1.4 0.2
4.9 3.1 1.5 0.2
3.2 1.2 0.2
5.5 3.5 1.3 0.2
4.9 3.6 1.4 0.1
4.4 1.3 0.2
5.1 3.4 1.5 0.2
3.5 1.3 0.3
4.5 2.3 1.3 0.3
4.4 3.2 1.3 0.2
3.5 1.6 0.6
5.1 3.8 1.9 0.4
4.8 1.4 0.3
5.1 3.8 1.6 0.2
4.6 3.2 1.4 0.2
5.3 3.7 1.5 0.2
3.3 1.4 0.2
3.2 4.7 1.4
6.4 3.2 4.5 1.5
6.9 3.1 4.9 1.5
5.5 2.3 1.3
6.5 2.8 4.6 1.5
5.7 2.8 4.5 1.3
6.3 3.3 4.7 1.6
4.9 2.4 3.3
6.6 2.9 4.6 1.3
5.2 2.7 3.9 1.4
3.5
5.9 4.2 1.5
2.2
6.1 2.9 4.7 1.4
5.6 2.9 3.6 1.3
6.7 3.1 4.4 1.4
5.6 4.5 1.5
5.8 2.7 4.1
6.2 2.2 4.5 1.5
5.6 2.5 3.9 1.1
5.9 3.2 4.8 1.8
6.1 2.8 1.3
6.3 2.5 4.9 1.5
6.1 2.8 4.7 1.2
6.4 2.9 4.3 1.3
6.6 4.4 1.4
6.8 2.8 4.8 1.4
6.7 1.7
2.9 4.5 1.5
5.7 2.6 3.5
5.5 2.4 3.8 1.1
5.5 2.4 3.7
5.8 2.7 3.9 1.2
2.7 5.1 1.6
5.4 4.5 1.5
3.4 4.5 1.6
6.7 3.1 4.7 1.5
6.3 2.3 4.4 1.3
5.6 4.1 1.3
5.5 2.5 1.3
5.5 2.6 4.4 1.2
6.1 4.6 1.4
5.8 2.6 1.2
2.3 3.3
5.6 2.7 4.2 1.3
5.7 4.2 1.2
5.7 2.9 4.2 1.3
6.2 2.9 4.3 1.3
5.1 2.5 1.1
5.7 2.8 4.1 1.3
6.3 3.3 2.5
5.8 2.7 5.1 1.9
7.1 5.9 2.1
6.3 2.9 5.6 1.8
6.5 5.8 2.2
7.6 6.6 2.1
4.9 2.5 4.5 1.7
7.3 2.9 6.3 1.8
6.7 2.5 5.8 1.8
7.2 3.6 6.1 2.5
6.5 3.2 5.1
6.4 2.7 5.3 1.9
6.8 5.5 2.1
5.7 2.5
5.8 2.8 5.1 2.4
6.4 3.2 5.3 2.3
6.5 5.5 1.8
7.7 3.8 6.7 2.2
7.7 2.6 6.9 2.3
2.2 1.5
6.9 3.2 5.7 2.3
5.6 2.8 4.9
7.7 2.8 6.7
6.3 2.7 4.9 1.8
6.7 3.3 5.7 2.1
7.2 3.2 1.8
6.2 2.8 4.8 1.8
6.1 4.9 1.8
6.4 2.8 5.6 2.1
7.2 5.8 1.6
7.4 2.8 6.1 1.9
7.9 3.8 6.4
6.4 2.8 5.6 2.2
6.3 2.8 5.1 1.5
6.1 2.6 5.6 1.4
7.7 6.1 2.3
6.3 3.4 5.6 2.4
6.4 3.1 5.5 1.8
4.8 1.8
6.9 3.1 5.4 2.1
6.7 3.1 5.6 2.4
6.9 3.1 5.1 2.3
5.8 2.7 5.1 1.9
6.8 3.2 5.9 2.3
6.7 3.3 5.7 2.5
6.7 5.2 2.3
6.3 2.5 1.9
6.5 5.2
6.2 3.4 5.4 2.3
5.9 5.1 1.8
iris_id.txt
2.matlab源程序:
My_Kmeans.m
function label_1=My_Kmeans(K)
%输入K:聚类数
%输出:label_1:聚的类, para_miu_new:聚类中心μ
format long
eps=1e-5; %定义迭代终止条件的eps
data=dlmread('E:\www.cnblogs.comkailugaji\data\iris\iris_data.txt');
%----------------------------------------------------------------------------------------------------
%对data做最大-最小归一化处理
[data_num,~]=size(data);
X=(data-ones(data_num,1)*min(data))./(ones(data_num,1)*(max(data)-min(data)));
[X_num,~]=size(X);
%----------------------------------------------------------------------------------------------------
%随机初始化K个聚类中心
rand_array=randperm(X_num); %产生1~X_num之间整数的随机排列
para_miu_new=X(rand_array(1:K),:); %随机排列取前K个数,在X矩阵中取这K行作为初始聚类中心
responsivity=zeros(X_num,K);
%----------------------------------------------------------------------------------------------------
%K-means算法
while true
para_miu=para_miu_new; %上一步的聚类中心
%欧氏距离,计算(X-para_miu)^2=X^2+para_miu^2-2*X*para_miu',矩阵大小为X_num*K
distant=repmat(sum(X.*X,2),1,K)+repmat(sum(para_miu.*para_miu,2)',X_num,1)-2*X*para_miu';
%返回distant每行最小值所在的下标
[~,label_1]=min(distant,[],2);
%构建隶属度矩阵X_num*K
for i=1:X_num
for j=1:K
responsivity(i,j)=isequal(j,label_1(i));
end
end
R_k=sum(responsivity,1); %分母,第k类的个数,1*k的矩阵
para_miu_new=diag(1./R_k)*responsivity'*X; %更新参数miu(聚类中心)
if norm(para_miu_new-para_miu)<=eps
break;
end
end
Eg_Kmeans.m
function ave_acc_kmeans=Eg_Kmeans(K,max_iter)
%输入K:聚的类,max_iter是最大迭代次数
%输出ave_acc_kmeans:迭代max_iter次之后的平均准确度
s=0;
for i=1:max_iter
label_1=My_Kmeans(K);
accuracy=succeed(K,label_1);
s=s+accuracy;
end
ave_acc_kmeans=s/max_iter;
3.结果
>> ave_acc_kmeans=Eg_Kmeans(3,50)
ave_acc_kmeans =
0.842533333333333
K-means算法的matlab程序的更多相关文章
- ISODATA聚类算法的matlab程序
ISODATA聚类算法的matlab程序 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 参考:Kmeans及ISODATA算法的matlab实现 算法 ...
- GMM算法的matlab程序
GMM算法的matlab程序 在“GMM算法的matlab程序(初步)”这篇文章中已经用matlab程序对iris数据库进行简单的实现,下面的程序最终的目的是求准确度. 作者:凯鲁嘎吉 - 博客园 h ...
- GMM算法的matlab程序(初步)
GMM算法的matlab程序 在https://www.cnblogs.com/kailugaji/p/9648508.html文章中已经介绍了GMM算法,现在用matlab程序实现它. 作者:凯鲁嘎 ...
- KFCM算法的matlab程序(用FCM初始化聚类中心)
KFCM算法的matlab程序(用FCM初始化聚类中心) 在“聚类——KFCM”这篇文章中已经介绍了KFCM算法,现在用matlab程序对iris数据库进行实现,用FCM初始化聚类中心,并求其准确度与 ...
- KFCM算法的matlab程序
KFCM算法的matlab程序 在“聚类——KFCM”这篇文章中已经介绍了KFCM算法,现在用matlab程序对iris数据库进行简单的实现,并求其准确度. 作者:凯鲁嘎吉 - 博客园 http:// ...
- FCM算法的matlab程序2
FCM算法的matlab程序2 在“FCM算法的matlab程序”这篇文章中已经用matlab程序对iris数据库进行实现,并求解准确度.下面的程序是另一种方法,是最常用的方法:先初始化聚类中心,在进 ...
- FCM算法的matlab程序
FCM算法的matlab程序 在“FCM算法的matlab程序(初步)”这篇文章中已经用matlab程序对iris数据库进行简单的实现,下面的程序最终的目的是求准确度. 作者:凯鲁嘎吉 - 博客园 h ...
- FCM算法的matlab程序(初步)
FCM算法的matlab程序 在https://www.cnblogs.com/kailugaji/p/9648430.html文章中已经介绍了FCM算法,现在用matlab程序实现它. 作者:凯鲁嘎 ...
- K-means算法的matlab程序(初步)
K-means算法的matlab程序 在https://www.cnblogs.com/kailugaji/p/9648369.html 文章中已经介绍了K-means算法,现在用matlab程序实现 ...
随机推荐
- Spring Boot中如何扩展XML请求和响应的支持
在之前的所有Spring Boot教程中,我们都只提到和用到了针对HTML和JSON格式的请求与响应处理.那么对于XML格式的请求要如何快速的在Controller中包装成对象,以及如何以XML的格式 ...
- 本人开源项目 Lu-Rpc
Lu-Rpc 是个专为学习者准备的 RPC 框架, 初始架构非常简单, 可供初学者扩展和学习. Lu 可以认为是中文世界的撸, 即撸 Rpc--- 造个 Rpc 轮子. Lu-Rpc 架构图如下: L ...
- OpenCV入门之获取验证码的单个字符(字符切割)
介绍 在我们日常上网注册账号以及制作网络爬虫时,经常会遇到奇奇怪怪的验证码,有些容易,有些连人眼都无法辨识.于是,大牛们想到了用深度学习的方法来破解验证码,对于一般的验证码往往能出奇制胜,取得不俗 ...
- 通过批处理进行Windows服务的安装/卸载&启动/停止
安装服务 @echo off set checked=2 set PATHS=%~sdp0 echo 按任意键执行安装……? pause>nul if %checked% EQU 2 ( %PA ...
- oracle 查询表中重复数据
select * from tablename where id in (select id from tablename group by id having count(id) > 1)
- Tomcat服务器为java项目配置顶级域名
修改端口, Tomcat服务器下conf/server.xml文件 把端口号更改为80 解释:输入域名时默认进入80端口,如果没修改则需要输入端口号才能进入. Eg:www.xxx.com: ...
- 深入理解Redis内存模型
前言 Redis是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说Redis是实现网站高并发不可或缺的一部分. 我们使用Redis时,会接触Redis的5种对象类型(字符串 ...
- cloudera manager 安装配置
前面cloudera manager 环境准备和安装我参考的是: https://blog.csdn.net/m0_38017084/article/details/82218559 这篇博客,写的非 ...
- 6.方法_EJ
第38条: 检查参数的有效性 对于这一条,最常见的莫过于检查参数是否为null. 有时出现调用方未检查传入的参数是否为空,同时被调用方也没有检查参数是否为空,结果这就导致两边都没检查以至于出现null ...
- ASPxGridView 用法
一.ASPxGridView属性:概述设置(Settings) 1.1.Settings <Settings GridLines="Vertical" : 网格样式 Vert ...