機(jī)器學(xué)習(xí)算法介紹(附上R和Python程序)-第一期

翻譯/編輯/原創(chuàng)Vivian Ouyang

這個(gè)介紹主要是方便剛?cè)胄械臄?shù)據(jù)科學(xué)家。通過(guò)這個(gè)指導(dǎo)疾渴,使你直接解決機(jī)器學(xué)習(xí)的問(wèn)題以及從中獲得經(jīng)驗(yàn)。而且我會(huì)盡量用簡(jiǎn)單易懂的方式來(lái)介紹每一個(gè)算法略就,不會(huì)涉及很多數(shù)學(xué)淤击,而是幫助你從原理上理解每個(gè)算法,每一個(gè)算法都附上R和Python的程序來(lái)幫助你直接去應(yīng)用程序解決問(wèn)題统刮。一般經(jīng)常使用的機(jī)器學(xué)習(xí)算法有以下11種

1.線(xiàn)性回歸Linear Regression

2.邏輯回歸Logistic Regression

3. 決策樹(shù)Decision Tree

4.隨機(jī)森林Random Forest

5.支持向量機(jī)SVM

6.樸素貝葉斯Naive Bayes

7.最近鄰居法KNN

8.K平均算法K-Means

9.神經(jīng)網(wǎng)絡(luò)Neural Networks

10.降維算法Dimensionality Reduction? ? Algorithms

11.梯度提升Gradient Boost & Adaboost

首先第一期介紹線(xiàn)性回歸(1)紊遵。我會(huì)一個(gè)專(zhuān)題一個(gè)專(zhuān)題的進(jìn)行介紹。線(xiàn)性回歸算是所有方法的入門(mén)侥蒙,但是也是應(yīng)用很廣的一個(gè)模型暗膜。比如邏輯回歸本質(zhì)上和線(xiàn)性回歸也有共通的地方。所以把它作為第一個(gè)介紹的項(xiàng)目鞭衩。


線(xiàn)性回歸Linear Regression

線(xiàn)性回歸一般用來(lái)估計(jì)實(shí)際連續(xù)目標(biāo)變量的值(比如房?jī)r(jià)或者銷(xiāo)售額)学搜。在這里我們用最優(yōu)的一條線(xiàn)來(lái)表示自變量(X)和因變量(Y)之間的關(guān)系娃善。這條最優(yōu)的線(xiàn)就是回歸線(xiàn)然后可以用一個(gè)簡(jiǎn)單的函數(shù)表示

?Y=aX+b

X是“獨(dú)立變量”( Independent Variable),也可以叫瑞佩,解釋變量会放,輸入變量,預(yù)測(cè)變量钉凌,它是表原因的咧最。國(guó)內(nèi)一般翻譯為“自變量”。Y是“依賴(lài)變量”(Dependent Variable御雕,從字面上硬翻)矢沿,也可以叫,輸出變量酸纲,響應(yīng)變量捣鲸,或者因變量,它是表結(jié)果的闽坡,是你的目標(biāo)變量栽惶。其中a被稱(chēng)為斜率而b被稱(chēng)為截距。而系數(shù)a和b的值是使每一個(gè)數(shù)據(jù)點(diǎn)與回歸線(xiàn)之間距離的平方的和最小的解疾嗅。下面是用散點(diǎn)圖來(lái)表示回歸線(xiàn)外厂。你可以看到一條黑色的線(xiàn)穿過(guò)了數(shù)據(jù)點(diǎn)

從上面的圖可以看到,這條回歸線(xiàn)穿過(guò)了坐標(biāo)(0,0)代承,(4,8)還有(30,60)汁蝶,我們可以用簡(jiǎn)單的高中數(shù)學(xué)知識(shí)解方程得到系數(shù)a=2,系數(shù)b=0.然后我們的回歸方程可以寫(xiě)成

?Y= 2*X + 0=2X

下面一個(gè)問(wèn)題是我們?cè)趺凑业阶顑?yōu)的回歸線(xiàn)呢论悴,簡(jiǎn)單來(lái)說(shuō)掖棉,最優(yōu)的回歸線(xiàn)就是能用X的值更準(zhǔn)確的得到Y(jié)的值的那條線(xiàn)。如下圖膀估,predicted是用X預(yù)測(cè)的Y幔亥,而actual是指實(shí)際的Y值。換句話(huà)說(shuō),就是用X得到的預(yù)測(cè)Y值和實(shí)際的Y值之間的不同最小的回歸方程察纯,這個(gè)不同稱(chēng)為誤差(error)帕棉。

所謂不同最小,就是指誤差最小捐寥,一般有三種方式來(lái)判斷最小值

I.所有誤差的和(∑error)

II.所有誤差絕對(duì)值的和(∑|error|)

III. 所有誤差的平方的和(∑error^2)笤昨,又被稱(chēng)為平方誤差和(SSE)

使用I這種方法容易讓正值和負(fù)值進(jìn)行一定的抵消祖驱,顯然有時(shí)候其實(shí)有很大的error但是抵消了得到0握恳,顯示沒(méi)有error。所以這種方法一般不會(huì)被采用捺僻。而II和III比較類(lèi)似乡洼,都很好的避免了I的正負(fù)抵消的問(wèn)題崇裁,但是一般來(lái)說(shuō)∑error^2會(huì)大于∑|error|,從而讓預(yù)測(cè)Y值和實(shí)際的Y值的不同更加的顯著和容易被探測(cè)到束昵。所以一般的回歸分析中拔稳,我們的回歸方程中的參數(shù)都是使III最小而求得的值。

介紹完了怎么計(jì)算回歸模型的參數(shù)锹雏,我們?cè)賮?lái)談一下巴比,用什么樣的指標(biāo)去度量線(xiàn)性回歸的表現(xiàn)呢〗缸瘢肯定有人會(huì)說(shuō)可以用SSE來(lái)度量啊轻绞。確實(shí)可以,但是SSE度量線(xiàn)性回歸的表現(xiàn)有一個(gè)問(wèn)題佣耐。下面我們用一個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明政勃,先看下面的兩個(gè)數(shù)據(jù)表格

當(dāng)我減少數(shù)據(jù)集的數(shù)據(jù)點(diǎn)時(shí),我的SSE會(huì)從93.99降到76.19兼砖,所以SSE對(duì)于數(shù)據(jù)集中的數(shù)據(jù)個(gè)數(shù)比較敏感奸远,有時(shí)候并不是你的線(xiàn)性模型好,而是你的數(shù)據(jù)個(gè)數(shù)比較少讽挟。

第二個(gè)可以判斷線(xiàn)性模型好壞的是R平方(R-square)懒叛,R平方是指輸出量Y可以被輸入量X解釋的百分比,公式如下

R-square=1-(∑(Y_預(yù)測(cè)-Y_實(shí)際)^2)/(∑(Y_實(shí)際-Y_均值)^2)

Y_實(shí)際?是實(shí)際的Y數(shù)據(jù)耽梅,Y_預(yù)測(cè)是用X算出來(lái)的Y芍瑞,而Y_均值是Y的均值。R平方的范圍在0到1之間褐墅。0代表這個(gè)回歸模型根本解釋不了Y的變化拆檬,1 表示這個(gè)回歸模型可以充分地解釋Y的方差變化。一般來(lái)說(shuō)R平方越高妥凳,模型應(yīng)該越好竟贯,但是R平方有和SSE類(lèi)似的毛病。它不好的在于逝钥,隨著你輸入變量X增多屑那,它總會(huì)增加,甚至你不斷的加隨機(jī)的輸入變量(變量與Y完全不相干)艘款,它還是會(huì)不斷變大持际。所以有時(shí)候它的增大是假的。

正是因?yàn)檫@個(gè)原因哗咆,我們需要第三個(gè)常用的指標(biāo)來(lái)判斷線(xiàn)性回歸的表現(xiàn)蜘欲。那個(gè)指標(biāo)就是校正R平方(Adjusted R-square)。校正R平方可以理解為晌柬,給進(jìn)入模型的輸入變量一個(gè)懲罰機(jī)制姥份,你加入的輸入變量X越多郭脂,我的懲罰越大。因此校正R平方可以理解為計(jì)算真正和Y有關(guān)的輸入變量X可以解釋的Y的百分比澈歉。它引入了模型的自由度展鸡,自由度從統(tǒng)計(jì)上來(lái)講,是指當(dāng)以樣本的統(tǒng)計(jì)量來(lái)估計(jì)總體的參數(shù)時(shí)埃难,樣本中獨(dú)立或能自由變化的數(shù)據(jù)的個(gè)數(shù)莹弊。在這里為了方便理解,可以認(rèn)為是代表著引入輸入變量X的個(gè)數(shù)涡尘。因此如果加入的輸入變量能解釋的Y的百分比無(wú)法抗衡自由度的增加的話(huà)箱硕,你的校正R平方不會(huì)增加而是會(huì)降低。一般校正R平方用于有多個(gè)X的情況悟衩,就是多元回歸模型剧罩。 下面是計(jì)算公式。

R^2是樣本的R平方值座泳,N是整體樣本量惠昔,p是你輸入的X的個(gè)數(shù)。?

既然說(shuō)到了多元回歸挑势,就來(lái)簡(jiǎn)單介紹一下多元回歸吧镇防。回歸分析一般有兩類(lèi):一類(lèi)是簡(jiǎn)單的回歸分析以及多元回歸分析潮饱。簡(jiǎn)單回歸分析的輸入變量就一個(gè)X来氧,多元回歸分析就是有多個(gè)輸入變量X1,X2,...,Xk香拉。這個(gè)世界就是一個(gè)復(fù)雜的世界啦扬,所以一般來(lái)說(shuō),沒(méi)有任何一個(gè)事情是只有一個(gè)因素來(lái)決定的凫碌,所以一般來(lái)說(shuō)扑毡,當(dāng)我們想預(yù)測(cè)某個(gè)連續(xù)變量的時(shí)候(例如你的血壓或者工資,或者保險(xiǎn)費(fèi))盛险,把多個(gè)因素加在線(xiàn)性回歸里會(huì)比只用單一的因素進(jìn)行預(yù)測(cè)更加準(zhǔn)確瞄摊。

在多元線(xiàn)性回歸里面,最容易碰到的就是輸入變量X1苦掘,X2,...,Xk之間有很強(qiáng)的相關(guān)性换帜,這個(gè)現(xiàn)象一般叫做多重共線(xiàn)性問(wèn)題。這個(gè)是每一個(gè)做線(xiàn)性模型的分析師們需要避免的情況鹤啡,很多人做特征工程惯驼,其中重要的一步就是輸入變量篩選,而這個(gè)篩選很大的原因是為了避免多重共線(xiàn)性的問(wèn)題揉忘。為了避免這樣的問(wèn)題跳座,我們使用一個(gè)叫方差膨脹因子VIF(Variance Inflation Factor)來(lái)測(cè)量多重共線(xiàn)性。如果這個(gè)多元線(xiàn)性模型沒(méi)有共線(xiàn)性的問(wèn)題泣矛,那么所有的輸入變量的VIF基本上應(yīng)該都小于2疲眷。如果有大于的情況,你需要計(jì)算輸入變量之間的相關(guān)性來(lái)進(jìn)行篩選您朽。

當(dāng)然除了多重共線(xiàn)性的問(wèn)題狂丝,多元回歸有時(shí)候還會(huì)遇到異方差,以及Y本身是自相關(guān)的哗总,比如時(shí)間數(shù)據(jù)几颜,感興趣的朋友可以去自行尋找相關(guān)的介紹,我就不詳細(xì)介紹了讯屈,因?yàn)榭赡苌婕昂芏嗬碚摴降翱蕖3艘酝馕覀冞€有多項(xiàng)式回歸分析和曲線(xiàn)回歸分析。下面我就介紹怎么用python和R來(lái)玩轉(zhuǎn)線(xiàn)性回歸涮母。

python的程序

#首先加載需要的包和模塊比如pandas谆趾,numpy等等#

from sklearn import linear_model

#然后加載訓(xùn)練數(shù)據(jù)和預(yù)測(cè)數(shù)據(jù)(檢驗(yàn)數(shù)據(jù))#

#確定輸入變量和輸出變量,其中輸出變量需要是數(shù)值變量#

x_train=input_variables_training_datasets#訓(xùn)練數(shù)據(jù)中的輸入變量#

y_train=target_variables_training_datasets #訓(xùn)練數(shù)據(jù)中的輸出變量#

x_test=input_variables_test_datasets#預(yù)測(cè)數(shù)據(jù)中的輸入變量#

#運(yùn)行回歸分析的函數(shù)

linear = linear_model.LinearRegression()

#用訓(xùn)練數(shù)據(jù)訓(xùn)練這個(gè)回歸模型然后檢查結(jié)果和參數(shù)#

linear.fit(x_train, y_train)

linear.score(x_train, y_train)

#顯示參數(shù)和截距

print('coefficient: \n', linear.coef_)

print('intercept: \n', linear.intercept_)

#用訓(xùn)練的模型來(lái)預(yù)測(cè)模型中的輸出變量Y#

predicted= linear.predict(x_test)


R的程序

#導(dǎo)入訓(xùn)練數(shù)據(jù)集以及預(yù)測(cè)數(shù)據(jù)集

#確定輸入變量和輸出變量叛本,其中輸出變量需要是數(shù)值變量#

x_train <- input_variables_training_datasets#訓(xùn)練數(shù)據(jù)中的輸入變量#

y_train <- target_variables_training_datasets#訓(xùn)練數(shù)據(jù)中的輸出變量#

x_test <- input_variables_test_datasets #預(yù)測(cè)數(shù)據(jù)中的輸入變量#

x <- cbind(x_train,y_train)#生成訓(xùn)練數(shù)據(jù)集#

#用訓(xùn)練數(shù)據(jù)訓(xùn)練這個(gè)回歸模型然后檢查結(jié)果和參數(shù)#

linear <- lm(y_train ~ ., data = x)

#summary()顯示結(jié)果和參數(shù)值#

summary(linear)

#用訓(xùn)練的模型來(lái)預(yù)測(cè)預(yù)測(cè)模型中的輸出變量Y#

predicted= predict(linear,x_test)

下面我將使用美國(guó)AllState保險(xiǎn)公司在Kaggle上的一個(gè)數(shù)據(jù)來(lái)演示一個(gè)多元線(xiàn)性回歸的學(xué)習(xí)案例沪蓬。每一行代表一個(gè)保險(xiǎn)理賠(claims),我們需要用公司提供的這些變量來(lái)預(yù)測(cè)最終損失(loss),其中第一列是id號(hào)来候,這個(gè)數(shù)據(jù)集有連續(xù)變量和非連續(xù)變量跷叉,為了方便理解,我們只選取部分的變量來(lái)做多元回歸营搅,數(shù)據(jù)集我會(huì)附在這一期的最后AllState的壓縮文件中云挟。

下面是運(yùn)行的R程序

setwd("C://Allstate") #設(shè)置你自己的路徑##

full<-read.csv("train.csv")

test<-read.csv("test.csv")

#選取cat2,cat7,cat10,cat11,cat12,cat57,cat72,cat80,cat79,cat81,cat87,cat89,cat101,cont2,cont3,cont7,cont11,cont12作為自變量

feautres<-c("cat2","cat7","cat10","cat11","cat12","cat57","cat72","cat80","cat79","cat81","cat87","cat101","cont2","cont3","cont7","cont11","cont12","loss")

feautres_1<-c("cat2","cat7","cat10","cat11","cat12","cat57","cat72","cat80","cat79","cat81","cat87","cat101","cont2","cont3","cont7","cont11","cont12")

full_feautres<-full[,feautres]

lm.fit <- lm(loss ~ ., data = full_feautres) #運(yùn)行回歸程序#

lm.predict.test<- predict(lm.fit, newdata = test) #預(yù)測(cè)值#

All state的數(shù)據(jù)可以在本文下載,銜接如下

鏈接: https://pan.baidu.com/s/1hrJh4EC 密碼: wsfd

下一期內(nèi)容是邏輯回歸转质。Continued~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末植锉,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子峭拘,更是在濱河造成了極大的恐慌俊庇,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鸡挠,死亡現(xiàn)場(chǎng)離奇詭異辉饱,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)拣展,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)彭沼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人备埃,你說(shuō)我怎么就攤上這事姓惑『峙” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵于毙,是天一觀(guān)的道長(zhǎng)敦冬。 經(jīng)常有香客問(wèn)我,道長(zhǎng)唯沮,這世上最難降的妖魔是什么脖旱? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮介蛉,結(jié)果婚禮上萌庆,老公的妹妹穿的比我還像新娘。我一直安慰自己币旧,他們只是感情好践险,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著吹菱,像睡著了一般捏境。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上毁葱,一...
    開(kāi)封第一講書(shū)人閱讀 52,255評(píng)論 1 308
  • 那天垫言,我揣著相機(jī)與錄音,去河邊找鬼倾剿。 笑死筷频,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的前痘。 我是一名探鬼主播凛捏,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼芹缔!你這毒婦竟也來(lái)了坯癣?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤最欠,失蹤者是張志新(化名)和其女友劉穎示罗,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體芝硬,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蚜点,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了拌阴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绍绘。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出陪拘,到底是詐尸還是另有隱情厂镇,我是刑警寧澤,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布左刽,位于F島的核電站捺信,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏悠反。R本人自食惡果不足惜残黑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一馍佑、第九天 我趴在偏房一處隱蔽的房頂上張望斋否。 院中可真熱鬧,春花似錦拭荤、人聲如沸茵臭。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)旦委。三九已至,卻和暖如春雏亚,著一層夾襖步出監(jiān)牢的瞬間缨硝,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工罢低, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留查辩,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓网持,卻偏偏與公主長(zhǎng)得像宜岛,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子功舀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容