matlab 职坐标,机器学习入门之机器学习实战ByMatlab(三)K-means算法
本文主要向大家介绍了机器学习入门之机器学习实战ByMatlab(三)K-means算法,通过具体的内容向大家展现,希望对大家学习机器学习入门有所帮助。K-means算法属于无监督学习聚类算法,其计算步骤还是挺简单的,思想也挺容易理解,而且还可以在思想中体会到EM算法的思想。
K-means 算法的优缺点:
1.优点:容易实现
2.缺点:可能收敛到局部最小值,在大规模数据集上收敛较慢
使用数据类型:数值型数据
以往的回归算法、朴素贝叶斯、SVM等都是有类别标签y的,因此属于有监督学习,而K-means聚类算法只有x,没有y
在聚类问题中,我们的训练样本是
其中每个Xi都是n维实数。
样本数据中没有了y,K-means算法是将样本聚类成k个簇,具体算法如下:
1、随机选取K个聚类质心点,记为
2、重复以下过程直到收敛
{
对每个样例 i ,计算其应该属于的类:
对每个类 j ,重新计算质心:
}
其中K是我们事先给定的聚类数目,Ci 表示样本 i 与K个聚类中最近的那个类,Ci的值是1到K中的一个,质心uj代表我们对属于同一个类的样本中心的猜测。解释起来就是,
第一步:天空上的我们随机抽取K个星星作为星团的质心,然后对于每一个星星 i,我们计算它到每一个质心uj的距离,选取其中距离最短的星团作为Ci,这样第一步每个星星都有了自己所属于的星团;
第二步:对每个星团Ci,我们重新计算它的质心uj(计算方法为对属于该星团的所有点的坐标求平均)不断重复第一步和第二步直到质心变化很小或者是不变。
然后问题来了,怎么样才算质心变化很小或者是不变?或者说怎么判定?答案就是畸变函数(distortion function),定义如下:
J函数表示每个样本点到其质心的距离平方和,K-means的收敛就是要将 J 调整到最小,假设当前 J 值没有达到最小值,那么可以先固定每个类的质心 uj ,调整每个样例的类别 Ci 来时 J 函数减少。同样,固定 Ci ,调整每个类的质心 uj也可以是 J 减少。这两个过程就是内循环中使 J 单调变小的过程。当 J 减小到最小的时候, u 和 c 也同时收敛。(该过程跟EM算法其实还是挺像的)理论上可能出现多组 u 和 c 使 J 取得最小值,但这种情况实际上很少见。
由于畸变函数 J 是非凸函数,所以我们不能保证取得的最小值一定是全局最小值,这说明k-means算法质心的初始位置的选取会影响到最后最小值的获取。不过一般情况下,k-means算法达到的局部最优已经满足要求。如果不幸代码陷入局部最优,我们可以选取不同的初始值跑多几遍 k-means 算法,然后选取其中最小的 J 对应的 u 和 c 输出。
另一种收敛判断:
实际我们编写代码的时候,还可以通过判断“每个点被分配的质心是否改变”这个条件来判断聚类是否已经收敛
而上面所说的畸变函数则可以用来评估收敛的效果,具体将会在下面的实例中体现。
Matlab 实现
function kMeans
clc
clear
K = 4;
dataSet = load(‘testSet.txt‘);
[row,col] = size(dataSet);
% 存储质心矩阵
centSet = zeros(K,col);
% 随机初始化质心
for i= 1:col
minV = min(dataSet(:,i));
rangV = max(dataSet(:,i)) - minV;
centSet(:,i) = repmat(minV,[K,1]) + rangV*rand(K,1);
end
% 用于存储每个点被分配的cluster以及到质心的距离
clusterAssment = zeros(row,2);
clusterChange = true;
while clusterChange
clusterChange = false;
% 计算每个点应该被分配的cluster
for i = 1:row
% 这部分可能可以优化
minDist = 10000;
minIndex = 0;
for j = 1:K
distCal = distEclud(dataSet(i,:) , centSet(j,:));
if (distCal
minDist = distCal;
minIndex = j;
end
end
if minIndex ~= clusterAssment(i,1)
clusterChange = true;
end
clusterAssment(i,1) = minIndex;
clusterAssment(i,2) = minDist;
end
% 更新每个cluster 的质心
for j = 1:K
simpleCluster = find(clusterAssment(:,1) == j);
centSet(j,:) = mean(dataSet(simpleCluster‘,:));
end
end
figure
%scatter(dataSet(:,1),dataSet(:,2),5)
for i = 1:K
pointCluster = find(clusterAssment(:,1) == i);
scatter(dataSet(pointCluster,1),dataSet(pointCluster,2),5)
hold on
end
%hold on
scatter(centSet(:,1),centSet(:,2),300,‘+‘)
hold off
end
% 计算欧式距离
function dist = distEclud(vecA,vecB)
dist = sqrt(sum(power((vecA-vecB),2)));
end
效果如下:
这是正常分类的情况,很明显被分为了4个类,不同颜色代表不同的类,cluster的质心为 “ + ”
当然,这只是其中一种情况,很有可能我们会出现下面这种情况:
这就是上面所说的,K-means的缺点之一,随机初始点的选择可能会让算法陷入局部最优解,这时候我们只需重新运行一次程序即可。
至于每一个看似都可以正常聚类的情况呢,我们则利用上面所说的“畸变函数”来衡量聚类的效果,当然是J越小聚类效果越好。
实际使用的时候,我们只需多次运行程序,选取J最小的聚类效果。
$(function () {
$(‘pre.prettyprint code‘).each(function () {
var lines = $(this).text().split(‘\n‘).length;
var $numbering = $(‘‘).addClass(‘pre-numbering‘).hide();
$(this).addClass(‘has-numbering‘).parent().append($numbering);
for (i = 1; i <= lines; i++) {
$numbering.append($(‘
‘).text(i));
};
$numbering.fadeIn(1700);
});
});
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标人工智能机器学习频道!
matlab 职坐标,机器学习入门之机器学习实战ByMatlab(三)K-means算法相关推荐
- 机器学习入门与Python实战(三):分类与逻辑回归 Logistic Regression
目录 现实案例 分类预测 通过股价预测任务区分回归任务与分类任务 分类问题求解 更适合于分类场景的模型:逻辑回归 逻辑回归处理更复杂的分类任务 逻辑回归模型求解 Python实战:商业异常消费数据预测 ...
- python根据品种散点图鸢尾花_python机器学习入门到精通--实战分析(三)
利用sklearn分析鸢尾花 前面两篇文章提到了机器学习的入门的几个基础库及拓展练习,现在我们就对前面知识点进行汇总进行一个简单的机器学习应用,并构建模型. 练习即假定一名植物专家收集了每一朵鸢尾花的 ...
- matlab 职坐标,Axure入门与基础常用函数解析整理
元件函数 序号 函数 说明 使用方法 1 Widget.Width 获取元件的宽度 ...
- matlab 职坐标,Java入门 集成开发环境(IDE)
l 什么是IDE? 集成开发环境(Integrated Development Environment,简称IDE)是用于提供程序开发环境的应用程序,一般包括代码编辑器.编译器.调试器和图形用户界面工 ...
- matlab 职坐标,机器学习入门之机器学习实战ByMatlab(四)二分K-means算法
本文主要向大家介绍了机器学习入门之机器学习实战ByMatlab(四)二分K-means算法,通过具体的内容向大家展现,希望对大家学习机器学习入门有所帮助.前面我们在是实现K-means算法的时候,提到 ...
- python3中多项式创建_机器学习入门之机器学习之路:python 多项式特征生成PolynomialFeatures 欠拟合与过拟合...
本文主要向大家介绍了机器学习入门之机器学习之路:python 多项式特征生成PolynomialFeatures 欠拟合与过拟合,通过具体的内容向大家展现,希望对大家学习机器学习入门有所帮助. 分享 ...
- l2正则化python_机器学习入门之机器学习之路: python线性回归 过拟合 L1与L2正则化...
本文主要向大家介绍了机器学习入门之机器学习之路: python线性回归 过拟合 L1与L2正则化,通过具体的内容向大家展现,希望对大家学习机器学习入门有所帮助. 正则化: 提高模型在未知数据上的 ...
- python svr回归_机器学习入门之机器学习之路:python支持向量机回归SVR 预测波士顿地区房价...
本文主要向大家介绍了机器学习入门之机器学习之路:python支持向量机回归SVR 预测波士顿地区房价,通过具体的内容向大家展现,希望对大家学习机器学习入门有所帮助. 支持向量机的两种核函数模型进行预 ...
- 机器学习入门 01 —— 机器学习概述
文章目录 系列文章 机器学习概述 1.1.人工智能概述 1 人工智能应用场景 2 人工智能小案例 3 人工智能发展必备三要素 4 人工智能.机器学习和深度学习 5 小结 1.2.人工智能发展历程 1. ...
最新文章
- Tomcat无法访问中文路径的解决办法
- 桌面虚拟化之运维支持
- 深入体验JavaWeb开发内幕——简述JSP中的自定义标签叫你快速学会
- 公安部身份证阅读器模块SAM通讯协议
- PHP重置static静态变量
- 局域网计算机无法配置网关,在内网中,为什么不设置“默认网关”计算机也能互相通讯?...
- 安居客Android项目架构演进
- 构造器模式(Builder模式)
- inav向STM32F401CCU开发板定制的过程(一)
- JavaScript浏览器对象之window对象详解
- 【数据结构课设】家谱管理系统(内附源码)
- 数据结构丿丶树 哈夫曼树
- Hash算法及数字签名【六】
- 计算机英语(王艺)翻译(unit1-unit5)
- 为什么相敬如宾是对的?
- Unity 混音器AudioMixer使用注意
- iOS开发监测手机流量使用情况
- Unity项目优化-Alpha通道分离
- 华为机试 - 最大矩阵和
- Java基础【之】输出一个菱形(详解)
热门文章
- C++面向对象实例员工工资
- led名片模板_20个免费的高质量名片模板下载
- 前端----CSS嵌套方式,选择器,iframe
- 【文献阅读】用GAN来做遥感图像的变化检测(M. A. Lebedev等人,ISPRS,2018)
- 办公室计算机技巧知识,办公室电脑常用技巧有哪些【详解】
- 腾讯云轻量应用服务器CPU主频型号处理器说明
- 基于Android的班级管理APP的设计与实现
- 21.NVIC中断优先级管理
- TIMO 后台管理系统 v2.0.1 发布,加入 jwt 身份验证组件,基于 Spring Boot
- 2008年1月8日,完美时空首部战争史诗大作《赤壁》将开启正式内测。