机器学习kmeans聚类算法与应用精要.docx

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
机器学习kmeans聚类算法与应用精要

机器学习算法day02_Kmeans聚类算法及应用课程大纲Kmeans聚类算法原理Kmeans聚类算法概述Kmeans聚类算法图示Kmeans聚类算法要点Kmeans聚类算法案例需求用Numpy手动实现用Scikili机器学习算法库实现Kmeans聚类算法补充算法缺点改良思路课程目标:理解Kmeans聚类算法的核心思想理解Kmeans聚类算法的代码实现掌握Kmeans聚类算法的应用步骤:数据处理、建模、运算和结果判定1. Kmeans聚类算法原理1.1 概述K-means算法是集简单和经典于一身的基于距离的聚类算法采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大。该算法认为类簇是由距离靠近的对象组成的,因此把得到紧凑且独立的簇作为最终目标。1.2 算法图示假设我们的n个样本点分布在图中所示的二维空间。从数据点的大致形状可以看出它们大致聚为三个cluster,其中两个紧凑一些,剩下那个松散一些,如图所示:我们的目的是为这些数据分组,以便能区分出属于不同的簇的数据,给它们标上不同的颜色,如图:1.3 算法要点1.3.1 核心思想通过迭代寻找k个类簇的一种划分方案,使得用这k个类簇的均值来代表相应各类样本时所得的总体误差最小。k个聚类具有以下特点:各聚类本身尽可能的紧凑,而各聚类之间尽可能的分开。?k-means算法的基础是最小误差平方和准则,其代价函数是:? ? ? ?式中,μc(i)表示第i个聚类的均值。各类簇内的样本越相似,其与该类均值间的误差平方越小,对所有类所得到的误差平方求和,即可验证分为k类时,各聚类是否是最优的。上式的代价函数无法用解析的方法最小化,只能有迭代的方法。1.3.2 算法步骤图解下图展示了对n个样本点进行K-means聚类的效果,这里k取2。1.3.3 算法实现步骤k-means算法是将样本聚类成 k个簇(cluster),其中k是用户给定的,其求解过程非常直观简单,具体算法描述如下:随机选取 k个聚类质心点重复下面过程直到收敛? {? ? ? 对于每一个样例 i,计算其应该属于的类:? ? ? 对于每一个类 j,重新计算该类的质心:}? ?其伪代码如下:********************************************************************创建k个点作为初始的质心点(随机选择)当任意一个点的簇分配结果发生改变时? ? ? ?对数据集中的每一个数据点? ? ? ? ? ? ? 对每一个质心? ? ? ? ? ? ? ? ? ? ?计算质心与数据点的距离? ? ? ? ? ? ? 将数据点分配到距离最近的簇? ? ? ?对每一个簇,计算簇中所有点的均值,并将均值作为质心 ? 2. Kmeans分类算法Python实战2.1 需求对给定的数据集进行聚类本案例采用二维数据集,共80个样本,有4个类。样例如下:testSet.txt1.6589854.285136-3.4536873.4243214.838138-1.151539-5.379713-3.3621040.9725642.924086-3.5679191.5316110.450614-3.302219-3.487105-1.7244322.6687591.594842-3.1564853.1911373.165506-3.999838-2.786837-3.0993544.2081872.984927-2.1233372.9433660.704199-0.479481-0.392370-3.9637042.8316671.574018-0.7901533.3431442.943496-3.3570752.2 python代码实现2.2.1 利用numpy手动实现from numpy import *#加载数据def loadDataSet(fileName): dataMat = [] fr = open(fileName) for line in fr.readlines(): curLine = line.strip().split(\t) fltLine = map(float, curLine) #变成float类型 dataMat.append(fltLine) return dataMat# 计算欧几里得距离def distEclud(vecA, vecB): return sqrt(sum(power(vecA - vecB, 2)))#构建聚簇中心def randCent(dataSet, k): n = shape(dataSet)[1] centroids = mat(ze

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档