Python总的来说只是一种工具,如何用好这个工具,最大程度的帮助你,需要自己去探索了。今天我们来讲一些Python编程之外的东西,希望能够对你的Python学习有所启发。
首先,我们先对Python中package的使用作出一些概括和总结。
(1)工具类package
首先,我需要在这里澄清一下关于package-user和package-developer的关系。去develop一个package可能是一件让大家觉得很高级的东西,去use一个package就显得很低级。于是就有很人去说:这个编程语言我也会,不就是用package吗,又不是去当developer。这种观念是不对的。去develop一个package,并不是一件很难得事情,但也是需要巧合的。首先你是一个编程能力很强的人,再者你需要有这样一个契机,最后你要有一个做developer的心。Open-source最大的优点就是user/developer可以互相的leverage。User能够提供反馈,developer可以根据反馈对自己develop的package进行修改,两者是相辅相成的关系。用package去完成一项工作,就好像去组装一台跑车,零件都是时常现有的,你可以去买,但组装出的跑车的好坏就需要这个技术人员的技术知识了,首先他要能够有这个领域的专门知识,再者他要有甄别零件好坏的能力,最后他需要有一颗不断探索钻研的心。在之前的文章中,我也说过,会出一些专门的文章去讲解一下Python最本层的package,等我忙过这段时间,就会系统地做一篇总结。
(2)计算类package
做computing的package和作为工具的package最大的区别在于,后者你并不需要去了解底层代码,只需要了解他的性能就可以了,但做computing的package是需要你去掌握更深层次的东西的。一些Statistical package,你需要的是去学习模型,并不是去学习怎么用代码,这种package在用之前,你需要了解这些底层代码的工作原理。比如说最简单的linear regression。我们只知道计算机是不能识别公式的(closed form solution)。他在计算的时候需要用迭代等算法去解。Linear Regression的算法就有很多,比较通用的是QR-decomposition,是一种关于矩阵分解的算法,计算机硬件水平比较良好的今天,这种算法能够取得超级无敌快的速度,但是,计算机是不能存储分数的(比如7/9,这里囿于作者水平有限,不作定论),在矩阵的计算过程中就有很严重的近似问题,如果数据的quantities比较小或极端的大,又或者是矩阵的sparsity比较高,在一些要求精密计算的作业中,用QR分解矩阵去算的结果往往不太准确。另一种比较慢的是Successive Orthogonalization。这种算法是一种迭代算法,每一步计算都要通过正交化去消除一个feature和其余feature的重叠解释作用。在数据量比较大、模型比较复杂的时候,会非常的慢,但他的精度在近似上的损失会比较小一点。
今天我们来对LR model做一个summary,借此感受它对整个traditional statistics 和machine learning 的发展的贡献。
Modeling Theory and Linear Regression Model
—
Modeling Theory Overview
Modeling的整个过程,可以分为:Set the model purpose、Collect the data、Modeling、Implement&Interpret、Moniter。
但今天只关注Modeling这一个点。假设set the purpose/collect the data这些步骤都已完成,同时忽略模型的二度使用。
第一步,你需要去找一个model,which you think that might fit the data well and also help you mine the information from data you want。
第二步,你需要去找一个estimate method to get the estimate。这一步通常是被忽略的,因为计算机可以自动帮你完成。
第三步,你需要去evaluate the model, e.g. how is the model fit? It the model used in the right way?
第四步,implement the model and draw the conclusion。
Definition Preparation
Degree of freedom
这个是在线性模型中最常用的概念。什么是自由度?这是我学习Linear Regression的时候对这个概念的理解,当然不代表正统的学术观念。我们知道Linear Regression是(X,Y)空间到X空间的投影,换言之,我们用X去估计Y的值。这个投影矩阵是X·inverse(transpose(X)·X)·transpose(X),那么我们对投影矩阵的可操纵程度,就是所谓的自由度。那么这个自由度是怎么衡量的?是用迹(trace)。Trace(projection matrix)。我们知道trace有一个很重要的性质,对于相似的矩阵,它的迹是不变的,也就是说trace(inverse(P)·X·P) =trace(X),对于projection matrix,tr(P)= rank(P),也就是说在linearregression里这个投影矩阵的迹,就是它的秩,也就是变量的个数。
对于Linearmodel的很多变形,比如说加了penalty term的Lasso, Ridge Regression,他们在本质上是去减少模型的自由度,因为自由度的增加,虽然加大了对投影矩阵的操纵程度,继而增加了模型的灵活程度,会使得模型对数据的过度依赖,从而不能适应于别的数据,是不利于做预测的。对于lasso是没有解析解的,但对于Ridge Regression,我们可以看到它的类投影矩阵是X·inverse(transpose(X)·X + lambda·I)·transpose(X),从而可以求得它的近似自由度,是比最小二乘法的出来的小的。
Least square/MLE
最小二乘是一种estimate的方法!最小二乘是一种estimate的方法!最小二乘是一种estimate的方法!重要的事情说三遍。它没有假设,它是一种几何解法,只有算的出来和算不出来两种情况。什么时候算不出来呢?我们看到投影矩阵是有一个逆的。这个逆在什么时候算不出来呢?就是数据矩阵的秩并非满秩,我们知道rank(AA’)= rank(A)=rank(A’),也就是说,如果数据中存在有共线性,这个逆是不存在的,于是这个投影矩阵就不存在。
那我们常说的Linear Regression中的几个假设,是基于什么的假设呢?是基于模型的假设。正统的说,Linear Regression中的estimate的方法应该是Maximum Likelihood。这种解的方法恰似又于Least Square这种geometric的解法相当,于是就有很多人造成了混淆。
MLE是机器学习的核心,很多方法的objective function都是去求最大似然方程的最小值。Least Square是另外一种重要的学习方法,因为它是基于minimizesum of the distance of points to regression linear,从而演变了很多别的方法,least angle,least absolute, 以及SVM的思想核心。用来解MLE优化问题的方法,多半是基于Gradient Decent的方法,这也成为了在很多traditional Machine Learning以及Deep Learning中核心的学习方法。
Chi-square distribution
Chi-square distribution可以说是linear regression中最重要的工具,它是用来构建各种检验的一个重要量。我们知道SST = SSR + SSE, 这三个都是Chi-square distribution,那么他们的自由度有代表了什么呢?SST= sum(y-ybar)^2,它的自由度是n-1,因为它本来可以有n个,但y-bar的出现,对它多了一层限制。SSE的自由度是n-p,我们可以通过简单的数学推到得出。SSE=sum(y-yhat)^2 = Y’(I-P)Y,tr(I-P)= tr(I) – tr(P)=n-p,注意这里I是Identity Matrix。也就是说SSE是n-p个Normal distribution的和,自由度就是n-p。
欢迎留言交流~
领取专属 10元无门槛券
私享最新 技术干货