自从2012年在亚马逊第一次接触机器学习(一个关于预测商品需求的Demand Forecasting的项目)以来,我一直在用一些零星的时间学习机器学习相关的东西。所以,说实话,在机器学习方面,我也只是一个新手,也在入门阶段。

在前面文章的评论中,有网友希望我写一篇有关大数据和机器学习的文章,老实说,有点为难我了。所以,我只能结合自己的学习过程写一篇入门级的文章,希望能看到高手的指教和指正。

首先,简单介绍一下机器学习的一些原理。机器学习主要来说有两种方法,监督式学习(Supervised Learning)和非监督式学习(Unsupervised Learning)。

监督式学习

所谓监督式学习,也就是说,我们需要提供一组学习样本,包括相关的特征数据以及相应的标签。程序可以通过这组样本来学习相关的规律或是模式,然后通过得到的规律或模式来判断没有被打过标签的数据是什么样的数据。

举个例子,假设需要识别一些手写的数字,那么我们就需要找到尽可能多的手写体数字的图像样本,然后人工或是通过某种算法来明确地标注什么是这些手写体的图片,谁是1,谁是2,谁是3……这组数据就叫样本数据,又叫训练数据(training data)。

通过机器学习的算法,我们可以找到每个数字在不同手写体下的特征,进而找到规律和模式。然后通过得到的规律或模式来识别那些没有被打过标签的手写数据,以此完成识别手写体数字的目标。

一种比较常见的监督式学习,就是从历史数据中获得数据的走向趋势,来预测未来的走向。比如,我们使用历史上的股票走势数据来预测接下来的股价涨跌,或者通过历史上的一些垃圾邮件的样本来识别新的垃圾邮件。

在监督式学习下,需要有样本数据或是历史数据来进行学习,这种方式会有一些问题。比如

非监督式学习

对于非监督式学习,也就是说,数据是没有被标注过的,所以相关的机器学习算法需要找到这些数据中的共性。因为大量的数据是没有被标识过的,所以这种学习方式可以让大量未标识的数据能够更有价值。

而且,非监督式的学习,可以为我们找到人类很难发现的数据里的规律或模型。所以,也有人将这种学习称为“特征点学习”。其可以让我们自动地为数据进行分类,并找到分类的模型。

一般来说,非监督式学习会应用在一些交易型的数据中。比如,有一堆的用户购买数据,但是对于人类来说,我们很难找到用户属性和购买商品类型之间的关系,而非监督式学习算法可以帮助我们找到他们之间的关系。

比如,一个在某一年龄段区间的女生购买了某种肥皂,有可能说明这个女生在怀孕期,或是某人购买儿童用品,有可能说明这个人的关系链中有孩子,等等。于是这些信息会被用作一些所谓的精准市场营销活动,从而可以增加商品销量。

我们这么来说吧,监督式学习是在被告诉过正确的答案之后的学习,而非监督式学习是在没有被告诉正确答案时的学习,所以说,非监督式的学习是在大量的非常混乱的数据中找寻一些潜在的关系,这个成本也比较高。

这种非监督式学习也会经常被用来检测一些不正常的事情发生,比如信用卡的诈骗或是盗刷。也有被用在推荐系统中,比如买了这个商品的人又买了别的什么东西,或是如果某个人喜欢某篇文章、某个音乐、某个餐馆,那么可能他会喜欢某款车、某个明星,或某个地方。

在监督式的学习的算法下,我们可以用一组“狗”的照片来确定某个照片中的物体是不是狗。而在非监督式的学习算法下,我们可以通过一个照片来找到与其相似事物的照片。这两种学习方式都有各自适用的场景。

如何找到数据的规律和关联

机器学习基本就是在已知的样本数据中寻找数据的规律,在未知的数据中找数据的关系。所以,这就需要一定的数学知识了,但对于刚入门的人来说,学好高数、线性代数、概率论、数据建模等大学本科的数学知识应该就够用了。以前上大学时,总觉得这些知识没什么用处,原来只不过是自己太low,还没有从事会运用到这些知识的工作。

总之,机器学习中的基本方法论是这样的。

  1. 要找到数据中的规律,你需要找到数据中的特征点。

  2. 把特征点抽象成数学中的向量,也就是所谓的坐标轴。一个复杂的学习可能会有成十上百的坐标轴。

  3. 抽象成数学向量后,就可以通过某种数学公式来表达这类数据(就像y=ax+b是直线的公式),这就是数据建模。

这个数据公式就是我们找出来的规律。通过这个规律,我们才可能关联类似的数据。

当然,也有更为简单粗暴的玩法。

  1. 把数据中的特征点抽象成数学中的向量。

  2. 每个向量一个权重。

  3. 写个算法来找各个向量的权重是什么。

有人把这个事叫“数据搅拌机”。据说,这种简单粗暴的方式超过了那些所谓的明确的数学公式或规则。这种“土办法”有时候会比高大上的数学更有效,哈哈。

关于机器学习这个事,你可以读一读 Machine Learning is Fun! 这篇文章,以及它的中文翻译版

相关算法

对于监督式学习,有如下经典算法。

  1. 决策树(Decision Tree)。比如自动化放贷、风控。

  2. 朴素贝叶斯分类(Naive Bayesian classification)。可以用于判断垃圾邮件,对新闻的类别进行分类,比如科技、政治、运动,判断文本表达的感情是积极的还是消极的,以及人脸识别等。

  3. 最小二乘法(Ordinary Least Squares Regression)。算是一种线性回归。

  4. 逻辑回归(Logisitic Regression)。一种强大的统计学方法,可以用一个或多个变量来表示一个二项式结果。它可以用于信用评分、计算营销活动的成功率、预测某个产品的收入等。

  5. 支持向量机(Support Vector Machine,SVM)。可以用于基于图像的性别检测,图像分类等。

  6. 集成方法(Ensemble methods)。通过构建一组分类器,然后根据它们的预测结果进行加权投票来对新的数据点进行分类。原始的集成方法是贝叶斯平均,但是最近的算法包括纠错输出编码、Bagging和Boosting。

对于非监督式的学习,有如下经典算法。

  1. 聚类算法(Clustering Algorithms)。聚类算法有很多,目标是给数据分类。

  2. 主成分分析(Principal Component Analysis,PCA)。PCA的一些应用包括压缩、简化数据,便于学习和可视化等。

  3. 奇异值分解(Singular Value Decomposition,SVD)。实际上,PCA是SVD的一个简单应用。在计算机视觉中,第一个人脸识别算法使用PCA和SVD来将面部表示为“特征面”的线性组合,进行降维,然后通过简单的方法将面部匹配到身份。虽然现代方法更复杂,但很多方面仍然依赖于类似的技术。

  4. 独立成分分析(Independent Component Analysis,ICA)。ICA是一种统计技术,主要用于揭示随机变量、测量值或信号集中的隐藏因素。

上面的这些相关算法来源自博文《The 10 Algorithms Machine Learning Engineers Need to Know》。

相关推荐

学习机器学习有几个课是必须要上的,具体如下。

除了上述的那些课程外,下面这些资源也很不错。

此外,还有一些值得翻阅的图书。

好了,今天推荐的内容就这些。我目前也在学习中,希望能够跟你一起交流探讨,也期望能得到你的指教和帮助。

评论