【机器学习】机器学习入门08 - 聚类与聚类算法K-Means

时间过得很快,这篇文章已经是机器学习入门系列的最后一篇了。短短八周的时间里,虽然对机器学习并没有太多应用和熟悉的机会,但对于机器学习一些基本概念已经差不多有了一个提纲挈领的了解,如分类和回归,损失函数,以及一些简单的算法——kNN算法、决策树算法等。
那么,今天就用聚类和K-Means算法来结束我们这段机器学习之旅。

1. 聚类

1.1 什么是聚类

将物理或抽象对象的集合分成由类似的对象组成的多个类的过程被称为聚类。由聚类所生成的簇是一组数据对象的集合,这些对象与同一个簇中的对象彼此相似,与其他簇中的对象相异。“物以类聚,人以群分”,在自然科学和社会科学中,存在着大量的分类问题。聚类分析又称群分析,它是研究(样品或指标)分类问题的一种统计分析方法。聚类分析起源于分类学,但是聚类不等于分类。聚类与分类的不同在于,聚类所要求划分的类是未知的。聚类分析内容非常丰富,有系统聚类法、有序样品聚类法、动态聚类法、模糊聚类法、图论聚类法、聚类预报法等。

——摘自百度百科“聚类”词条

聚类分析(英语:Cluster analysis)亦称为群集分析,是对于统计数据分析的一门技术,在许多领域受到广泛应用,包括机器学习,数据挖掘,模式识别,图像分析以及生物信息。聚类是把相似的对象通过静态分类的方法分成不同的组别或者更多的子集(subset),这样让在同一个子集中的成员对象都有相似的一些属性,常见的包括在坐标系中更加短的空间距离等。

一般把数据聚类归纳为一种非监督式学习。

——摘自Wikipedia“聚类分析”词条

翻译一下,聚类试图将数据集中的样本划分为若干个通常是不相交的子集,每个子集成为一个“簇”。
通过这样的划分,每个簇可能对应于一些潜在的概念(也就是类别),如“浅色瓜” “深色瓜”,“有籽瓜” “无籽瓜”,甚至“本地瓜” “外地瓜”等;需说明的是,这些概念对聚类算法而言事先是未知的,聚类过程仅能自动形成簇结构,簇对应的概念语义由使用者来把握和命名。(摘自 https://www.jianshu.com/p/caef1926adf7

1.2 聚类和分类的区别

聚类是无监督的学习算法,分类是有监督的学习算法。所谓有监督就是有已知标签的训练集(也就是说提前知道训练集里的数据属于哪个类别),机器学习算法在训练集上学习到相应的参数,构建模型,然后应用到测试集上。而聚类算法是没有标签的,聚类的时候,我们并不关心某一类是什么,我们需要实现的目标只是把相似的东西聚到一起。

用小球来举例:

  • 准备若干个盒子,分别标明“蓝色”、“红色”、“绿色”、“黄色”,把若干个上述四色的小球按照颜色投进相应的盒子里——分类
  • 准备若干个盒子,盒子与盒子之间没有任何区别。把若干个小球按心情分到不同的盒子里(如:颜色相差较大时,按照颜色分类;颜色接近时按照大小分类;大小也接近时按照柔软程度。抑或同时考虑这一系列因素)。
    简单来说,分类是把小球按照指定的标准扔到预先定制好的盒子里,聚类是把小球实时按照未知的标准扔到几个完全相同的盒子里。

2. 簇

聚类划分得到的每一组对象称为一个对象簇。要想进行有意义的聚类分析,获得有用的对象簇是最为关键的一步。以下是几种常用的簇:

(摘自 https://blog.csdn.net/taoyanqi8932/article/details/53727841
其中,基于中心的簇是我们接下来要研究的K-Means算法所要用到的簇类型。

提到距离,再重复一下之前的文章里提到过的各种距离类型。

我们最常用的,仍然是欧式距离(即差向量的2-范数)

3. K-Means算法

3.1 什么是K-Means算法

k均值聚类算法(k-means clustering algorithm)是一种迭代求解的聚类分析算法,其步骤是随机选取K个对象作为初始的聚类中心,然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。每分配一个样本,聚类的聚类中心会根据聚类中现有的对象被重新计算。这个过程将不断重复直到满足某个终止条件。终止条件可以是没有(或最小数目)对象被重新分配给不同的聚类,没有(或最小数目)聚类中心再发生变化,误差平方和局部最小。

——摘自百度百科“K均值聚类算法”词条

K-平均算法(英文:k-means clustering)源于信号处理中的一种向量量化方法,现在则更多地作为一种聚类分析方法流行于数据挖掘领域。k-平均聚类的目的是:把n个点(可以是样本的一次观察或一个实例)划分到k个聚类中,使得每个点都属于离他最近的均值(此即聚类中心)对应的聚类,以之作为聚类的标准。这个问题将归结为一个把数据空间划分为Voronoi cells的问题。

这个问题在计算上是NP困难的,不过存在高效的启发式算法。一般情况下,都使用效率比较高的启发式算法,它们能够快速收敛于一个局部最优解。这些算法通常类似于通过迭代优化方法处理高斯混合分布的最大期望算法(EM算法)。而且,它们都使用聚类中心来为数据建模;然而k-平均聚类倾向于在可比较的空间范围内寻找聚类,期望-最大化技术却允许聚类有不同的形状。

k-平均聚类与k-近邻之间没有任何关系(后者是另一流行的机器学习技术)。

——摘自Wikipedia“K-Means算法”词条

简而言之,K-Means算法做的事情是:对于给定的样本集,按照样本之间的距离大小,将样本集划分为K个簇。让簇内的点尽量紧密的连在一起,而让簇间的距离尽量的大。

3.2 K-Means算法的优缺点

  • 优点:

    • 简单,易于理解和实现;收敛快,一般仅需5-10次迭代即可,高效
  • 缺点:
    • 对K值得选取把握不同对结果有很大的不同
    • 对于初始点的选取敏感,不同的随机初始点得到的聚类结果可能完全不同
    • 对于不是凸的数据集比较难收敛
    • 对噪点过于敏感,因为算法是根据基于均值的
    • 结果不一定是全局最优,只能保证局部最优
    • 对球形簇的分组效果较好,对非球型簇、不同尺寸、不同密度的簇分组效果不好。

3.3 K-Means算法描述和代码实现

K-Means算法的流程描述如下:

给出一段参考的Python代码实现:

import numpy as np
import pandas as pd
import random
import sys
import time
class KMeansClusterer:
    def __init__(self,ndarray,cluster_num):
        self.ndarray = ndarray
        self.cluster_num = cluster_num
        self.points=self.__pick_start_point(ndarray,cluster_num)

    def cluster(self):
        result = []
        for i in range(self.cluster_num):
            result.append([])
        for item in self.ndarray:
            distance_min = sys.maxsize
            index=-1
            for i in range(len(self.points)):
                distance = self.__distance(item,self.points[i])
                if distance < distance_min:
                    distance_min = distance
                    index = i
            result[index] = result[index] + [item.tolist()]
        new_center=[]
        for item in result:
            new_center.append(self.__center(item).tolist())
        # 中心点未改变,说明达到稳态,结束递归
        if (self.points==new_center).all():
            return result

        self.points=np.array(new_center)
        return self.cluster()

    def __center(self,list):
        '''计算一组坐标的中心点
        '''
        # 计算每一列的平均值
        return np.array(list).mean(axis=0)
    def __distance(self,p1,p2):
        '''计算两点间距
        '''
        tmp=0
        for i in range(len(p1)):
            tmp += pow(p1[i]-p2[i],2)
        return pow(tmp,0.5)
    def __pick_start_point(self,ndarray,cluster_num):

        if cluster_num <0 or cluster_num > ndarray.shape[0]:
            raise Exception("簇数设置有误")

        # 随机点的下标
        indexes=random.sample(np.arange(0,ndarray.shape[0],step=1).tolist(),cluster_num)
        points=[]
        for index in indexes:
            points.append(ndarray[index].tolist())
        return np.array(points)

4. 结语

好了,为期八周的机器学习入门到这里就结束了。希望这段学习经历能够或多或少能在将来起到一些作用。
那么,笔者也终于可以全心全意开始课程设计和期末复习啦。Bye~

参考资料:

https://www.jianshu.com/p/caef1926adf7
https://blog.csdn.net/taoyanqi8932/article/details/53727841
https://zh.wikipedia.org/wiki/%E8%81%9A%E7%B1%BB%E5%88%86%E6%9E%90
https://zh.wikipedia.org/wiki/K-%E5%B9%B3%E5%9D%87%E7%AE%97%E6%B3%95
https://baike.baidu.com/item/K%E5%9D%87%E5%80%BC%E8%81%9A%E7%B1%BB%E7%AE%97%E6%B3%95/15779627?fr=aladdin
https://baike.baidu.com/item/%E8%81%9A%E7%B1%BB/593695?fr=aladdin

原文地址:https://www.cnblogs.com/DrChuan/p/12082985.html

时间: 2024-08-10 17:02:32

【机器学习】机器学习入门08 - 聚类与聚类算法K-Means的相关文章

机器学习简易入门(三) - 聚类

摘要:本文简单叙述了如何用聚类来通过投票记录分析美国参议员的实际政治倾向 声明:(本文的内容非原创,但经过本人翻译和总结而来,转载请注明出处) 本文内容来源:https://www.dataquest.io/mission/60/clustering-basics   在前面的两篇文章中使用的线性回归和分类都属于有监督的机器学习(根据已有的数据训练模型,然后预测未知的数据),而无监督的学习则不是尝试预测任何东西,而是寻找数据中的特征,在无监督学习中,有一个重要的方法称为聚类.聚类算法是把具有相同

《机器学习实战》之K-均值聚类算法的python实现

<机器学习实战>之K-均值聚类算法的python实现 最近的项目是关于"基于数据挖掘的电路故障分析",项目基本上都是师兄们在做,我只是在研究关于项目中用到的如下几种算法:二分均值聚类.最近邻分类.基于规则的分类器以及支持向量机.基于项目的保密性(其实也没有什么保密的,但是怕以后老板看到我写的这篇博文,所以,你懂的),这里就不介绍"基于数据挖掘的电路故障分析"的思路了. 废话不多说了,开始正题哈. 基本K-均值聚类算法 基本K均值算法的基本思路为:首先选择

机器学习(6)之聚类算法(k-means\Canopy\层次聚类\谱聚类)

目录 1 聚类的定义 1.1 距离公式(相似度) 1.2 聚类的思想 2 K-means算法 2.1 K-means算法的思考 2.2 总结 3 二分K-Means算法 4 K-Means++算法 4.1 K-Means||算法 5 Canopy算法 5.1 应用场景 6 Mini Batch K-Means算法 7 层次聚类方法 7.1 AGNES算法中簇间距离 7.2 层次聚类优化算法 8 密度聚类 8.1 DBSCAN算法 8.1.1 基本概念 8.1.2 算法流程 8.1.3 DBSCA

Tensorflow快速入门1--实现K-Means聚类算法

快速入门1–实现K-Means聚类算法 环境: 虚拟机 版本:0.12.0(仅使用cpu下,pip命令安装) 目录 1.环境搭建 的安装 1.2简单测试 学习文档 相关的库Seaborn.pandas安装 实现K-Means聚类算法 2.1最基本的K-Means聚类算法步骤 实现K-Means聚类算法 2.3测试数据准备 2.4完整的kmeans.py文件 2.5简单测试结果 1.环境搭建 的安装 这里通过pip安装(只安装cpu单机版的,有条件的可以安装gpu下的). 1 2 1 2 注意:如

[ZZ]机器学习的入门

转载自: http://www.cnblogs.com/mq0036/p/7131678.html 本篇虽不是这一个月的流水账,但是基本按照下面的思路对着一个月做了一次总结: 什么是机器学习? 机器学习都有什么算法? 个人对机器学习的三种境界理解 推荐的学习路线 推荐资源 希望读者有所收获,另外,如果文中有任何理解上的错误,还望指正! 什么是机器学习? 之前在没有具体接触到机器学习前,我大概对他有一个概念上的认识,觉得是一种很高级的算法,能让机器学会很多的事情,就像...<我的机器人女友>里那

Python数据挖掘与机器学习技术入门实战

摘要: 什么是数据挖掘?什么是机器学习?又如何进行Python数据预处理?本文将带领大家一同了解数据挖掘和机器学习技术,通过淘宝商品案例进行数据预处理实战,通过鸢尾花案例介绍各种分类算法. 课程主讲简介:韦玮,企业家,资深IT领域专家/讲师/作家,畅销书<精通Python网络爬虫>作者,阿里云社区技术专家. 以下内容根据主讲嘉宾视频分享以及PPT整理而成. 本次课程包含了五个知识点:1.数据挖掘与机器学习技术简介 2.Python数据预处理实战 3.常见分类算法介绍 4.对鸢尾花进行分类案例实

处理聚类问题常用算法-----算法岗面试题

● 什么是DBSCAN 参考回答: DBSCAN是一种基于密度的空间聚类算法,它不需要定义簇的个数,而是将具有足够高密度的区域划分为簇,并在有噪声的数据中发现任意形状的簇,在此算法中将簇定义为密度相连的点的最大集合. ● k-means算法流程 参考回答: 从数据集中随机选择k个聚类样本作为初始的聚类中心,然后计算数据集中每个样本到这k个聚类中心的距离,并将此样本分到距离最小的聚类中心所对应的类中.将所有样本归类后,对于每个类别重新计算每个类别的聚类中心即每个类中所有样本的质心,重复以上操作直到

聚类算法--K-means和k-mediods/密度聚类/层次聚类

目录 简述 K-means聚类 密度聚类 层次聚类 一.简述 聚类算法是常见的无监督学习(无监督学习是在样本的标签未知的情况下,根据样本的内在规律对样本进行分类). 在监督学习中我们常根据模型的误差来衡量模型的好坏,通过优化损失函数来改善模型.而在聚类算法中是怎么来度量模型的好坏呢?聚类算法模型的性能度量大致有两类: 1)将模型结果与某个参考模型(或者称为外部指标)进行对比,个人觉得认为这种方法用的比较少 2)另一种是直接使用模型的内部属性,比如样本之间的距离(闵可夫斯基距离)来作为评判指标,这

【ML-7】聚类算法--K-means和k-mediods/密度聚类/层次聚类

目录 简述 K-means聚类 密度聚类 层次聚类 一.简述 聚类算法是常见的无监督学习(无监督学习是在样本的标签未知的情况下,根据样本的内在规律对样本进行分类). 在监督学习中我们常根据模型的误差来衡量模型的好坏,通过优化损失函数来改善模型.而在聚类算法中是怎么来度量模型的好坏呢?聚类算法模型的性能度量大致有两类: 1)将模型结果与某个参考模型(或者称为外部指标)进行对比,个人觉得认为这种方法用的比较少 2)另一种是直接使用模型的内部属性,比如样本之间的距离(闵可夫斯基距离)来作为评判指标,这