数据分析需要掌握哪些知识?

数据分析需要掌握哪些知识?

首先,从知识体系的角度来看,当前学习数据分析需要学习三大块知识,其一是数学和统计学知识、其二是大数据知识、其三是行业知识。

数学和统计学是数据分析的基础,在大数据时代,要想在数据分析领域走得更远,一定要重视数学和统计学知识的学习。从某种程度上来说,数据分析就是构建在数学和统计学基础之上的,虽然当前有很多数据分析工具和平台可以使用,但是如果脱离数学和统计学知识,数据分析往往很难深入。对于数学基础比较薄弱的人来说,在学习数据分析的过程中,可以同时补学数学知识,包括线性代数和概率论等等。

数据分析是大数据技术体系的重要组成部分,实际上当前的数据分析也是大数据进行数据价值化的主要手段之一,所以当前学习数据分析一定不能脱离大数据技术体系。在大数据平台的支撑下,数据分析可以借助于大数据平台来达到一个更好的分析效果,比如速度提升就非常明显。

从数据分析的手段上来看,当前数据分析主要有两种方式,一种是统计学方式,另一种就是机器学习方式,当前机器学习的数据分析方式受到了广泛的关注,基于机器学习的数据分析未来也有广阔的发展和应用空间。采用机器学习进行数据分析,需要从算法设计开始入手,然后完成算法实现、算法训练、算法验证和算法应用等一系列环节。

最后,对于数据分析的初学者来说,可以从Python开始学起,然后进一步学习数据库、大数据平台和机器学习等内容,大数据平台可以考虑一下Hadoop和Spark。

机器学习的数学原理之——不适定问题的计算方法(一)

机器学习和不适定问题紧密相连,在机器学习模型中遇到的许多问题,如过拟合、欠拟合、数据不干净、loss下降困难、准确率提升不易等,都涉及不适定问题。我会逐步分析,请大家耐心等待。

我将尽量用简单、通俗的语言向大家讲解不适定问题的计算方法,希望用讲故事的方式传达我的理解,让大家感受到知识的魅力,而不是冰冷的定义。有些地方为了生动,可能牺牲了一些严谨性,所以请大家多多谅解!

首先,我们来谈谈什么是不适定问题。

首先,我们来谈谈什么是反问题。反问题是相对于正问题的,简单来说,好解决的问题就是正问题,不好解决的问题就是反问题。举个例子:

可以看出,函数插值或拟合就是一个反问题(相对于已知函数,求其某些点的对应值而言),而深度学习本质上就是用数据点去拟合函数,相对于训练好的神经网络模型,神经网络的训练过程就是一个反问题。

好的,回到不适定问题。什么是不适定问题呢?答:不适定的问题就是不适定问题。大家先放下手中的鸡蛋和西红柿,还有你,拿着菠菜的那位。

举个例子,求导数。求导比积分简单对吧,很明显,求导是正问题,积分是反问题。然而实际上,积分是适定性问题(给定初始条件),求导才是不适定问题。用数学语言来描述一下:

下面我们来验证一下求导的不适定性。存在性唯一性肯定是满足的(即使不满足,加特定条件也会满足,所以在应用上,不适定问题主要说的是稳定性),那么我们来验证稳定性。先给y一个小扰动,看看是否在任何情况(对于任何函数,或者我加的任意扰动)下,导数 [公式] 都不会受到太大的影响。为了衡量“影响”,我们引入一个范数(对实数或复数来说就相当于绝对值,它可以衡量一个函数或者说一个变量的大小,自然也可以衡量函数与函数之间的差异性):

[公式]

此外,受到扰动的数据[公式] 对应的导数为 [公式] ,干净的数据 [公式] 对应的导数为 [公式] 。

令[公式] , [公式] 是我们加的扰动项,而[公式] 是很小的一个量,显然这个扰动项非常小。我们就看看在输入数据受到这样一个小扰动的情况下,输出结果会不会也变化不大:

[公式]

原数据与脏数据的差距非常小:[公式]

然而原来的解和受扰动的解的差别却趋于无穷:[公式]

因此,求导这个问题是不适定的,经常求着求着就求出无穷来。大家做机器学习敲代码的时候都有过inf或者nan的体验吧,本质就是这个问题。其实,也很容易理解,积分是求面积嘛,某一点函数值它再大,由于 [公式] , [公式] 非常小,因此 [公式] 很容易被控制,因此S的变化是很连续很舒服的。而导数则不然,一旦函数值有阶跃或突变,没有任何东西可以控制它,求导的时候更是给它除了个无穷小量[公式],相当于添了把火,帮了倒忙,所以很容易出现奇异值。这个就和我们数分(高数)里学的对应起来了,“可导”是个很强的要求,“连续”次之,“可积”再次之,可导必连续,连续必可积,反之则不然。(当然啦,他们之间还隔着Lipschitz连续,对应Lipschitz条件等等,以后有空再聊)

导数在机器学习里的地位应该不用我多讲,神经网络误差反向传播本质上就是求导链式法则,RNN里的梯度爆炸、梯度消失,本质上都是来源于求导这一操作数学性质的不稳定,虽然LSTM改进了结构并用记忆线缓解了这一问题,然而数据的扰动产生的求导时的不稳定,时刻影响着我们设计的神经网络结构,并不是说你程序里没跑出inf或nan它就是稳定了,很多情况下它其实是在消极怠工,白白消耗算力罢了。那么我们该如何解决呢?

请听下回分解!

那个……我又回来了,女朋友化妆还要一会儿,我再往后写点……

之前聊到,如何消除求导操作的不适定性,我来告诉大家,小本本都拿出来了哈,嗯哼~

选择特定的范数可以消除不适定性!

例如,在X空间(就是导数空间),我还是采用之前定义的范数:[公式] ,然而在函数空间Y(就是原函数空间),我用函数的导数来定义该函数的范数:[公式] ,C'是一阶可导函数组成的空间。这个时候我们来看一下:

他们是一样的,也就是说,我只要把输入数据的误差控制在一定范围内,那么输出数据的误差也不会太大,这不就解决问题了嘛!!!真TM的机智!

可是我明明啥都没做呀,一没改求导法则,二没改扰动项(相当于没换掉脏数据),问题完全没变,怎么就解决问题了呢?

因为其实我们没有解决任何问题……我们只是改了衡量标准。这种做法虽然在数学上成立,但是在机器学习中基本不具有可行性,比如,在机器学习中,误差的定义方式你是不能乱改的,不能说训练效果不好,输出误差太大了,取个倒数吧,100就变0.01了,下次误差1000,你就输出0.001,这个不解决实际问题,属于掩耳盗铃,做得更绝一点,我可以直接定义0范数,把啥都映成0,岂不是更爽?对任何扰动,我都保证输出误差为0!不仅输出误差是0,输出的啥都是0,厉害吧?可把我牛逼坏了,不行了我得叉会腰~

好的,我们刚刚并没有解决掉任何问题,但是成功地把头埋在了沙子里,可喜可贺!

大家先收起心中浓浓的杀意,我皮这么一下是有自己的道理的!比如说首先……皮一下很开心,对吧~

其次……改变衡量标准虽然在实际执行的时候不太合适,但是,这种定义强范数的方法是具有一定启发性的,它对数据提出了一定的要求,因此后边我们确实会用到,所以这里就提了一下,埋个伏笔。(正好等我女朋友化个妆)

那么~

欲知后事如何,请听下回分解!