从分类问题到KNN算法,理解数据挖掘的深刻内涵_数据挖掘

 

 

 

   分类与聚类

 

一般而言,数据挖掘的问题可分为两类:一种是描述性的(例如聚类、关联规则挖掘),一种是预测性的(分类、回归)。

 

描述性任务是发现一些人类可以解释的模式或规律。比如现在我们有一批用户,但是没有对他们进行打标签,所以也无从知道他们属于哪一类人群,那通过聚类的方法就可以把他们划分成不同的类别。

 

比如通过计算用户属性(比如年龄、职业、兴趣、浏览记录等)之间的相似性,来把用户聚成不同的类(簇),这个过程中,我们并不关心某一类具体是什么。

 

预测性任务则主要是预测可能出现的情况。比如我们给一堆电影划分好了类别(恐怖、励志、伦理等),那我们就可以通过机器学习训练,得到这些电影的属性(人物、剧情、台词、影评等)和所属别之间对应的关系,这是我们已有知识。

 

有了这些知识,我们就可以对未来的数据进行预测。比如有新的类别未知的电影,我们就可以通过该电影与其他电影的相似性度量,归到对应相似的类别(当然一部电影可以被分到不同的类别,也就是多标签,这是后话)。

 

 

 

 

   分类问题与模型

 

分类问题是数据挖掘中最常见的问题,我们对未来数据的预测,大多是去解决分类问题。通常分类问题的处理在商品分类、新闻分类、垃圾邮件处理、网页排序、医疗诊断等方面有着重要应用。

 

长久以来,人们对分类的处理经验颇丰,从而总结出了很多经典的分类模型:KNN、决策树、SVM、朴素贝叶斯、逻辑回归……而KNN无疑是最为简单、易于理解而又行之有效的算法模型。

 

最原始的分类器要做的事情是,让需要预测的对象,能够跟某个已知属性的对象完全匹配,那么要预测的对象就属于已知类别的对象这一类。但往往不会出现这样完全匹配的情况,而KNN的思想就适用于解决这类问题。

 

 

 

 

   KNN的思想

 

KNN算法定义一种相似性或者距离指标,首先计算目标对象和训练集中每一个数据点的相似性或者距离,然后选择相似性最高(或者距离最近)的k个数据对象,把这些对象中占主导的类别作为新对象的类别。

 

从分类问题到KNN算法,理解数据挖掘的深刻内涵_数据挖掘_02

 

先来个抽象的例子,上图中,蓝色和红色是已知类别的点,当进来一个未知类别的点(绿点)时,我们就需要计算它与其它数据点的距离。比如我们设定K=3,那么与它最近的三个点中,有两个红色点(占比2/3),一个蓝色点(占比1/3),那我们就把绿色点赋予红点的类别。如果如果我们设定K=5,那么距绿点最近的5个点中,有三个蓝点(占比3/5),两个红点(占比2/5),那么我们就把绿点赋予蓝点的类别。

 

再举个具体的例子,如果已经知道了41219名个人贷款用户的还款情况,其中大部分能够按时还款,小部分没有按时还款,我们把前者分为一类——守信者,后者分为另一类——失信者。现在根据这些贷款用户的数据,我们要给新的申请贷款者分类,那么k-近邻算法会根据申请者填报的特征(数据)与已知的贷款用户进行比较,选出最相似的k个用户,然后将申请者的类别定为这k个相似用户中占优的类别。例如k=7,这7个人中有5个按时还款,2个不按时还款,那么这个申请者就被预测为“守信者”。

 

基于上述,KNN算法过程具体描述如下:

 

1)计算测试数据与各个训练数据之间的距离;

2)按照距离的递增关系进行排序;

3)选取距离最小的K个点;

4)确定前K个点所在类别的出现频率;

5)返回前K个点中出现频率最高的类别作为测试数据的预测分类。

 

从分类问题到KNN算法,理解数据挖掘的深刻内涵_KNN_03