首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

机器学习-无监督算法-聚类

聚类是数据挖掘中一种非常重要的学习流派,指将未标注的样本数据中相似的分为同一类,正所谓“物以类聚,人以群分”嘛。

k-means是聚类算法中最为简单、高效的,核心思想:由用户指定k个初始质心(initial centroids),以作为聚类的类别(cluster),重复迭代直至算法收敛。

换种说法就是,把n个对象分为k类,类里面的具有相似的特性,类与类之间就不具有那么高的相似性。

其中的原理过程是:

1.随机选择k个点作为初始的聚类中心

2.对于剩下的点,根据其与聚类中心的距离,将其归入最近的族

3.对于每个族,将会计算所有点的均值作为新的聚类中心

4.反复进行上述的步骤,直到收敛

简单看下,3族的例子:

缺点:

容易受到初始质心的影响,而易造成局部最优解时候,达到收敛。同时,k值的选取也会直接影响聚类结果,最优聚类的k值应与样本数据本身的结构信息相吻合,而这种结构信息是很难去掌握,因此选取最优k值是非常困难的。

项目步骤:

1.建立项目(例如各大类商品总额分),导入项目所需要的模块

import nump as np

from sklearn.cluster import KMeans

2.加载数据,对其进行训练聚类算法,从而获得标签

if __name__ = '__main__':

data,name = addData('project.txt')

km = KMeans(n_clusters=3)

label = km.fit_predict(data)

costs = np.sum(km.cluster_centers_,axis=1)

调用KMeans所需参数:

n_clusters 用于指定聚类中心个数;init 聚类中心初始化(默认k-means++);max_iter 最大迭代次数(默认300);axis 按行求和; fit_predict() 计算族中心以及分配族序号

def addData(filePath):

f = open(filePath,'r+')

lines = f.readlines()

retData = []

retName = []

for line in lines:

items = line.strip().split(",")

retName.append(items[0])

reData.append([float(items[i]) for i in range(1,len(items))])

return retName, retData

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190125G0IL6Z00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券