本文主要向大家介绍了机器学习入门之机器学习实战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算法相关推荐

  1. 机器学习入门与Python实战(三):分类与逻辑回归 Logistic Regression

    目录 现实案例 分类预测 通过股价预测任务区分回归任务与分类任务 分类问题求解 更适合于分类场景的模型:逻辑回归 逻辑回归处理更复杂的分类任务 逻辑回归模型求解 Python实战:商业异常消费数据预测 ...

  2. python根据品种散点图鸢尾花_python机器学习入门到精通--实战分析(三)

    利用sklearn分析鸢尾花 前面两篇文章提到了机器学习的入门的几个基础库及拓展练习,现在我们就对前面知识点进行汇总进行一个简单的机器学习应用,并构建模型. 练习即假定一名植物专家收集了每一朵鸢尾花的 ...

  3. matlab 职坐标,Axure入门与基础常用函数解析整理

    元件函数 序号    函数            说明                        使用方法 1       Widget.Width    获取元件的宽度             ...

  4. matlab 职坐标,Java入门 集成开发环境(IDE)

    l 什么是IDE? 集成开发环境(Integrated Development Environment,简称IDE)是用于提供程序开发环境的应用程序,一般包括代码编辑器.编译器.调试器和图形用户界面工 ...

  5. matlab 职坐标,机器学习入门之机器学习实战ByMatlab(四)二分K-means算法

    本文主要向大家介绍了机器学习入门之机器学习实战ByMatlab(四)二分K-means算法,通过具体的内容向大家展现,希望对大家学习机器学习入门有所帮助.前面我们在是实现K-means算法的时候,提到 ...

  6. python3中多项式创建_机器学习入门之机器学习之路:python 多项式特征生成PolynomialFeatures 欠拟合与过拟合...

    本文主要向大家介绍了机器学习入门之机器学习之路:python 多项式特征生成PolynomialFeatures  欠拟合与过拟合,通过具体的内容向大家展现,希望对大家学习机器学习入门有所帮助. 分享 ...

  7. l2正则化python_机器学习入门之机器学习之路: python线性回归 过拟合 L1与L2正则化...

    本文主要向大家介绍了机器学习入门之机器学习之路: python线性回归 过拟合 L1与L2正则化,通过具体的内容向大家展现,希望对大家学习机器学习入门有所帮助. 正则化:    提高模型在未知数据上的 ...

  8. python svr回归_机器学习入门之机器学习之路:python支持向量机回归SVR 预测波士顿地区房价...

    本文主要向大家介绍了机器学习入门之机器学习之路:python支持向量机回归SVR  预测波士顿地区房价,通过具体的内容向大家展现,希望对大家学习机器学习入门有所帮助. 支持向量机的两种核函数模型进行预 ...

  9. 机器学习入门 01 —— 机器学习概述

    文章目录 系列文章 机器学习概述 1.1.人工智能概述 1 人工智能应用场景 2 人工智能小案例 3 人工智能发展必备三要素 4 人工智能.机器学习和深度学习 5 小结 1.2.人工智能发展历程 1. ...

最新文章

  1. Tomcat无法访问中文路径的解决办法
  2. 桌面虚拟化之运维支持
  3. 深入体验JavaWeb开发内幕——简述JSP中的自定义标签叫你快速学会
  4. 公安部身份证阅读器模块SAM通讯协议
  5. PHP重置static静态变量
  6. 局域网计算机无法配置网关,在内网中,为什么不设置“默认网关”计算机也能互相通讯?...
  7. 安居客Android项目架构演进
  8. 构造器模式(Builder模式)
  9. inav向STM32F401CCU开发板定制的过程(一)
  10. JavaScript浏览器对象之window对象详解
  11. 【数据结构课设】家谱管理系统(内附源码)
  12. 数据结构丿丶树 哈夫曼树
  13. Hash算法及数字签名【六】
  14. 计算机英语(王艺)翻译(unit1-unit5)
  15. 为什么相敬如宾是对的?
  16. Unity 混音器AudioMixer使用注意
  17. iOS开发监测手机流量使用情况
  18. Unity项目优化-Alpha通道分离
  19. 华为机试 - 最大矩阵和
  20. Java基础【之】输出一个菱形(详解)

热门文章

  1. C++面向对象实例员工工资
  2. led名片模板_20个免费的高质量名片模板下载
  3. 前端----CSS嵌套方式,选择器,iframe
  4. 【文献阅读】用GAN来做遥感图像的变化检测(M. A. Lebedev等人,ISPRS,2018)
  5. 办公室计算机技巧知识,办公室电脑常用技巧有哪些【详解】
  6. 腾讯云轻量应用服务器CPU主频型号处理器说明
  7. 基于Android的班级管理APP的设计与实现
  8. 21.NVIC中断优先级管理
  9. TIMO 后台管理系统 v2.0.1 发布,加入 jwt 身份验证组件,基于 Spring Boot
  10. 2008年1月8日,完美时空首部战争史诗大作《赤壁》将开启正式内测。