以最易懂的人话讲分类和聚类算法(建议分享和收藏)

以最易懂的人话讲分类和聚类算法(建议分享)

今天在使用聚类方法进行客户价值分析时遇到了个问题,将我卡住了半个小时,实际上现在想来是一个很简单的问题,但是大家都知道,一个人脑子短路时就是会一个小学数学题也做不出来。

但是虽然简单,在知乎或者是csdn上我也没有找到合适的答案,后面正在我想放弃自己挣扎放下面子问同事时,突然就灯泡就亮了。

于是我决定要和大家分享一下。

我做的是一个将客户按照价值分成几个群体的简单任务,需要将客户分成几个群体后画出下面这样的雷达图,然后进行分析

以最易懂的人话讲分类和聚类算法(建议分享和收藏)_第1张图片

我们先来分析一下这样的图怎样做,雷达图的制作在前面的文章中我已经讲过怎样实现。还不知道的请自行阅读

我们接着讲,要做这样的雷达图,我们首先就要先用聚类方法将数据样本聚类成合适的几个类,那聚成几个类呢?答案是不知道。实际上,对于聚类这个事情,要聚几个类比较合适我们是不知道的,我们在进行聚类之前都是不能够确定的,但是根据经验,聚类一般在3到10个类是比较合适的,不要觉得是我只是短浅了。你可以去找相关书籍来看,里面也会讲,只能根据经验来大致确定。因为对于对于聚类这个词来讲,本身就带了很多的不确定性。

比如一个班级有100人,你能预估他们最终能分成几个小的团体吗?当然了,你可能说能,反正这个团体数一定在1到100之间,哈哈,我信。

实际上前面都是废话,今天我想跟大家聊聊什么是分类和聚类

聚类(clustering)和分类(classification)

“物以类聚,人以群分”,世界上的一切物质一定属于某个类别。这也是面向对象编程的设计思想。(对于什么是面向对象编程。不知道的朋友,翔宇推荐知乎一下或者查看我后面有没有相关文章,写这篇文章的现在是没有的哈,如果大家想看就在评论区留言,我后面会更新。)

知识储备:

分类(classification)

我们接着讲聚类,大家如果学习过一点机器学习的知识,应该就知道分类这个词。或者没有学过也没有关系。这个概念很简单。分类,顾名思义就是将东西分类。比如,我们班有100个人,然后他们每个人知道自己的身高,(假设身高大于1.78cm的属于高个子,1.60cm到1.78cm的属于中等个子,低于1.60cm的属于小个子),既然他们都知道自己的身高,就知道自己属于哪个类别。然后我们问全班同学都分别是属于哪个类别,现在,我们将数据统计一下就知道了到底每个类别有多少人。在机器学习中这就叫做分类。

可能就有同学问了,这样不是是个人就会吗?学什么机器学习,这不是扯犊子吗?没错,这样的事情确实是个人就会做,但是机器它不是人啊。所以它不会,那么我们为什么要让机器学习这样的算法呢?首先我们要先明白这样做的意义在哪里。

分类的意义
试想一个问题,上面很见到的分类大家都会,但是现在如果我们要分的不是高中低(这样的类别在机器学习中叫做标签)这几个类别了,而是想让大家根据身高和体重和体脂率划分同学体质好的有多少,体质一般的有多少,体质差的有多少。现在这些信息都在一张表上,大家觉得要把这项事情做出来得多大的工作量呢?而现在来了一个新同学,我们想知道它的体质怎么样,让我们人去查找表然后对比,这样的事又简单不简单呢?

或许上面的工作我们咬咬牙都是能做出来的,但是,如果这样的数据有100万、1000万甚至1亿条呢?大家这时候终于要放弃了吧!

以最易懂的人话讲分类和聚类算法(建议分享和收藏)_第2张图片

因此,人做不了的事,我们交给计算机去做,但是机器只会1+0,没关系,我们将人类的想法换成计算机能够理解的算法,大家都知道计算机比人类最大的优势就在于一个字—

咳咳,回来啊,想什么呢

这样工作有“人”帮我们做了,上班不就有时间摸鱼了?,这不就是计算机兴起的原因吗?现在我们来了1000个新同学,我们将数据给计算机,计算机直接告诉我们每一个新同学属于什么类型。这就是分类算法预测的原理。实际上统计中的回归(regression)预测也是类似的原理。

接下来,讲正题,聚类又是什么原理呢?

还是那100个同学,现在我们想知道这100个人在身高上会分成几个类别呢?我们不知道该怎么分,但是,我们想将它们分成三个类别,最好像前面分类那样的标准,不过现在有觉得那样分太带主观意志了,我们想按照人数分布来分,比如,我们发现1.51cm到1.60cm的同学有30个,1.65-176的同学有40个,1.78到1.85的同学有20个,而其他的就几个人的身高在其他的范围随意分布。这时候,我们知道,这样以上这种分类比之前那种好,为什么呢?,因为大多数人身高就分布在这几个区间。

那么剩下的高于1.85、低于151以及高于160又小于165的还有1.76-1.78,这些人怎么分呢?答案就是,离那个类别更接近就分在哪个类别。也就是说,例如1.62cm,这个身高更接近1.51-1.60这个类别的同学的身高,那我们就将它划分在这个类别。同样,其他的同学也是一样的原理划分。(当然这个例子举得太极端不说,还不符合统计学原理,这里只是为了使得大家能更好的理解聚类的原理)

上面这个就是聚类的原理例子。那么我们接着假设,我们将这100个同学分成三个类别也是我们主观控制的,如果我们说分为四个类、五个类、六个类别呢?是不是分析的结果又会不同呢?并且我们不知道到底分成几个类别会更合适,于是就有了上面讲到的聚类成几个类别通常一开始是不能够确定的,但是根据经验,一般分成设定3-10个类别里面会有比较合适的类别个数。于是我们在做聚类分析时一般就一步一个脚印,将设定不同个数类别(机器学习里面一般叫簇cluster)的聚类模型进行评估,最后选取最好的模型来进行聚类。对于模型的评估,我们下一篇文章讲聚类的典型算法—K-Means(K-均值)算法再详细为大家解析。

​ 总结

分类算法是有监督学习算法,而聚类是无监督学习算法,区别就是有监督学习算法在模型训练时数据是有标签的(已经分好类别)训练好的模型一般用于预测新的数据集,无监督学习则是说,我们之所以训练数据,就是将数据聚成几个类别。从而进行相关的应用。

下一篇文章–聚类以及典型算法K-Means的原理及实现
持续更新中,请大家关注Eternal的公众号“数据分析者”以防错过文章。
以最易懂的人话讲分类和聚类算法(建议分享和收藏)_第3张图片

好了,这期内容我们就分享到这里,我们下期再见!

你可能感兴趣的:(数据分析必经之路,1024程序员节,聚类,分类,机器学习)