機(jī)器學(xué)習(xí)是一門(mén)作預(yù)測(cè)的方法論和工具。預(yù)測(cè),為什么?機(jī)器學(xué)習(xí)和人的學(xué)習(xí)一樣,從經(jīng)驗(yàn)中學(xué)習(xí),在歷史發(fā)生的數(shù)據(jù)中抽取出數(shù)據(jù)中存在的模式,因此機(jī)器學(xué)習(xí)是更接地氣的,和學(xué)科結(jié)合密切的,不同的數(shù)據(jù)分布適合于不同的算法。所以,機(jī)器學(xué)習(xí)的算法不存在絕對(duì)的誰(shuí)好誰(shuí)壞,我們只能得到在當(dāng)前數(shù)據(jù)集上比較好的算法,比較好的是什么意思?就是泛化能力相對(duì)較好的算法,即,用算法去預(yù)測(cè)未知數(shù)據(jù)的能力。當(dāng)然這也是沒(méi)辦法直接去預(yù)測(cè)的,我如果知道了哪個(gè)算法泛化能力好,不是就說(shuō)明我有預(yù)知能力嘛?事實(shí)上,我們是將經(jīng)驗(yàn)數(shù)據(jù)分成了兩部分,一部分用來(lái)訓(xùn)練學(xué)習(xí)算法,也就是用來(lái)發(fā)現(xiàn)數(shù)據(jù)的規(guī)律,另一部分是用來(lái)檢驗(yàn)學(xué)習(xí)效果的。好,既然我們可以用來(lái)檢驗(yàn)效果,那么這部分?jǐn)?shù)據(jù)就一定是有答案的,我們用預(yù)測(cè)的結(jié)果和實(shí)際的結(jié)果比較,判斷哪個(gè)算法學(xué)習(xí)到的知識(shí)準(zhǔn)確,也就是測(cè)試誤差小。用測(cè)試誤差來(lái)近似泛化能力。好,那么分割訓(xùn)練集、測(cè)試集也是個(gè)麻煩事。本來(lái)我們用來(lái)學(xué)習(xí)的樣本就不多,你還要拿一部分出來(lái),那我在整個(gè)數(shù)據(jù)上學(xué)習(xí)的效果肯定和在子集上學(xué)習(xí)的效果有差距,如何盡量去避免這種問(wèn)題呢。當(dāng)前分割的方法主要有三種,第一:留一法,把數(shù)據(jù)分為兩個(gè)子集,且沒(méi)有交集,當(dāng)然要保證采樣的時(shí)候盡量不破壞數(shù)據(jù)本身的分布。什么意思呢,假如我要學(xué)習(xí)的模型是分類(lèi)妹子和漢子(1表示妹子,0表示漢子)數(shù)據(jù)集的標(biāo)記y有70個(gè)樣本是1,30個(gè)是0。我們采樣時(shí)候,把前70個(gè)都放到訓(xùn)練集去了,那肯定會(huì)出事呀,給的數(shù)據(jù)都是妹子的描述,學(xué)習(xí)器就認(rèn)為所有的人都是妹子,在測(cè)試集一跑,哎呦媽呀,都預(yù)測(cè)錯(cuò)了,還不如隨機(jī)猜測(cè)呢,起碼有一半的正確率。那這個(gè)學(xué)習(xí)器出什么問(wèn)題了,首先是樣本沒(méi)選好,在訓(xùn)練集中要差不多選70*0.7=49個(gè)妹子,21個(gè)漢子的樣本,這樣才能學(xué)到兩者的內(nèi)在模式,其次,學(xué)習(xí)器過(guò)擬合了,也就是說(shuō)學(xué)習(xí)太好了,把訓(xùn)練集帶的偏差也學(xué)到了,而這些偏差在其他樣本中是沒(méi)有的。那么這樣的學(xué)習(xí)器泛化能力也不好。那學(xué)習(xí)器就郁悶了,你又要我學(xué)習(xí)的好,又要我不能學(xué)的太好,把隨機(jī)噪聲也學(xué)到。這又是一個(gè)折中,真的不好衡量。那我們咋解決呢,我們就看學(xué)習(xí)器在測(cè)試集上的表現(xiàn)。我們期望的是這樣的學(xué)習(xí)器:在訓(xùn)練數(shù)據(jù)上誤差很小,在測(cè)試集上誤差也要接近訓(xùn)練誤差,不能相差太遠(yuǎn)。閑話(huà)稍后在扯,繼續(xù)數(shù)據(jù)集分割的討論。第二種分割方法,k-折交叉驗(yàn)證,首先把樣本幾乎均勻的分成k份,編號(hào)依次是1,2,3...k我們依次的拿出一份做測(cè)試集,其余的k-1份數(shù)據(jù)做訓(xùn)練集,訓(xùn)練k個(gè)學(xué)習(xí)器,然后從里面選一個(gè)最好的,這種方法的優(yōu)點(diǎn)是效果比上面說(shuō)的留出法好,缺點(diǎn)嘛,訓(xùn)練了這么多學(xué)習(xí)器,成本也是蠻高的。所以,no free lunch,出來(lái)混,總是要還的,這就像算法里永恒的主題:空間和時(shí)間的協(xié)調(diào)。具體的折中策略,要根據(jù)場(chǎng)景去考慮,具體問(wèn)題具體分析。第三種,booststraping。這種采樣也是挺有趣的,有放回的采樣,可是可是,統(tǒng)計(jì)里面的有放回是樣本很多的情況,我們?nèi)『苌賻讉€(gè)。在機(jī)器學(xué)習(xí)里面,我們有m個(gè)樣本,但是要采樣的個(gè)數(shù)也是m,那這就會(huì)存在一些樣本反復(fù)被抽中,一些樣本從來(lái)沒(méi)有被抽中,那這樣的方法靠譜嘛?我的心也微微一顫,我們先來(lái)統(tǒng)計(jì)分析下,一共采樣了m個(gè),每個(gè)樣本在每次采樣中被抽中的概率都是1/m,那么沒(méi)抽中的機(jī)會(huì)就是1-1/m,如果在m次采樣都沒(méi)被選中,概率是(1-1/m)^m,當(dāng)m接近無(wú)窮大,上面的值大約是33.3%,大概1/3,還是挺多的哦,如果只做一次學(xué)習(xí),如果樣本比較多,不建議用這種方法。這種方法將在隨機(jī)森林算法里大放異彩,這個(gè)概率也是很有用的,先立個(gè)flag。
然后機(jī)器學(xué)習(xí)和人學(xué)習(xí)一樣嘛。機(jī)器學(xué)習(xí)算法有一大類(lèi)問(wèn)題是監(jiān)督學(xué)習(xí),也就是給的數(shù)據(jù)是帶學(xué)習(xí)結(jié)果的,那好嘛,我先學(xué),然后去和答案比較,差距太大,我就繼續(xù)去學(xué)習(xí)唄。我學(xué)呀學(xué),靠,不知道過(guò)了多久,我覺(jué)得學(xué)的效果挺好了,和答案相差不多了。那我總得評(píng)估我的效果吧,打個(gè)分吧??墒且趺创蚍郑^疼,這還不是得我們?nèi)藖?lái)考慮。打分得前提首先得定個(gè)標(biāo)準(zhǔn)吧,就是得給個(gè)學(xué)習(xí)的具體目標(biāo)吧,我一點(diǎn)點(diǎn)去靠近她,先放棄全局最優(yōu)解,然后才能去接近最優(yōu)。好,我們想,監(jiān)督學(xué)習(xí)有兩種,分類(lèi)和回歸。分類(lèi)今天先不表。今天簡(jiǎn)單說(shuō)下回歸?;貧w就是給了一堆的特征,然后讓你去預(yù)測(cè)一個(gè)數(shù)值,那么我們的優(yōu)化目標(biāo)可sigma|y-f(x)|嘛,去最小化這個(gè),在高中就學(xué)過(guò),如果一個(gè)大于目標(biāo)a,一個(gè)小于目標(biāo)a,兩個(gè)就抵消了,但是,他們都是誤差有偏差的,所以這個(gè)不靠譜,那么我們就平方吧,這個(gè)好,這個(gè)準(zhǔn)則也確實(shí)挺管用,還有個(gè)專(zhuān)業(yè)名(mse),事實(shí)上,這個(gè)準(zhǔn)則可以通過(guò)假定誤差(y-f(x))服從高斯分布得到,而我們知道,高斯分布假設(shè)是合理的。于是我們的第一個(gè)模型,線(xiàn)性回歸就呼之欲出了,線(xiàn)性是說(shuō)特征的參數(shù)theta是線(xiàn)性的,不存在交叉項(xiàng),特征之間是可以交叉的,在優(yōu)化函數(shù)里加上l1范式,就得到了LASSO回歸,l1范式可以保持特征的稀疏性,因此可以用于特征的選擇,在優(yōu)化目標(biāo)里加上l2范數(shù),就得到了Ridge回歸,如果是l1,l2的組合,就叫做彈性網(wǎng)。好,繼續(xù),如果我們假定誤差之間不是均等的,也就是考慮不同的誤差給不同的權(quán)重,就得到了局部加權(quán)回歸,權(quán)重可以采用rbf,又是高斯核。再次膜拜大神。如果是另一種假設(shè),預(yù)測(cè)值和實(shí)際的差別在€之間,我們認(rèn)為不存在誤差,也就是只有在這兩條隔離帶之外的才計(jì)入損傷。那么,我們就得到了svr支持向量回歸。哇,一下好多算法,蒙了。我們來(lái)整理下。
總結(jié):回歸有以下幾種算法,基本的線(xiàn)性回歸、lasso、ridge、彈性網(wǎng)、局部加權(quán)回歸、svr,局部加權(quán)可以用先驗(yàn)知識(shí)。這六種算法。