无监督学习的魅力

转载自 无监督学习的魅力

如果你的一大坨数据没。有。标。签怎么办?

无监督学习是机器学习算法里非常扑朔迷离的一个类别,负责解决这些“没有真实值 (no-ground-truth) ”的数据。

本文会讲到,无监督学习到底是什么,和机器学习的其他算法有何本质区别,用的时候有哪些难点,以及推荐阅读的传送门。

1无监督学习是什么?

最简单的理解方式,就是把算法想象成考试。卷子上的每道题对应一个答案,得分高低就要看你的答案和标准答案有多接近。不过,如果没有答案只有问题,你要怎么给自己打分?

把这一套东西挪到机器学习上来。传统的数据集都有标签 (相当于标答) ,逻辑是“X导致Y”。

比如,我们想要知道,推特上粉丝更多的人,是不是收入也更高。那么,input是粉丝数,output是收入,要试着找出两组数据之间的关系。

每颗星是一个数据点,机器学习就是要画出差不多能连起那些点的一条线,以此解释input和output之间的关系。但在无监督学习里,并没有output这个东西

我们要做的是分析input,也就是粉丝数。但没有收入,或者Y。就像是考试只有题,没有标答一样。

其实,也不一定是没有Y,可能我们只是没有办法获得收入数据。不过这都不要紧,重要的是不需要画出X和Y之间的那条线了,不需要找它们之间的关系了。

那么,无监督学习的目标是什么?如果只有input没有output,我们到底该怎么办?

2无监督学习分几种

聚类(Clustering)

任何行业都需要对用户的理解:他们是谁?是什么促使他们做出购买的决定?

通常,用户可以按照某些标准分为几组。这些标准可简单如年龄如性别,也可复杂如用户画像、如购买流程。无监督学习可以帮我们自动完成这个任务。

聚类算法会跑过我们的数据,然后找出几个自然聚类 (Natural Clusters) 。

以用户为例,一组可能是30多岁的艺术家,另一组可能是家里养狗的千万富翁。我们可以自己选择聚类的数量,这样就能调整各个组别的粒度 (Granularity) 。

有以下几种聚类方法可以选用:

· K-Means聚类,把所有数据点划分到K个互斥组别里。复杂之处在于如何选取K的大小

· 层次聚类 (Hierarchical Clustering) ,把所有数据点划分到一些组别、和它们的子组别里,形成像族谱一样的树状图。比如,先把用户按年龄分组,然后把各个组别按照其他标准再细分。

· 概率聚类 (Probabilistic Clustering) ,把所有数据点按照概率来分组。K-Means其实就是它的一种特殊形式,即概率永远为0或1的情况。所以这种聚类方式,也被亲切地称为“模糊的K-Means”。

这几种并无本质区别的方法,写成代码可能就长这样——

任何聚类算法的output,都会是所有的数据点、以及它们所对应的组别。这就需要我们自己来判断,output代表怎样的含义,或是算法到底发现了什么。

数据科学的魅力即在于,output加上人类的解读,便会产生价值。

数据压缩 (Data Compression)

在过去的十年间,设备的计算能力和存储能力都增强了许多。不过,即便在今天我们依然有理由,让数据集尽可能小、并尽可能高效。这意味着,只要让算法去跑一些必要的数据,而不要做过多的训练。


无监督学习可以用一种名为数据降维 (Dimentionality Reduction) 的方式做到这一点。

数据降维的“”,就是指数据集有多少列。这个方法背后的概念和信息论 (Information Theory) 一样:假设数据集中的许多数据都是冗余的,所以只要取出一部分,就可以表示整个数据集的情况了。

在实际应用中,我们需要用某种神秘的方式,把数据集里的某些部分结合到一起,来传达某些意义。这里有我们比较常用的两种降维方式——

· 主成分分析算法 (PCA) ,找出能够把数据集里的大多数变化联系起来的线性组合
· 奇异值分解 (SVD) ,把数据的矩阵分解成三个小矩阵

这两种方法,以及另外一些更复杂的降维方式,都用了线性代数的概念,把矩阵分解成容易消化的样子,便于传递信息。


数据降维可以在机器学习算法里,起到非常重要的作用。

图像为例,在计算机视觉里,一幅图像就是一个巨大的数据集,训练起来也很费力。而如果可以缩小训练用的数据集,模型就可以跑得更快了。这也是为什么,PCA和SVD都图像预处理时常见的工具。

无监督深度学习

无监督学习,把领地扩张到了神经网络和深度学习里,这一点也不奇怪。这个领域还很年轻,不过已经有了自编码器 (Autoencoder) 这样的先行者。

自编码器和数据压缩算法背后的逻辑差不多,用一个子集来反映原始数据集的特征。

像神经网络一样,自编码器利用权重把input转换成理想的output。不过在这里,output和input并不是两种不同的东西,output只是input的一种更轻便的表示方式。

在计算机视觉中,自编码器被用在图像识别算法里。现在,它也已经把触角伸向声音和语音识别等更多的领域。

3实战难点有哪些

除了寻找合适的算法和硬件,这样常见的问题之外,无监督学习自带一种神秘的气质——不知道任务到底完成了没有


在监督学习里,我们会定下一套标准,以做出模型调试的决策。精确度 (Precision) 和查全率 (Recall) 这样的指标会告诉我们,现在的模型有多准确,然后我们可以调整参数来优化模型。分数低,就要继续调。

可是,无监督学习的数据没有标签,我们就很难有理有据地定下那套衡量标准。以聚类为例,怎么知道K-Means的分类好不好 (比如K值取的合不合适) ?没有标准了,我们可能就需要有点创造力。

“无监督学习在我这里管用么?”是人们经常提出的问题。这里,具体问题要具体分析。还以用户分组为例,只有当你的用户真的和自然聚类相匹配的时候,聚类的方法才有效。

虽然有些风险,但最好的测试方法,可能就是把无监督模型放到现实世界里,看看会发生什么——让有聚类的和没有聚类的算法做对比,看聚类能不能得出更有效的信息。

当然,研究人员也在尝试编写,自带 (相对) 客观评判标准的无监督学习算法。那么,栗子在哪里?

友好的传送门:

https://blog.algorithmia.com/introduction-to-unsupervised-learning/

下拉至Reading and Papers,栗子可能要从那里开始吃。

 祝您消化顺畅




本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/331056.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

log4j入门实例

http://www.codeceo.com/article/log4j-usage.html

java_basic_review(5)java反射荔枝

【0】README 1)本文旨在 review java反射荔枝; 【1】荔枝如下 【2】实例化Class类对象 Test // 实例化Class类对象public void testInitializeClassObject() {Class c1;Class c2;Class c3;try {c1 Demo.class; // way1.c2 new Demo().getClass(); //…

Java单链表反转

转载自 Java单链表反转 详细过程 (一)单链表的结点结构:  data域:存储数据元素信息的域称为数据域;  next域:存储直接后继位置的域称为指针域,它是存放结点的直接后继的地址(位置&…

java实现压缩图片的方法

前段时间在使用对图片加水印后,由于需加水印的图片的宽度和高度都非常的大,加了水印后图片从几百KB,变成了几MB,严重影响了图片在页面的加载速度! 经过仔细的琢磨,决定先对图片进行压缩,再加水…

openfire log4j:ERROR setFile(null,true) call failed.

【0】README 1)本文旨在解决 当 openfire server 启动时的报错信息; 【2】errors solutions 【2.1】errors log4j:ERROR setFile(null,true) call failed. java.io.FileNotFoundException: C:\Program Files (x86)\Openfire\bin\..\logs\all.log (…

用js处理图片加载错误时加载默认图片的方法

jsp <img src"${bulletin.logo }" onerror"onfind(this);" > js代码 <script type"text/javascript"> function onfind(img){img.src"/front/images/logo_wutu.jpg";img.onerrornull; } </script>

异常org.xmlpull.v1.XmlPullParserException

【0】对 org.xmlpull.v1.XmlPullParserException 异常的解决方法 Exception in thread "main" java.lang.ExceptionInInitializerErrorat org.jivesoftware.smack.SmackConfiguration.getVersion(SmackConfiguration.java:96)at org.jivesoftware.smack.AbstractXMPP…

跳跃表(Skip list)原理与java实现

转载自 【算法导论33】跳跃表&#xff08;Skip list&#xff09;原理与java实现Skip list是一个用于有序元素序列快速搜索的数据结构&#xff0c;由美国计算机科学家William Pugh发明于1989年。它的效率和红黑树以及 AVL 树不相上下&#xff0c;但实现起来比较容易。作者Willia…

简单的hibernate环境搭建、自动生成model/配置/hibernate.xml配置文件

自己亲测的东西才是最有效果的&#xff0c;下面贴出整个编写的过程。 1 hibernate环境搭建&#xff0c;这个博客非常给力&#xff1a;http://www.111cn.net/wy/js-ajax/93142.htm 需要用到的jar包&#xff1a; 2 使用myeclipse自动生成model/model配置文件/hibernate.xml配…

java_advanced_review(3)补充:利用网络套接字实现类似qq 的控制台通讯

【0】README1&#xff09;本文旨在实现 利用网络套接字实现类似qq 的控制台通讯&#xff0c; client 采用telnet and java app&#xff0c; server采用 java app&#xff1b;2&#xff09;also&#xff0c; you can check out the source code from https://github.com/pacoson…

Java 常见的 30 个误区与细节

转载自 Java 常见的 30 个误区与细节1、在Java中&#xff0c;没有goto语句。因为大量使用goto语句会降低程序的可读性和可维护性&#xff0c;所以Java语言取消了goto的使用。同时&#xff0c;为了避免程序员自行使用goto所带来的混乱&#xff0c;Java语言仍将goto定义为一个关键…

编译报错+解决方法:错误: 找不到符号

【0】README1&#xff09;本文主要解决“错误&#xff0c;找不到符号”【1】 console error info1&#xff09;error : E:\bench-cluster\mybatis_in_action_eclipse\xmpp\src>javac com/communication/qq/ServerPlainTest.java com\communication\qq\ServerPlainTest.java:…

干货|基于 Spring Cloud 的微服务落地

转载自 干货&#xff5c;基于 Spring Cloud 的微服务落地微服务架构模式的核心在于如何识别服务的边界&#xff0c;设计出合理的微服务。但如果要将微服务架构运用到生产项目上&#xff0c;并且能够发挥该架构模式的重要作用&#xff0c;则需要微服务框架的支持。在Java生态圈&…

sqlserver 2005 数据库的差异备份与还原

找到一个可靠的步骤&#xff0c;点开链接&#xff1a;http://blog.csdn.net/kevindr/article/details/22154323

gradle 构建 Smack 报错:Can't find android.jar for 8 API. + steps for building android platform

【0】README1&#xff09;本文旨在解决 Cant find android.jar for 8 API. Please install corresponding SDK platform package&#xff1b;2&#xff09;解决方法&#xff1a;在 Smack-master 的子目录下 有一个 version.gradle&#xff0c; 这也是 build.gradle 文件引入的一…

Hibernate的关联映射--一对多、

这是我 1 单向一对多&#xff1a; 实体类&#xff1a;&#xff08;课程类&#xff09;Grade与&#xff08;学生类&#xff09;Student的一对多关系 学生类&#xff1a; public class Student implements java.io.Serializable {// Fieldsprivate Long id;private String na…

史上最全 BAT 大厂面试题整理

转载自 史上最全 BAT 大厂面试题整理&#xff01;&#xff08;速度收藏&#xff09;主要分为以下几部分&#xff1a;&#xff08;1&#xff09;java面试题&#xff08;2&#xff09;Android面试题&#xff08;3&#xff09;高端技术面试题&#xff08;4&#xff09;非技术性问题…

微信JS-SDK实现分享功能

1 申请一个微信公众号&#xff0c;并确认在开发–接口权限中拥有分享功能的权限。 2 公众号设置–功能设置&#xff1a;在JS接口安全域名中添加安全域名&#xff0c;这个安全域名不是url&#xff0c;只需添加一级域名即可。 3 开发&#xff0c;基本配置中&#xff0c;需要获得…

通过smack client + openfire server 实现 peer to peer communication

【0】README1&#xff09;本文旨在 给出源代码 实现 smack client openfire server 实现 peer to peer communication2&#xff09;当然&#xff0c;代码中用到的 user 和 pass&#xff0c; 你需要事先在 openfire 里面注册&#xff1b;3&#xff09;also , you can checkout …

Java 面试题经典 77 问

转载自 Java 面试题经典 77 问&#xff08;含答案&#xff09;&#xff01;金三银四了&#xff0c;3月底&#xff0c;4月初&#xff0c;找工作换单位的黄金时期。4月初将会有有一大批职场人士流动。。。 作为Java开发码农的你是不是也在蠢蠢欲动&#xff0c;或者已经搞了几轮车…