机器学习算法之K-mean聚类算法小案例
Posted 金融小茶馆
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器学习算法之K-mean聚类算法小案例相关的知识,希望对你有一定的参考价值。
看了一篇关于K-Mean聚类分析的帖子,里面用Uber打车的数据简单的分析了一个纽约5个区打车消费的增长情况。 聚类分析可以通过特定算法将特定数据帮你分类,至于具体算法和各种聚类分析的不同,鉴于我不是数据分析方面的专家,就不班门弄斧了,直接上例子:
把数据读取之后合并,因为只是例子,我就只用了3个月的数据。可以看到数据第一列是Date.Time,也就是打车的日期和时间, Lat和Lon是经纬度,也就是方位数据,Base在例子中没用到。
然后将Date.Time分解成年,日,星期几,小时,分钟。第一个部分是将方位数据进行聚类,第二部分是对星期几和小时数据进行聚类。
kmeans是R自带的方程,都不需要另外引进第三方包。然后对第二列和第三列,也就是Lon和Lat两个方位数据进行聚类。K-Mean聚类的一个劣势是你最好知道要分成几类。然后纽约有5个区(Manhattan,Bronx,Queens,Brooklyn, Staten Island),所以直接告诉它要聚成5类。
把得到的数据标到纽约地图上(用ggmap包):
上面这张图和纽约区域划分当然不全然一样,但是大方向是差不多,可惜的就是曼哈顿区在1,4都有。暂时可以定1,4为manhattan(曼哈顿),5是Brooklyn(布鲁克林), 2,3是Queen和Bronx。可以很明显的看出,曼哈顿区打车是最多的,2,3是最少的。
最后根据每个区,每个月进行统计,其实就可以看出来哪个月份打车出行是最多的,因为我只用了三个月,所以只能看出来,2014年4,5,6月份打车一直是增长。
但是我对于打车时间感兴趣,所以就对打车时间进行了聚类分析。按照周几和小时进行聚类,由于不知道该分几类,所以我尝试了4,5,6,7,8,最后觉得6的分类比较好:
这里1最少,5最多,所以把这两组数据提取出来,先对1进行计数:可以看出,这个时间聚类,也就是打车最少的时间段的基本都是周一,周六,周日的凌晨时分。
然后对5进行计数:可以看出打车最多的时间段是周三,四,五,六的下午4点到6点之间。
然后呢就按照区域对时间计数,我想看看不同区域打车的时间段是不是不同。就有了下图:把每个区域时间聚类的前15个放在一起进行作图,可以发现,全部地区打车最多的时间段都集中在下午三点到晚上11点。
区域5也就是Brooklyn(布鲁克林)区,蓝色方框,打车最多的时间段是周六,周日的晚上,看来那边酒吧多?区域3也就是靠近Queens(皇后区),绿色的小三角,打车最多的时间段是周一,周五的晚上。区域1也就是Manhattan(曼哈顿区),红色小圆圈,打车最多的是周三四五的下班时间。
K-Mean聚类分析应用是很广的,因为它简单,比如你把一些贷款人的信息进行聚类,然后就可以去判断哪些特征的人会比较容易拖欠贷款等。但是它也有很多弊端,例如每次计算是随机选取聚类起点然后计算,这会导致每次计算结果可能会有出入等等。当然有更多的改进方法和机制,我这里只是那一个最简单的例子练个手罢了,不进行深入的讨论啦。
以上是关于机器学习算法之K-mean聚类算法小案例的主要内容,如果未能解决你的问题,请参考以下文章