原文:拉克什曼Lak Lakshmanan

翻译:陈之炎

校对:吴金笛

本文约2600字,建议阅读10+分钟。

本文教你如何在BigQueryML中使用K均值聚类对数据进行分组,进而更好地理解和描述。

目前,BigQueryML支持无监督学习-可以利用K均值算法对数据进行分组。与预测分析的监督机器学习不同,无监督学习侧重于描述性分析-在理解数据的基础之上做出数据驱动的决策。

聚类什么内容?

首先,需要确定聚类的内容,为什么要这样做?假设你是一个拥有客户交易数据的零售商,有多种方法可以对此数据集进行聚类,这取决于你想要对聚类做什么操作。

  • 我们可以在顾客中找到自然群体,这就是所谓的客户细分。用于客户细分的数据可能包括客户访问的商店、他们购买的商品、支付的费用等等。首先将尝试了解这些客户组的喜好(这些人称为人物角色),这样便可以设计出针对其中一个组的成员有吸引力的项目。

  • 我们也可以在购买的物品中发现自然群体,这可以称为产品组。可以根据购买对象、购买时间、购买地点等对项目进行聚类。同时可以尝试学习产品组的特征,以便学习如何减少调拨或改进交叉销售。

这两种情况下,均使用聚类作为一种启发式方法来帮助做出决策-设计个性化产品或理解产品交互并不容易,因此可以从客户组或产品项目组两种维度进行设计。

请注意,对于产品推荐的特定用例(向客户推荐产品或特定产品的目标客户),最好使用WALS之类的协作方法训练ML模型来实现。但是对于其他没有现成的预测分析方法的决策,聚类会提供一种做出数据驱动决策的方法。

建立聚类问题

为更好地使用聚类,需要做以下四件事:

1. 确定对哪些字段进行聚类。是客户ID?还是产品项目ID?  然后,将数据集中在该字段的属性上。

2. 找出给定客户/项目/其他属于哪个聚类。

3. 理解聚类属性的内容。

4. 利用这一理解做出决策。

在本文中,我将演示对伦敦自行车共享数据的聚类方法。假设我们围绕自行车共享站的设计和仓储做出很多决策,我们希望了解系统中的不同类型的站点,这样便可以数据驱动的方式做出这些决策。

需要做到以下四件事:

1. 聚类自行车租赁站。我们需要聚类的字段是Station_name,为此还需要找到站点的属性。

2. 找出每个站点属于哪个聚类。

3. 理解每个聚类的特征。

4. 利用这种理解来做出由数据驱动的决策。

在此之前,首先需要收集数据。

1.  收集数据

我们将用到的数据包括伦敦的自行车租赁,它是欧盟地区的公共数据集,因此,如果想要跟踪我的查询,应确保在欧盟地区创建一个名为demos_eu的数据集。

需要根据下面这些因子对车站进行聚类:

  • 租用时间

  • 每天出行次数

  • 自行车架数量

  • 距市中心的距离

我们通常需要做出一些决策,诸如:在工作日和周末不同的时间安排车站的存货(即确保车站有自行车出租)。为此,需要对这些实例进行聚类,其“主键”是Station_name和isworkday的组合。

以下是对收集到的相关数据的查询:

我们提取了2015年(见WHERE条款)的租用数据(Start_Station_name,周末/工作日,持续时间),并根据站点信息(自行车数量、距市中心的距离)加入该数据。

然后,遍历自行车计数、距市中心的距离等车站属性,计算出平均骑乘时间、出行次数等车站属性。数据集如下所示:

用于聚类的数据集;数据的主键是Station_name和isweekday的组合

2. BigQueryML聚类

进行聚类时仅需向上述SELECT查询中添加一条CREATE MODEL语句,并删除数据中的“id”字段:

此查询处理1.2GB,耗时54秒。模型中列出了聚类用到的4个因子:

K-均值模型

请注意,在创建模型过程中指定了所需的聚类数量(num_clusters=4),并删除了不需要对其进行聚类的因子 (Station_name和isweekday)。如果特征有不同的动态范围(bikes_count在10-50范围内,而num_trips在数千个范围内),那么,标准化特性会是一个不错的选择,而我正在这样做的。

如果忽略聚类的数量,BigQueryML将根据训练数据集中的总行数选择一个合理的缺省值,还可以通过超参数调优来找到一个更优的数字。本质上,可以对num_clusters的不同值运行聚类,找出误差,并选择图形平稳的点。可以通过以下方法获得误差:

num_clusters数目越少,聚类越好。

3. 车站属于哪个聚类?

特定的车站到底属于哪个聚类?利用ML.PREDICT便可以找到答案。以下便是对名称中包含“Kenningtons”的站点的聚类的查询:

输出是:

肯宁顿站(Kennington)属于哪个聚类?

4. 检查聚类

可以使用以下方法查看聚类图心-本质上是模型中4个因子的值:

只要稍微做一点SQL操作,便可以获得上表的主元:

输出是:

聚类属性

若要可视化此表,单击“在DataStudio中导出”并选择“条状表”。将质心列设为“维度”,其余列为尺寸。然后会得到:

在DataStudio中可视化后的聚类属性

这样,便能够解释这些聚类了。从本质上说,第一组(Cluster #1)由人们可以长途骑行的郊外车站组成;第二组(Cluster #2)由其他郊区车站组成;第三组(Cluster #3)由繁忙的城市站组成;第四组(Cluster #4)由不那么繁忙的城市站组成。

根据这些特性和对伦敦的一些了解,可以给出这些聚类的描述性名称。第一组可能是“一日行”, 第二组是“卧室社区”, 第三组是“旅游区”, 第四组是“商业区”。

5. 做出由数据驱动的决策

利用这些聚类做出不同的决策。

  • 如果我们刚刚获得资金,可以扩建自行车架,那应该增加哪些车站的容量?在没有聚类数据的情况下,我们或许会倾向于使用第三组中有很多次行程而没有足够的自行车的站点。但是做了聚类之后,发现这组站主要为游客服务,他们没有投票权,所以我们会把额外的容量放在第二组(卧室社区)。

  • 如果我们需要试验一种新型锁,应该在哪一组车站上做这个实验?商业区的车站似乎更合乎逻辑的,当然,这些车站有很多自行车,而且非常繁忙,足以支持A/B测试。

  • 如果我们需要储备一些有赛车的车站。哪一个?当然是第一组,服务于每天往返于城市的人。

显然,我们虽然可以通过自定义数据分析来单独做出这些决策,但是,将站点进行聚类分析,提出描述性的名称,并使用这些名称来做出决策,要简单得多,也更容易解释。

利用SQL便能完成所有这些操作!是不是相当酷?

原文链接:

How to use K-Means clustering in BigQuery ML to understand and describe your data better

原文链接:

https://towardsdatascience.com/how-to-use-k-means-clustering-in-bigquery-ml-to-understand-and-describe-your-data-better-c972c6f5733b

编辑:王菁

校对:林亦霖

译者简介

陈之炎,北京交通大学通信与控制工程专业毕业,获得工学硕士学位,历任长城计算机软件与系统公司工程师,大唐微电子公司工程师,现任北京吾译超群科技有限公司技术支持。目前从事智能化翻译教学系统的运营和维护,在人工智能深度学习和自然语言处理(NLP)方面积累有一定的经验。业余时间喜爱翻译创作,翻译作品主要有:IEC-ISO 7816、伊拉克石油工程项目、新财税主义宣言等等,其中中译英作品“新财税主义宣言”在GLOBAL TIMES正式发表。能够利用业余时间加入到THU 数据派平台的翻译志愿者小组,希望能和大家一起交流分享,共同进步。

翻译组招募信息

工作内容:需要一颗细致的心,将选取好的外文文章翻译成流畅的中文。如果你是数据科学/统计学/计算机类的留学生,或在海外从事相关工作,或对自己外语水平有信心的朋友欢迎加入翻译小组。

你能得到:定期的翻译培训提高志愿者的翻译水平,提高对于数据科学前沿的认知,海外的朋友可以和国内技术应用发展保持联系,THU数据派产学研的背景为志愿者带来好的发展机遇。

其他福利:来自于名企的数据科学工作者,北大清华以及海外等名校学生他们都将成为你在翻译小组的伙伴。

点击文末“阅读原文”加入数据派团队~

转载须知

如需转载,请在开篇显著位置注明作者和出处(转自:数据派ID:datapi),并在文章结尾放置数据派醒目二维码。有原创标识文章,请发送【文章名称-待授权公众号名称及ID】至联系邮箱,申请白名单授权并按要求编辑。

发布后请将链接反馈至联系邮箱(见下方)。未经许可的转载以及改编者,我们将依法追究其法律责任。

点击“阅读原文”拥抱组织

独家 | 如何在BigQueryML中使用K-均值聚类来更好地理解和描述数据(附代码)相关推荐

  1. Python,OpenCV中的K均值聚类——K-Means Cluster

    Python,OpenCV中的K均值聚类 1. 效果图 2. 原理 2.1 什么是K均值聚类? 2.2 K均值聚类过程 2.3 cv2.kmeans(z, 2, None, criteria, 10, ...

  2. 聚类算法中的K均值聚类算法(K-Means clustering)

    =======================================================================               Machine Learni ...

  3. K均值聚类关于初始聚类中心的探讨

    摘要:进入二十一世纪以来,科学技术的不断发展,使得数据挖掘技术得到了学者越来越多的关注.数据挖掘是指从数据库中发现隐含在大量数据中的新颖的.潜在的有用信息和规则的过程,是一种处理数据库数据的知识发现. ...

  4. 机器学习工程师 — Udacity 电影评分的 k 均值聚类

    电影评分的 k 均值聚类 假设你是 Netflix 的一名数据分析师,你想要根据用户对不同电影的评分研究用户在电影品位上的相似和不同之处.了解这些评分对用户电影推荐系统有帮助吗?我们来研究下这方面的数 ...

  5. 聚类分析 | MATLAB实现k-Means(k均值聚类)分析

    目录 聚类分析 | MATLAB实现k-Means(k均值聚类)分析 k-均值聚类简介 相关描述 程序设计 学习小结 参考资料 致谢 聚类分析 | MATLAB实现k-Means(k均值聚类)分析 k ...

  6. K均值聚类的理解和实现

    目录 1. 距离的测度 1.1 欧式距离 1.2 马氏距离 1.2.1 利用马氏距离对数据进行归一化 1.2.2 利用马氏距离进行分类 2. K均值的基本理论 2.1 K均值的原理和实现 2.2 K均 ...

  7. K均值聚类以及matlab实现

    K均值聚类是最基础的一种聚类方法.K均值聚类,就是把看起来最集中.最不分散的簇标签分配到输入训练样本里.具体而言,通过下式计算簇y的分散情况. 在这里,表示的是满足的y的和. 上式的为簇y的中心,为属 ...

  8. 机器学习之无监督学习-K均值聚类算法

    机器学习之无监督学习-K均值聚类算法 对于无监督学习,有两类重要的应用,一个是聚类,一个是降维.我们今天主要学习聚类中的K均值聚类. 我们先看看下图,图a为原始的数据点,我们想要对图a的数据点进行分类 ...

  9. 机器学习-K均值聚类(python3代码实现)

    K均值聚类 哈尔滨工程大学-537 算法原理: K均值是发现给定数据集的 k k k个簇的算法.簇个数k" role="presentation" style=" ...

最新文章

  1. Java学习总结:29
  2. 高精度算法(加减乘除取模(均可以处理负数))
  3. python画图颜色表示大小变化_python画图(线条颜色、大小、类型:点、虚线等)(图文详细入门教程四)...
  4. 桂林电子科技大学C语言大作业,桂林电子科技大学c语言程序设计习题集及答案qvzaewzm.doc...
  5. javaI/O流小结
  6. 巧妙解决AJAX跨域问题
  7. c语言混响,混响也是大学问,c与数字混响的区别-文章-数字音视工程网DAV01.COM...
  8. Docker安装OpenResty教程
  9. 量化策略回测BoolC
  10. Nginx + uWSGI + flask + socketio 部署解决方案
  11. Linux系统上安装JDK和Tomcat服务器
  12. MIPS单周期CPU设计——lw和sw指令的设计
  13. Coverage [minx,miny,maxx,maxy] is [12, 4, 13, 6, 3], index [x,y,z] is [2, 5, 3]错误原因及其解决方式...
  14. pandas写入excel指定行_使用pandas操作excel
  15. 2014中国民营企业500强在京津冀经济区、珠江三角洲、长江三角洲分布
  16. Unity给模型添加逼真效果材质
  17. 卡片互动悬停下载动画
  18. 定理在数学中的简写形式_高中数学联赛常用定理
  19. Redis概述、安装、可视化访问
  20. Ubuntu 安装 NVIDIA 显卡驱动详细步骤(ERROR: The Nouveau kernel driver is currently in use by your system)

热门文章

  1. Spring Boot 2.x整合Quartz
  2. 031_spark架构原理
  3. VS2017+OpenCV3.4.0 折腾(5)
  4. LintCode 最大正方形
  5. UVA - 1045 The Great Wall Game(二分图最佳完美匹配)
  6. 多家IT企业通过CNNIC“可信网站”验证
  7. 【Python】Python中令人头疼的变量作用域问题,终于弄清楚了
  8. java当前路径和相对路径相关的疑惑
  9. Python 字符串前面加u,r,b的含义
  10. 如何轻松愉快地理解条件随机场