翻譯/編輯/原創(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~