相亲和KNN算法

 本文转载自公众号  信口杜说

 


KNN机器学习一种基础的数据分类算法,这里我通过一个故事来给大家叫明白它到底有什么用。

 

从一个笑话开始。

相亲时,姑娘很漂亮,问小伙子:你有三室两厅的楼房么?

小伙子:没有。

姑娘又问:有宝马5么?

小伙子:没有。

姑娘很不高兴:那算了。

相亲结束。小伙子很沮丧,回去跟父母说了这事。

父亲愁眉苦脸:车好说,把咱的宾利买了能买好几两宝马,

可是咱犯不上为了这事把咱的大别墅换成三室两厅的楼房啊。

 

在这个笑话里姑娘的相亲匹配算法有问题,太粗暴,太简单,并且没有把相亲标准数据化,标准定制的太笼统了。

不应该定三室两厅的标准,应该是看房子的大小,平米数。

也不能把车的标准定成上面品牌的车,应该看车子的价格。

导致错过了一段大好姻缘。

假如姑娘用KNN算法,来挑选相亲对象,那么她一定不会犯上面那样的错误。

我们来用KNN算法帮姑娘找到理想的结婚对象。

一般姑娘的相亲对象分为三类A(特别满意,恨不得明天就去领证)

B(感觉一般,可以相处一段时间再看看)

C(不满意,以后不想再联系)

而判断相亲对象类型的标准2条,房子大小,车辆价格。

 

下面是几个别人家姑娘的男朋友的数据,我们这里作为参考(也叫样本数据):

男生名字

房子大小

车辆价格

相亲类别

王思聪

1000000平(万达的房子都是他们家的)

500

A(特别满意)

吴亦凡

5000

200

A(特别满意)

李有财

120

60

B(处处看看)

高很富

200

50

B(处处看看)

王小明

60

10

B(处处看看)

刘没钱

12平(租的)

0.2万(电动车)

C(pass)

 

  现在有个相亲对象,赵大平,情况是这样房子100平,车30万,

那他应该是什么类型的相亲对象那?

我们来计算一下他和上面的样本数据之间的差距(也叫距离),

这里我们使用曼哈顿距离(啥叫曼哈顿距离,百度)

 

男生名称

赵大平和他们的差距

王思聪

|1000000-100|+|500-30|=999900+470=1000370(差距巨大啊)

吴亦凡

|5000-100|+|200-30|=4900+170=5070(差距也不小)

李有财

|120-100|+|60-30|=20+30=50(很接近了)

高很富

|200-100|+|50-30|=100+20=120(比较接近了)

王小明

|60-100|+|10-30|=40+20=60(比较接近了)

刘没钱

|12-100|+|0.2-30|=88+29.8=117.8

 

那我们对上面的数据按从小到大排个序:

 

男生名称

赵大平和他们的距离(从小到大)

李有财

50

王小明

60

刘没钱

117.8

高很富

120

吴亦凡

5070

王思聪

1000370

 

这里我们取前4个男生(当然也可以取3个,取5个,取的少不准,取的多准确,但是复杂,一般不超过20):

李有财(B类型),王小明(B类型),刘没钱(C类型),高很富(B类型)。

在这前4个距离赵大平最近的男生里,B类型的最多(3/4,也就是75%,

C类型的少(1/4,也就是25%)

那么我们就取占比最大的类型,也认为赵大平是B类型的,可以处处。

 

这就是KNN算法(K-NearestNeighbor)。

 

也有同学会问:这么麻烦干嘛,姑娘以前的标准是简单,但是你的也太麻烦了,又是样本数据,又是排序的。能不能划分区间啊,房子大于500平米的特别满意,500平米到90平米的可以处处,不到90平米的PASS不行,这多简单。

但是现实情况比较复杂,好多事没有确定的边界。你设定90为边界,那来个89的那?按照区间的划分,这个就PASS掉了,可实际情况9089差不多。没法子划区间。



—————END—————



喜欢本文的朋友们,欢迎关注公众号 程序员小灰,收看更多精彩内容