【数据分析】用六千字来解释文科生怎么理解机器学习数据挖掘

从人类学习说起

回顾人类从亿万年前诞生至今,文明从无到有、从有到高度发达,当然如今的文明是否高度发达还存疑,但是不可否认的是与原始人类只会使用简单工具相比,我们的科技文明已经大大扩展了人类的想象力。

人类文明无非是经验的积累,这也表明,这个世界在某种程度上具有某种规律性,这种规律性是可以被人类经历、观察、总结并记录下来的。不可知论认为人类永远无法认识世界,这有道理,因为即使你知道规律是那样的,您也不知道它为什么是那样的。不过知道有规律性对我们来说就够了,人类只需要发现规律、利用规律、从而帮助我们更容易的生存。

由此我相信历史不会完全重演,但一定会有相似。因为存在偶然性,我不需要完全知道历史为什么会这样发生,但我知道历史发生的细节总结出规律就可以趋利避害。放到具体层面,我相信统计学,统计学是不解释理由的,只告诉你就是这样发生的。任正非说:人工智能是什么?人工智能就是统计学,计算机与统计学结合就是人工智能。统计学家C.R.劳先生在他的著作《统计与真理——怎样运用偶然性》中说到:在终极的分析中,一切知识都是历史;在抽象的意义下,一切科学都是数学;在理性的基础上,所有的判断都是统计学。

讲了这么多,跟机器学习有什么关系呢?其实机器学习就是以统计学理论为基础支撑起来的,虽然不完全是统计学,还有比如强化学习、遗传算法、无监督学习等。

在现实生活中,我们常常面临着很多不确定性,其中包括两种不确定性,一:是否的困惑;二:是多少的困惑。大多数事物都可以转化为这两种,比如明天是否会下雨,会下多久?股票价格是否会涨,会涨多少?当然肯定还有很多不确定性无法归纳到这两类,然而你要知道人类文明是一点一点进步的,我们只能先搞搞清楚这两类不确定性,再谈更多复杂的东西。

为什么要关注这两类不确定性呢?其实我们更想要的是确定性而不是不确定性本身,目的是将不确定性降低为确定性,通过人们的实践发现这两类不确定性是有方法转化的,这方法即是:通过已知确定性来降低不确定性。

是否会下雨?

举个例子:比如我们通过仪器可以每天早上测量出温度、湿度、风力、风向这五种确定的数据,同时我们也记录已经发生的对应日期的晴与否的事实情况(如下图)。

【数据分析】用六千字来解释文科生怎么理解机器学习数据挖掘_第1张图片

我们总是好奇未来会发生什么(人类总是喜欢猜测预测,这应该是天性),爱思考的人类想知道3月24日是否下雨,于是在24日早上测量出了如下数据:

我们现在通过现代手段很便利获得数据,但在人类发展进化过程中能记录下来的比较是少数,一是外部条件比如测量工具不具备;二是人习惯性用感觉总结经验,而这难以记录下来。在上面的例子中,“观察”前几天的数据,我们就会有一个大概印象,气温在12℃左右、湿度在25%左右,风力在2级,风向为南、气压为1013pa左右,出现下雨天的可能性比较大。再看24日数据,好像有很多数据偏离太远而不具备下雨的条件,结论是不会下雨(可以称之为人类学习)。

这样的判断是有道理的,除此之外我们也没有别的方法可以用了,即使统计学或机器学习原理也是如此。区别在于当数据量比较小的时候,人类的感觉或者直觉其实更快更准确一点,用统计或机器学习反而只会差不多或者更差;不过总是这样还不行,当数据量比较大时,有意识地用理性的手段判断才会更加准确。

这在诺贝尔经济学家获得者丹尼尔·卡尼曼的书《思考,快与慢》中也有一些说法,他说我们的大脑有快与慢两种作决定的方式。常用的无意识的“系统1”依赖情感、记忆和经验迅速作出判断,它见闻广博,使我们能够迅速对眼前的情况作出反应。但系统1也很容易上当,它固守“眼见即为事实”的原则,任由损失厌恶和乐观偏见之类的错觉引导我们作出错误的选择。有意识的“系统2”通过调动注意力来分析和解决问题,并作出决定,它比较慢,不容易出错,但它很懒惰,经常走捷径,直接采纳系统1的直觉型判断结果。

要避免生理这种惰性怎么办?那就借助工具,借助计算机、统计学理论、测量工具等现代机器来学习数据隐藏的信息,这就是机器学习。

对于上面举的下雨的例子,通过几天的数据我们稍微能有效预测是否会下雨。其实从概率来讲,只比50%的概率多那么一丢丢的准确性。你对想要了解的情况一无所知时,即你连这五天数据都没有的时候,你预测是否下雨就相当于扔硬币,一半对一半的正确概率,但是当你有几天的数据,你知道的更多,不确定性就降低一点,可是这还不够,比50%好一点对决策并没有太大作用,所以我们要知道更多的数据,掌握更多的确定性。所以当你有过去五年的数据,你得出的结论是不是更可靠点?因为这些巨大的数据包含了五天数据可能反映不出来的影响天气的因素。这就是为什么人们常说你了解的越多越全面,你就能掌握事物发展的方向,往往在一个领域经营很多年的人的经验是很宝贵的。

对于一个事物的判断我们想要准确的结果,只能通过长期的经验积累形成的感觉,这种亲历的体验让你知道会发生什么。那么对于一个没有亲历的人怎么作出准确的判断呢?那就需要:1.收集大量大范围的数据,即大数据;2.整理、存储、计算的工具和方法,即算法和计算能力。在过去这两个客观条件发展比较缓慢,所以机器学习在几十年都没有很好突破,不过在近十年这些技术条件一一提升,因此机器学习现在就越来越火热起来,深度学习就是在机器学习基础上如火如荼展开的热门领域。人们利用这些工具降低不确定性、逼近确定性,提高决策的有效性。

机器学习的类型

说到决策,结合前文,我们把决策的一些问题分类两个类型,在统计学中对数据的分类有两种,一种是连续型数据,一种是离散型数据。对连续型数据我们常常想知道它是多少,对离散数据我们想知道它是还是否。所以问题分为:

【数据分析】用六千字来解释文科生怎么理解机器学习数据挖掘_第2张图片

在机器学习中,解决回归问题的代表性方法是线性回归,解决分类问题的比较多,如逻辑回归模型(基于激活函数)、贝叶斯模型(基于条件概率)、KNN(基于距离度量)、决策树/集成学习(基于信息熵)、奇异值分解(基于矩阵)、神经网络(基于生物学)。当然,分类问题如果分的类足够多,也可以解决回归问题。数轴上一个一个点可以看做是不同的分类,但是当足够密集,差别就可以忽略。A可以是B,B可以是A,比如二极管是半导体,电流只能从一段流向另一端,不能反向流动,M端初始为10V,N端为0V,但是当M端电流流向N端时,因为足够连续,M=N=10V,两端就是一样的了。

在上面下雨的例子中,若是把是否下雨换成预测雨量,分别为5mm、0mm、9mm、7mm。我们想找到某种规律来预测明天的雨量,但是规律不是一开始就显现的,而是用各种我们以为的规律去套、去实验,看和实际规律是否吻合,一个无奈的事实是任何规律都不是百分之百囊括所有现象,总有例外情况。

以线性回归模型为例

那我该怎么去实验呢?对于回归问题,就是用一些理论成熟的回归模型去尝试验证是否逼近真实,这不就是数学里最基本的概念“函数(function)“吗?这种种模型都是一种函数,输入X,经过对应函数关系F映射得到Y。

1. 构建模型

具体可以表示成Y=KX+b。这是一个典型的一元一次方程。如果已知X,我们可以得出Y,但是现在问题是我们连k和b也不知道,那咋办?现在关键的就是找到K和b,这两个就是找到映射关系的关键因素。那怎么找到呢?聪明的人就想到用已知的X和Y反推K和b,再用这个新函数预测新的Y。这里大X代表一个抽象符号,实际上X可以表示为X1,X2,X3,X4,…,X1可以代表温度这个因素,X2代表湿度这个因素,X3代表风力这个因素,等等。每个Xn又是具体数值的抽象符号,比如21日11℃记为X11,22日15℃记为X12,23日13℃记为X13,等等,X11、X12、X13、X14…构成X1变量集合,X1、X2、X3、X4…构成X集合,那么雨量预测问题可以用下面方程表示:

【数据分析】用六千字来解释文科生怎么理解机器学习数据挖掘_第3张图片

这里Kn表示Xn与Y之间的关联程度,b是偏置或者修正,b可以理解为从坐标轴解放了这个待定函数,使它免于固定在原点(0,0),可以自由移动接近想要的模型。

但是事实上,并没有一个完全确定的映射关系能解释所有因素,每个k值都是一个大概的预估,我们只能选择一个最合理最接近的一个k值来构建一个映射关系,那么什么叫合理,怎么评估呢?最直接的方法就是将预估值与真实值作差(误差error),哪个差值最小就是最好的。下面用一些概念来使这个过程更明确:

X包含的X1、X2、X3、X4…整体叫做输入X,单个Xn叫做特征或者因子;Y叫做输出Y;k和b叫做参数。确定k和b后输入Xn得到的值Y’记为预测值;用 ∑(Y-Y’)min来确定k和b,所以∑(Y-Y’)min可以转换为∑(k-k’)Xmin。要使误差 ∑(Y-Y’)最小,就要使得∑(k-k’)X最小,那么定义L=∑(k-k’)X,L为损失函数loss function的简称(这个定义还不是特别准确,对于具体∑(k-k’)X还需要通过数学化简得到一个新的函数才是真正的损失函数),求使得L最小的k和b的过程叫做求最优解。线性回归求解的过程有两种,一种是解析解(闭式解),一种是数值解(开式解),解析解是通过分离变量法来求解得到结果,这个解可以是一个数值也可以是一个函数形式;而数值解是用多次迭代、无限逼近的原理获得真实值的近似解。

  1. 求解优化

在前面说过,没有任何一个机器学习模型可以百分之百解释所有特征,我们获得的只能是一个接近真实的结果。明白了我们的境地,就知道问题的核心就在于只需要求oss function最小。如何求loss function最小?这就转化为数学问题了,数学里求函数最小怎么办?高中都学过的导数就可以解决。对于一个函数,导数为0往往是最大最小值或极大极小值。

对于数学模型计算来说无法直观判断到底求得的是什么,因此产生了一系列求解优化的方法,如梯度下降(上升)、随机梯度下降(上升)、小批量随机梯度下降(上升)、牛顿法、拟牛顿法、坐标轴下降法等。这些优化方法目的在于时空上节省成本,因为对算法(这里指求解算法)有时间复杂度和空间复杂度指标来衡量。通俗来讲,如果一个预测很准确的模型可是它的算法很耗时,往往决策是有时效性的,这样的算法显然就就不是合适的。所以上面这些优化方法是对时空因素的一点点改进,实际运用需要根据具体情况折中使用。天下没有免费的午餐。

使用求解优化方法求得最优的参数k和b,得到Y’=KX+b的具体形式,但这还不能直接拿来预测,因为我们所取得的已知数据都只是样本数据,是真实情况的很少一部分数据。我们只是在用样本数据推测总体数据的特征,因此需要通过一些方法验证样本数据是否能代表总体。这通常是无法知道的,但是却需要有这个意识,当模型很差的时候这也是一个影响因素,提醒我们数据不对。一般情况下,都是先假设样本数据是和总体数据具有相同分布特征,样本数据是等距离或等等比例抽样,所以机器学习重要的地方就在于找对样本数据、找对特征,否则模型跟真实是脱节的。

3. 数据集分布及划分

大自然很神奇,人类也很聪明。本来各种数据是随机零散的,但是却被人总结出了一些经验,杂乱的数据背后呈现一定分布规律,比如常见的分布有二项式分布、泊松分布、几何分布、均匀分布、指数分布、正态分布、F分布、卡方分布等等,再利用这些分布特征来做一些有效的推测。

再回到用样本估计总体上来,这是我们的目的。那怎样才能比较准确估计呢?还是只能假设两者具有相同分布。我们把收集到的样本数据再当做一个整体,再将它划分,一部分作为训练样本集(training set)、一部分作为验证样本集(validating set),还有一部分作为测试样本集(testing set)。考虑到固定的三部分划分没有充分利用数据集信息,往往会轮流将这三部分身份互换,换个十次,称作十折交叉验证。除此之外还有很多其他的抽样方法。这样的好处就是充分学习样本信息获得好的模型。

  1. 模型评估

划分好数据集,开始用模型去拟合,那么如何衡量模型是好是坏呢?前面讲到的预测雨量是回归问题,预测是否会下雨是二分类问题。对这两类问题衡量方式不同。回归模型的衡量指标是MAE(平均绝对误差)、MSE(平均平方误差)、RMSE(均方根误差)、解释变异(误差的方差)、决定系数R2;分类模型的评估指标是混淆矩阵,由混淆矩阵衍生出的准确率(accuracy)、精确率(precision)、召回率(recall)(本来还有另外三个指标,但是这三个指标的反面,我们往往只关注我们关心的一面),此外还有F1score、ROC曲线、AUC分数、PR曲线。

回归和分类问题只是常见的场景,它们被称为有监督学习,还有无监督学习,比如聚类问题;半监督学习,比如强化学习。有无监督的区别在于是否有Y值,有Y值的就是有监督学习。顾名思义,Y值就相当于一位老师,每学习一行数据获得的结果都与真实Y值做对比,在Y值的监督下不断调整误差,直至误差最小。聚类问题的衡量指标是兰德指数、轮廓系数、互信息等。

  1. 特征工程

总结上面的思路就是获取数据——处理数据——训练模型——模型评估——模型应用——监测修正。在这个过程中,获取数据和处理数据两步是非常耗时耗力的。数据和特征决定了模型的上限,而算法只是逼近这一上限而已。因此不是使用多少层神经网络就可以获得好的效果,数据质量才是最重要的。

获取样本数据的方式有四种:1.自有数据;2.公开数据;3.付费数据;4.爬虫。这里对如何获取数据先不细讲。

数据处理,就是常说的特征工程(feature engineering)。我们获取的数据一般是没办法直接用于训练模型,是不规整的。比如前面下雨问题中温度是百分数、气压与风力相比绝对值量级比较大、风向是文本形式。所以要对每一种数据情况进行处理。

5.1 标准化/归一化

如果两个特征数值规模相差很大,对线性模型波动就会影响比较大。所以要对数据进行归一化或标准化,归一化是指X‘=(X-Xmin)/(Xmax-Xmin),标准化是指X’=(X-Xmean)/σ,两者都是改变了数据的数值,前者没有改变相对位置而改变了数据的分布,而后者没有改变数据的分布而改变了相对位置。

5.2 特征编码

还有对于风向这类类别型数据、日期这类时间型数据,不能直接进行计算。这就需要将它们从文本型转换成数值,转换的方法叫做编码,编码的方式有哑变量编码、独热码、标签编码等至少十七种。

5.3 特征分箱

如果有连续型数据,还可以通过分箱或者离散化来减少计算量和防止过拟合。什么是过拟合呢?指的是我们找到的模型在测试样本集上效果很好,但是实际应用部署时性能却非常差,说明模型对样本数据集学习过度了,这个模型就不是好模型。防止过拟合还有什么方法呢?就是降维,降维的方法比较成熟的有PCA和LDA。

5.4 缺失/异常处理

除了上面,特征工程还有检查数据是否有缺失值、重复值、异常值。对重复值需要删除;对于异常值需要甄别并且判断要不要删除,有些异常值对结果影响很大,对实际业务很有用;对缺失值,不同程度有不同处理方法,缺失程度比较高的直接删除,少的可以通过均值(众数、中位数)填充、前项(后项)填充、最近邻填充、回归填充、多重插补填充等。

5.5 特征选择/共线性/衍生变量

有时候模型怎么调整效果都不好,可能说明有些特征不重要但是纳入太多到模型中,有些特征存在相关关系,还可能是缺少了重要特征。所以对特征过多来说,可以进行特征选择,特征选择的方法有三种,一过滤法(filter),根据特征与目标变量Y的相关性,设置一个阈值,过滤掉相关性不高的变量,有相关系数法、卡方检验法、互信息法;二包装法(wrapper),根据预测误差不断循环迭代特征,将提升效果的纳入,无效的剔除;三嵌入法(embedding),就是把特征选择的过程嵌入到模型学习的过程,当做学习模型的一部分。对于特征之间存在相关关系,一般就是进行共线性检验,删除高共线性的特征;对于特征维度过少需要增加变量,这就是衍生变量处理,或者多项式特征变化处理。

6. 模型调优

上面基本上囊括了特征工程的大部分内容。做数据挖掘的过程,特征工程占到70%的时间,建模部署占到30%。特征工程的部分完成后开始训练模型,求解最优的k和b,在这个过程中还会引进超参数,超参数是什么呢?一个典型代表就是学习率(learning rate),前面说到的梯度下降法求解过程中通过迭代慢慢逼近真实值,但是这个迭代的跨度是人为可以调节的,可以学习步子大一点也可以小一点,所以称之为学习率。学习率的大小并没有明确规定,过大可以加快学习速度但是可能找不到最小值,过小可以找到最小值但是会耗费很长计算时间,所以还得看具体情况进行调整。超参数的调整方式有:暴力搜索法、网格搜索法、贝叶斯搜索法等等。

7. 模型监测

训练好模型之后,使用衡量指标进行评估,如果评估效果达到理想状态,则投入应用,反之就需要再回过头反复进行前面的步骤(这就是CRISP-DM数据挖掘流程中的环形)。即使模型部署上线效果很好,但是模型应用后也会影响到数据的分布,所以模型收益的边际效应会越来越小而不会一成不变,这就需要实时监控,不断训练新的模型。

结尾

至此,机器学习、数据挖掘的整个过程所用到的技术以一个文科生的理解视角都已讲完。但是并非这么一个简单的讲述就能够实际应用,每个部分都有着种种细节,还需要多踩几个坑才行。本篇也只是个人简介,希望能给阅读的朋友一些参考,如果不对可以私戳我。

需要强调的是,要进行机器学习,不得不认同可知论,即规律是可以被发现和掌握的,否则机器学习的理论根基是不存在的。在实际应用中,机器学习确实能帮助发现规律,但都是建立在对扎实的细节掌握上。

最后欢迎大家关注我,我是拾陆,关注同名"二八Data",更多干货持续为你奉献。【数据分析】用六千字来解释文科生怎么理解机器学习数据挖掘_第4张图片

你可能感兴趣的:(Python基础,机器学习,应用案例,数据挖掘,机器学习,数据分析)