基哥也开始学机器学习了1

来源:互联网 发布:pci总线 linux 编辑:程序博客网 时间:2024/04/30 00:42

先说点题外话

===本科毕业的目标是拿下BAT三家offer,好遗憾差一点,百度应该是被拒了===

面试感觉不算很糟糕吧,还行,不过后来犯了一个超级简单的错误,并且笔试太糟糕再加上那些不该说的话,导致跪了,其实我能感觉到面试官对于让不让我过是有点纠结的。

虽然百度的面试官挂了我,不过我还是承认这个面试官很厉害,从编译原理,自动机,C++虚函数底层实现,各种算法,数据结构,再到搜索,神经网络什么都能问,真的是一个知识面很广的面试官,应该是来自一个比较厉害的部门的。挂了就是挂了,说明自己的深度还是不够。

最终还是选择了读研。

其实这次面试完,感觉鹅厂还是挺好的,嘻嘻,也拿到鹅厂的offer了。阿里给了我人生第一个offer也很好哒。

上交的硕士也拒了,浙大的硕士也不要了,清华的博士也不够诱人,最后选择留在了本校读研。囧囧===

反正菜鸟如我,也拿不到清北的硕士了,此处的清不包括软件学院,北不包括软微。清北计算机基本都要直博生了,北大信科可能偶尔一个方向特别偏的所会给硕士。

也许无论企业还是学校,我都几乎拿到了很top的offer,当然仅仅国内哈,同样被出国的同学还有谷歌offer的同学吊打,但是本科读完发现无论是深度还是广度自己都有很大的欠缺,被各路大神无情碾压,所以硕士继续加油哒。好了,闲话到此。

================================

机器学习我是看的机器学习基石

从第二章开始:对于各个字母做了解释
比如H是什么
举个例子,在一个二维平面上,有两种点,XX和oo,现在我们的目标是找到一条直线,使得XX和oo分别在这条线的两边,那么H是什么,H便是这个平面上所有直线的集合,也就是各种可能假设的集合。那么f是什么,f就是一个函数,能够完美分开XX和oo的,也就是在理论中存在的那个完美,绝对正确的函数,那么g是什么,g就是在H中找到一个合理的假设,使得,g的结果对于f的结果尽可能接近。
对于一些问题,假如银行是否发信用卡
我们考虑的几个features 用一个向量X(x1,x2,x3,...,xn),对于每一维的指标,我们有相应的权重,那么对于这个对象,打分就是value = x1*w1+...xn*wn
那么最后发不发就是sign(value - bound),bound是一个及格值,也就是边界值,显然对于value > bound ,那么我最后的结果就是+1,代表发银行卡,否则是-1,不发卡,对于0,暂时忽略。
对于f我们是不知道的,我们应该尽可能找一个接近的g,那么如何做呢?
首先,我们最起码要保证,在看过的资料中,g(x)和f(x)尽可能接近,当然如果一模一样就更好了
我们的大概思路是,对于初始化一条线,我们不断迭代,不断来减少错误。

对于每条不完美的线,总能找到一个点(xn,yn),使得sign(w(t)的转置乘上xn) 不等于yn ,其中t代表是迭代t次以后,w(t)就代表了迭代t次后的线的法向量。

那么迭代公式,显然可以有w(t+1) = wt + y(n)*x(n),其中y(n)就是一个正负号。这个算法就是PLA算法

那么就这样一直迭代下去,当迭代停止的时候,就说明对于我们看到的资料,g与f满足一模一样

那么在考虑一点,g与f在所看见的资料以外的资料会是怎么样的,而且这个迭代是不是一定会停止迭代呢。

下面给一个思考,y(n)*w(t+1)*x(n) >= y(n)w(t)x(n),因为w(t+1) = wt + y(n)*x(n) , 把后面这个式子带入前面,面前可以看到不等式是成立的,因为看到的资料是固定的,所以对于这些资料上y*w*x 的最大值就是资料的个数,同时y*w*x越大,就说明现在这条线在看见的资料上与f更接近,而由前面的不等式,可以看到,这个迭代是不严格递增的,所以的确是在变好。吐槽一下,学校的网络好卡。

停下来必要条件就是需要这个二维图本身就是一个可以用直线来划分,如果本身就不能用直线来划分,那么肯定就不会停下来了。即线性可分的。

再从另外一个角度来思考,w(f)代表f对应的直线的法向量,那么我们如何判断两个法向量是否接近呢?

显然的一个方法,就是内积的大小,再不考虑向量长度的情况下,越接近,肯定内积越大

下面式子w(f)w(t+1) = w(f)( w(t) + y(n)x(n) ) = w(f)w(t) + w(f)y(n)x(n) > w(f)w(t) ,所以的确是在增大的,所以方向是在接近的,但是这个是不严谨的,我们还需要考虑长度是吧,那么我们继续

那么有式子

||W(t+1)||的平方(下面用m表示) = ||w(t) + ynxn| |的平方,我们需要考虑一点,这个表达式是修正的,而只有错误的点,才需要修正,所以ywx <= 0

m = ||w(t)||的平方 + 2ywx +||yx||的平方 <=  ||w(t)||的平方 +||yx||的平方

所以实际上长度增加最多为max||x||的平方

所以长度好像的确是在增加,所以我们需要正规化,即对于向量除以长度,使得长度为1,再来算内积

即w(f)/|w(f)| * w(t)/|w(t)|

对于分子w(f)*w(t) >= w(f)*w(t-1) + min yw(f)x >= ... >= w(f)w(0)+ Tmin yw(f)x = Tmin yw(f)x 

对于||w(t)||的平方 <= ||w(t-1)||的平方 + max||x||的平方 <= ... <= ||w(0)||的平方 + Tmax||x||的平方

所以 ||w(t)|| <= 根号下(T * max||x||的平方),注意w(0)我们取得0向量

所以带入上式 (T min y w(f) x )/(根号T *max||x|| * ||wf||) = 根号T * C 

C就是右边除开那个根号T以外的其他一堆常数。   

所以的确是递增的,同时内积肯定<= 1 ,所以如果我们喂给算法吃的资料是线性可分的,那么的确是会停下来的。

当然到此这个资料是不是线性可分的呢?或者就算是线性可分的,那么要多久才能停下来,同时就算资料本身是线性可分,但是由于噪声的存在,所以也不一定找到能完美的线。

所以我们退而求其次,我们找犯错误最少的线,然后这是NP-hard问题===

好吧,我们还是老老实实较优解,也就是在每次迭代,我们都有一个变量记录目前最好的解,如果

在后面的迭代中,我们每次迭代,就和目前的最好的解比较,谁好保留谁。

当然迭代找错误点的时候,需要随机,来保证尽量不陷入局部~

当然后面这个算法,肯定会慢一下===1.保存当前的最优解,2.比较当前的最优解和迭代产生的解谁好

第二章结束~
由于打符号比较辛苦哒,所以符号不太标准,什么矩阵的转置,什么上标,下标也没有写得很好,但是逻辑基本还是

应该没有问题哒~




0 0
原创粉丝点击