[机器学习笔记]Note11--聚类

继续是机器学习课程的笔记,本节介绍的是聚类方法,主要是K-means算法。

非监督学习

首先介绍监督学习和非监督学习的区别。一个监督学习的例子如下图,给定训练集如:{(x(1),y(1)),(x(2),y(2)),,(x(m),y(m))},每个训练实例都有对应的标签。

这里写图片描述

而对于非监督学习,其例子如下图所示,给定训练集是如:{x(1),x(2),,x(m)},,一般可以使用聚类的方法将训练集的数据进行划分。

这里写图片描述

K-均值算法(K-means)

K-均值是最普及的聚类算法,算法接受一个未标记的数据集,然后将数据集聚类成不同的组。

K-均值是一个迭代算法,假设我们想要将数据聚类成n个组,其方法为:

  1. 首先选择K个随机的点,称其为聚类中心
  2. 对于数据集中的每一个数据,按照距离K个中心点的距离,将其与距离最近的中心点关联起来,与同一个中心点关联的所有点聚成一个类
  3. 计算每一个组的平均值,将该组所关联的中心点移动到平均值的位置
  4. 重复步骤2-3,直到中心点不再变化

下面是一个聚类示例,这是迭代1次的状态,可以看出初始有3群数据,初始聚类中心有3个。如下所示

这里写图片描述

然后是迭代3次时候的情况,如下所示,初始聚类中心开始移动。

这里写图片描述

这是迭代10次后,初始聚类中心已经分别移动到3群数据的中心位置。

这里写图片描述

这里用μ1,μ2,,μm来表示聚类中心,用c(1),c(2),,c(m)来存储与第i个实例数据最近的聚类中心的索引,K-均值算法的伪代码如下所示:

Repeat{
for i = 1 to m
c(i) := index (from 1 to K) of cluster centroid closed to x(i)
for k = 1 to K
μk:= average (mean) of points assigned to cluster K
}

这个算法分为两个步骤,第一个for循环是计算数据集每个数据与聚类中心的距离,然后分别将最近的聚类中心的索引赋值到对应的c(i),而第二个for循环就是移动聚类中心到其类平均值处。

当然在这个过程中可能遇到有聚类中心是没有分配数据点给它的,通常的一个做法是删除这种聚类中心,或者是重新选择聚类中心,保证聚类中心数还是初始设定的K个。

K-均值算法是可以很方便将数据分为不同组的,即使是在没有非常明显区分的组群的情况下也可以。如下图是一个包含身高和体重两个特征的数据集,可以利用K-均值算法将数据分为三类,用于帮助确定将要生产的T-恤的三种尺寸。

这里写图片描述

优化目标

K-均值最小化问题,就是最小化所有的数据点与其所关联的聚类中心之间的距离之和,因此K-均值的代价函数(又称为畸变函数)为:

J(c(1),c(2),,c(m),μ1,μ2,,μm)=1mi=1m||x(i)μc(i)||2

其中 μc(i)代表与 x(i)最近的聚类中心点。

所以我们的优化目标是找出是的代价函数最小的c(1),c(2),,c(m)μ1,μ2,,μm:

minc(1),c(2),,c(m),μ1,μ2,,μmJ(c(1),c(2),,c(m),μ1,μ2,,μm)

回顾上一小节中K-均值迭代算法的伪代码可知,第一个循环就是用于减小c(i)引起的代价,而第二个循环则是用于减小μi引起的代价,因此,迭代的过程一定会是每一次迭代都在减小代价函数,不然便是出现了错误。

随机初始化

在运行K-均值算法之前,首先需要随机初始化所有的聚类中心点,做法如下:

  1. 首先应该选择K<m,即聚类中心点的个数要小于所有训练集实例的数量
  2. 随机选择K个训练实例,然后令K个聚类中心分别于这K个训练实例相等

K-均值的一个问题在于,它有可能会停留在一个局部最小值处,而这取决于初始化的情况。

为了解决这个问题,通常需要多次运行K-均值算法,每一次都重新进行随机初始化,最后再比较多次运行K-均值的结果,选择代价函数最小的结果。这种方法在K较小(2-10)的时候还是可行的,但是如果K较大,这种做法可能不会有明显地改善。

选择聚类数

没有所谓最好的选择聚类数的方法,通常是需要根据不同的问题,人工进行选择的。选择的时候思考我们运用K-均值算法聚类的动机是什么,然后选择能最好服务于该目标的聚类数。

例如,在之前给出的T-恤制造例子中,我们要将用户按照身材聚类,我们可以分成3个尺寸S,M,L,也可以分成5个尺寸XS,S,M,L,XL,这样的选择是建立在回答“聚类后我们制造的T-恤是否能较好地适合我们的客户”这个问题的基础上做出的。

小结

本节课介绍了非监督学习中的聚类算法的一种最常用的K-均值算法,这种算法是比较简单,也比较常用。它的做法是先随机选择K个聚类中心,然后计算每个数据点到这K个聚类中心的距离,然后划分数据点到其最近的聚类中心,并视为一类,然后计算每类的平均值,再将聚类中心移动到这个类平均值处,然后再重复这几个步骤,直到聚类中心不再移动。

该算法的不足就是聚类中心数目的选择是需要多次实验才能得到最佳的,同时对于初始的聚类中心数,一般是使用随机初始化,所以可能导致算法落入局部最优,在K较小的情况可以多次运行算法,选择代价函数最小的一个。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/409055.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LLVM每日谈之十二 LLVM的源码分析之Pass相关

作者&#xff1a;snsn1984题记&#xff1a;在学习LLVM的过程中&#xff0c;要想学的更加深入&#xff0c;掌握更多的技能&#xff0c;LLVM的源码是必须要读的&#xff0c;但是在这么多的源码中&#xff0c;从哪里下手&#xff1f;很容易让人找不到头脑&#xff0c;本文这里就先…

[机器学习笔记]Note12--降维

继续是机器学习课程的笔记&#xff0c;本节介绍的是降维方法&#xff0c;这也是非监督学习中的一个问题&#xff0c;主要介绍主要成分分析&#xff08;Principal Component Analysis&#xff0c;PCA&#xff09;算法。 降维 动机一&#xff1a;数据压缩 使用降维的一个原因是…

jetty java 实例_Maven+Jetty+Servlet 简单示例

一个朋友让我帮他写一个基于 Servlet JettyDerby 实现的项目。本文先介绍 MavenJettyServlet 的整合例子。1、添加依赖pom.xml 里添加依赖javax.servletjavax.servlet-api3.1.0org.eclipse.jetty9.4.14.v20181114jetty-webapp2、准备两个 Servlet 例子HelloServletpackage com.…

节后的人才市场开始活跃了?

今天居然接到一个印度打来的电话&#xff0c;一印度MM操着纯正的印度英语居然说是从Linkedin上找到我的&#xff0c;希望我能参加他们杭州公司的面试&#xff0c;费了很大的劲也没让她弄明白我不愿意relocate。 只能说节后的人才市场就像快烧开的水&#xff0c;分子们开始活跃了…

mysql 静态表 是不是 myisam_mysql的静态表和动态表的区别,MyISAM和InnoDB的区别

静态表字段长度固定&#xff0c;自动填充&#xff0c;读写速度很快&#xff0c;便于缓存和修复&#xff0c;但比较占硬盘&#xff0c;动态表是字段长度不固定&#xff0c;节省硬盘&#xff0c;但更复杂&#xff0c;容易产生碎片&#xff0c;速度慢&#xff0c;出问题后不容易重…

[机器学习笔记]Note13--异常检测

继续是机器学习课程的笔记&#xff0c;本节课内容是异常检测&#xff0c;它是一个非监督学习算法&#xff0c;用于发现可能不应该属于一个已定义的组中的数据。 密度估计 首先是给出一个例子&#xff0c;如下图所示&#xff0c;是一个测试飞机引擎的例子&#xff0c;给定数据…

html5新增元素

一、HTML5新增结构元素 之前&#xff0c;我们只能用万能的div标签&#xff0c;并为其设置不同的id如header, footer, sidebar等来分别表达头部&#xff0c;底部或者侧栏等。而现在代码编写者不再需要为id的命名费尽心思&#xff0c;对于手机、阅读器等设备更有语义的好处。 HTM…

python 代码转程序_精悍的Python代码段-转

1 文件处理readlines() 和 writelines()方法可以讲列表元素依次写到文件中&#xff1b;file类本身没有提供复制方法&#xff0c;可以使用read()和write()方法模拟实现文件的拷贝&#xff0c;也可以使用shutil模块&#xff1a;shutil.copyfile(hello.txt,hello2.txt)shutil.move…

[机器学习笔记]Note14--推荐系统

继续是机器学习课程的笔记&#xff0c;本节课将介绍推荐系统的内容。 问题形式化 推荐系统是机器学习的一个非常重要的应用&#xff0c;在很多音乐、购物等网站都有推荐系统&#xff0c;如豆瓣&#xff0c;淘宝&#xff0c;网易云音乐等都是有使用到推荐系统的&#xff0c;因…

手机应用开发的方式不能完全套用到iPad上

对于一些复杂的游戏&#xff0c;许多人已经不能满足于手机小巧的屏幕&#xff0c;大屏的画面感就成为许多人选择平板电脑的重要因素。当越来越多的80后开始为人父母&#xff0c;孩子们从大人手中得到的礼物&#xff0c;也不再局限于零食、玩具和游乐场入场券。随着智能手机的普…

java面向对象编程思想_Java面向对象编程思想

面向对象三个特征&#xff1a;封装、继承、多态封装&#xff1a;语法&#xff1a;属性私有化(private)、提供相对应的get/set 的方法进行访问(public)、在set/get的方法中对属性的数据 做相对应的业务逻辑的判断思想&#xff1a;封装外面的程序不能直接访问本类的属性&#xff…

[机器学习笔记]Note15--大规模机器学习

继续是机器学习课程的笔记&#xff0c;本节内容主要是介绍大规模机器学习的内容。 大型数据集的学习 对于一个过拟合的模型&#xff0c;增加数据集的规模可以帮助避免过拟合&#xff0c;并获得一个更好的结果。 但是对于一个大规模的数据&#xff0c;比如有100万个数据量的训…

Linux管道和重定向 ---多命令协作

管道及重定向就是Linux多命令协作的基础机制Linux的Shell对数据流进行以下分类定义&#xff1a;   stdin 标准输入 编号为&#xff1a;0 默认&#xff1a;键盘  stdout 标准输出 编号为&#xff1a;1 默认&#xff1a;终端  stderr 标准错误 编号为&…

java 骰子_基本随机滚动骰子Java

5 个答案:答案 0 :(得分&#xff1a;12)Random.nextInt()具有不可预测的行为 - 它可以为整数生成所有可能的值&#xff0c;包括负数。改为使用Random.nextInt(numSides) - 它将从[0&#xff0c;numSides]返回一个整数&#xff0c;即包括0并排除numSides。要获得所需的功能[1&am…