K-Means 算法

K-Means 算法

1.聚类算法的前世今生

k-均值(K-Means):
  • K均值法是麦奎因(MacQueen,1967年)提出的

  • 这种算法的基本思想是将每一个样品分配给最近中心(均值)的类中

  • 俗话说:“物以类聚,人以群分”,所谓类,通俗地说,就是指相似元素的集合。每个事物找到和自己相似的作为一类的过程就是聚类

  • 聚类分析又称群分析,它是研究(样品或指标)分类问题的一种统计分析方法,同时也是数据挖掘

    的一个重要算法。

举例说明:
  • 人的行为特点,动作,性格等,这些是什么——特征
  • 那么我们又用什么去区分这些的呢——相似程度
聚类的意义:
  • 将大规模的、纷繁复杂的数据归档为不同的类别,因为每一类的数据都是显著不同的,进而针对每一

    类数据,制定不同的管理、分析方式

聚类的应用:
  • 电子商务
  • 社区发现
  • 信用卡诈骗
  • 企业信用等级划分


2.K-Means算法原理

  • 什么是K-Means聚类算法
    • 数据点到原型的某种距离作为优化的目标函数,利用函数求极值的方法得到迭代运算的调整规则。

    • K-means算法以欧式距离作为相似度测度,它是求对应某一初始聚类中心向量V最优分类,使得**评价指*标J(目标函数)**最小

    • 算法采用**误差平方和**准则函数作为聚类准则函数

image-20220716144250491

K-Means算法过程★

算法过程如下:

(1)从数据集中随机选取K个数据作为初始质心,质心点不一定是数据集中的数据.

(2)对剩余的每个数据测量其到每个质心的距离,并把它归到最近的质心的类.

(3)计算类的每个点到质心的距离,并求平均,作为新一轮的质心.

(4)迭代2~3步直至新的质心与原质心相等(质心不变)或达到预期的迭代步骤数或误差平方和小于预期,算法结束

经验: 用k-means时,列数不要太多(7-8列最好,尽量不超过10列,最最最多不要超过20列),到最后可能总结不出来.

image-20220716144353013

相似度/聚类计算方法总结

image-20220716144449923

重点 : 欧式距离 和 余弦相似度

机器学习中的数学——距离定义:基础知识



3.K-Means的优缺点

优点:
  • 算法快速、简单。

  • 对大数据集有较高的效率,并且是可伸缩性的。

  • 时间复杂度近于线性,而且适合挖掘大规模数据集。

    • K-Means聚类算法的时间复杂度是O(nkt)
    • n:代表数据集中对象的数量
    • t:代表着算法迭代的次数
    • k:代表着簇的数目。
缺点:
  • 在 K-means 算法中K是事先给定的,这个 K 值的选定是非常难以估计的。

  • 在 K-means 算法中,初始聚类中心默认是随机选取的,不同的初始聚类中心,得到的聚类结果不同。

  • 从 K-means 算法需要不断地进行样本分类调整,不断地计算调整后的新的聚类中心,因此当数据量非常大时,算法的时间复杂度非常大的。



4.K-Means代码实现

导入模块

from sklearn.cluster import KMeans

准备数据

feature = data[['house_lat', 'house_lng']]

调用 kmeans 类

clf = KMeans()   # 准备模型
clf.fit(feature)  #拟合数据

查看数据

clf.cluster_centers_  # 查看簇的中心,默认有8个类,就有8个簇心
clf.labels_  #查看样本所属的类
clf.intertia_  #误差平方和
clf.predict(data)   # 预测数据

K-Means函数介绍★
KMeans(n_clusters=8,init='k-means++',n_init=10,max_iter=300,tol=0.0001,precompute_distance='auto',verbose=0.random_state=None,copy_x=True,n_jobs=1)
属性

– cluster_centers_ 得到最终那步的所有簇的中心

– labels_ 样本所属的簇

– inertia _ 用来评估簇的个数是否合适,距离越小说明簇分的越好,选取误差平方和

方法

– fit 拟合数据

– fit_predict fit + preduct 的意思

– predict 进行预测

– get_params 忘记参数了.可以使用get_params调用参数

– set_params 可以改变模型的参数


思考点:
  1. k是越大越好吗?

并不是,k值越大,其实数据间的内在练习越少.

  1. 误差平方和越小越好吗?

一定层面上是误差平方和越小也好,但是并不是由k值极限变大带来的误差平方和越小越好.

  • 我们的目标是找到误差平方和变化的拐点,拐点处的k值才是我们想要的k值

K-Means参数介绍
  • n_clusters:整形,缺省值=8

    • 生成的聚类数,即产生的质心(centroids)数。
  • max_iter:整形,缺省值=300

    • 执行一次k-means算法所进行的最大迭代数
  • n_init:整形,缺省值=1 0

    • 用不同的质心初始化值运行算法的次数,最终解是在inertia意义下选出的最优结果
  • init:有三个可选值:‘k-means++’, ‘random’,或者传递一个ndarray向量。

    • 此参数指定初始化方法,默认值为 ‘k-means++
    • ‘k-means++’ 用一种特殊的方法选定初始质心从而能加速迭代过程的收敛,参见 k_init 的解释获取更多信息
    • ‘random’ 随机从训练数据中选取初始质心。
    • 如果传递的是一个ndarray,则应该形如 (n_clusters, n_features) 并给出初始质心
  • precompute_distances:三个可选值,‘auto’,True 或者 False。

  • ‘auto’</:如果 样本数乘以聚类数大于 12million 的话则不预计算距离。

    • True:总是预先计算距离
    • False:永远不预先计算距离。
  • tol:float形,默认值= 1e-4

    • 与inertia结合来确定收敛条件
  • n_jobs:整形数

    • 指定计算所用的进程数。内部原理是同时进行n_init指定次数的计算
    • 若值为 -1,则用所有的CPU进行运算。若值为1,则不进行并行运算,这样的话方便调试。若值小于-1,则用到的CPU数为(n_cpus + 1 + n_jobs)。因此如果 n_jobs值为-2,则用到的CPU数为总CPU数减1。
  • random_state:整形或 numpy.RandomState 类型,可选

  • verbose:整形,默认值=0

    • Verbosity mode,冗长模式
  • copy_x:布尔型,默认值=True
    算。若值为1,则不进行并行运算,这样的话方便调试。若值小于-1,则用到的CPU数为(n_cpus + 1 + n_jobs)。因此如果 n_jobs值为-2,则用到的CPU数为总CPU数减1。

  • random_state:整形或 numpy.RandomState 类型,可选

  • verbose:整形,默认值=0

    • Verbosity mode,冗长模式
  • copy_x:布尔型,默认值=True

    • 当我们precomputing distances时,将数据中心化会得到更准确的结果。如果把此参数值设为True,则原始数据不会被改变。如果是False,则会直接在原始数据 上做修改并在函数返回值时将其还原。但是在计算过程中由于有对数据均值的加减运算,所以数据返回后,原始数据和计算前可能会有细小差别本
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值