機(jī)器學(xué)習(xí)算法一覽_第1頁(yè)
機(jī)器學(xué)習(xí)算法一覽_第2頁(yè)
機(jī)器學(xué)習(xí)算法一覽_第3頁(yè)
機(jī)器學(xué)習(xí)算法一覽_第4頁(yè)
機(jī)器學(xué)習(xí)算法一覽_第5頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

機(jī)器學(xué)習(xí)算法一覽(附python和R代碼)2016-04-19大數(shù)據(jù)文摘大數(shù)據(jù)文摘作品,轉(zhuǎn)載需授權(quán)

編譯:@酒酒

校正:寒小陽(yáng)

&&

龍心塵摘自:

大數(shù)據(jù)文摘“機(jī)器學(xué)習(xí)”專欄成立啦!歡迎大家留言提出寶貴意見,歡迎投稿給我們。如何加入我們?文章末尾有說(shuō)明:)

◆“谷歌的無(wú)人車和機(jī)器人得到了很多關(guān)注,但我們真正的未來(lái)卻在于能夠使電腦變得更聰明,更人性化的技術(shù),機(jī)器學(xué)習(xí)?!?/p>

——

埃里克施密特(谷歌首席執(zhí)行官)◆

◆當(dāng)計(jì)算從大型計(jì)算機(jī)轉(zhuǎn)移至個(gè)人電腦再轉(zhuǎn)移到云的今天,我們可能正處于人類歷史上最關(guān)鍵的時(shí)期。之所以關(guān)鍵,并不是因?yàn)橐呀?jīng)取得的成就,而是未來(lái)幾年里我們即將要獲得的進(jìn)步和成就。對(duì)我來(lái)說(shuō),如今最令我激動(dòng)的就是計(jì)算技術(shù)和工具的普及,從而帶來(lái)了計(jì)算的春天。作為一名數(shù)據(jù)科學(xué)家,我可以建造一個(gè)數(shù)據(jù)處理系統(tǒng)來(lái)進(jìn)行復(fù)雜的算法運(yùn)算,這樣每小時(shí)能賺幾美金??墒菍W(xué)習(xí)這些算法卻花了我無(wú)數(shù)個(gè)日日夜夜。

那么誰(shuí)能從這篇文章里收益最多呢?這篇文章有可能是我寫的所有文章里最有價(jià)值的一篇。

寫這篇文章的目的,就是希望它可以讓有志于從事數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)的諸位在學(xué)習(xí)算法的路上少走些路。我會(huì)在文章中舉例一些機(jī)器學(xué)習(xí)的問題,你們也可以在思考解決這些問題的過(guò)程中得到啟發(fā)。我也會(huì)寫下對(duì)于各種機(jī)器學(xué)習(xí)算法的一些個(gè)人理解,并且提供R和Python的執(zhí)行代碼。讀完這篇文章,讀者們至少可以行動(dòng)起來(lái)親手試試寫一個(gè)機(jī)器學(xué)習(xí)的程序。

不過(guò),這篇文章并沒有闡述這些算法背后的統(tǒng)計(jì)學(xué)原理,有時(shí)候從實(shí)踐入手也是很好的學(xué)習(xí)路徑。如果你希望了解的是這些統(tǒng)計(jì)學(xué)原理,那么這篇文章的內(nèi)容可能并不適合你。

一般說(shuō)來(lái),機(jī)器學(xué)習(xí)有三種算法:1.監(jiān)督式學(xué)習(xí)監(jiān)督式學(xué)習(xí)算法包括一個(gè)目標(biāo)變量(因變量)和用來(lái)預(yù)測(cè)目標(biāo)變量的預(yù)測(cè)變量(自變量)。通過(guò)這些變量我們可以搭建一個(gè)模型,從而對(duì)于一個(gè)已知的預(yù)測(cè)變量值,我們可以得到對(duì)應(yīng)的目標(biāo)變量值。重復(fù)訓(xùn)練這個(gè)模型,直到它能在訓(xùn)練數(shù)據(jù)集上達(dá)到預(yù)定的準(zhǔn)確度。

屬于監(jiān)督式學(xué)習(xí)的算法有:回歸模型,決策樹,隨機(jī)森林,K鄰近算法,邏輯回歸等。

2.無(wú)監(jiān)督式學(xué)習(xí)與監(jiān)督式學(xué)習(xí)不同的是,無(wú)監(jiān)督學(xué)習(xí)中我們沒有需要預(yù)測(cè)或估計(jì)的目標(biāo)變量。無(wú)監(jiān)督式學(xué)習(xí)是用來(lái)對(duì)總體對(duì)象進(jìn)行分類的。它在根據(jù)某一指標(biāo)將客戶分類上有廣泛應(yīng)用。

屬于無(wú)監(jiān)督式學(xué)習(xí)的算法有:關(guān)聯(lián)規(guī)則,K-means聚類算法等。

3.強(qiáng)化學(xué)習(xí)這個(gè)算法可以訓(xùn)練程序做出某一決定。程序在某一情況下嘗試所有的可能行動(dòng),記錄不同行動(dòng)的結(jié)果并試著找出最好的一次嘗試來(lái)做決定。

屬于這一類算法的有馬爾可夫決策過(guò)程。

常見的機(jī)器學(xué)習(xí)算法以下是最常用的機(jī)器學(xué)習(xí)算法,大部分?jǐn)?shù)據(jù)問題都可以通過(guò)它們解決:1.線性回歸(LinearRegression)2.邏輯回歸(LogisticRegression)3.決策樹(DecisionTree)4.支持向量機(jī)(SVM)5.樸素貝葉斯(NaiveBayes)6.K鄰近算法(KNN)7.K-均值算法(K-means)8.隨機(jī)森林(RandomForest)9.降低維度算法(DimensionalityReductionAlgorithms)10.GradientBoost和Adaboost算法1.線性回歸(LinearRegression)線性回歸是利用連續(xù)性變量來(lái)估計(jì)實(shí)際數(shù)值(例如房?jī)r(jià),呼叫次數(shù)和總銷售額等)。我們通過(guò)線性回歸算法找出自變量和因變量間的最佳線性關(guān)系,圖形上可以確定一條最佳直線。這條最佳直線就是回歸線。這個(gè)回歸關(guān)系可以用Y=aX+b表示。

我們可以假想一個(gè)場(chǎng)景來(lái)理解線性回歸。比如你讓一個(gè)五年級(jí)的孩子在不問同學(xué)具體體重多少的情況下,把班上的同學(xué)按照體重從輕到重排隊(duì)。這個(gè)孩子會(huì)怎么做呢?他有可能會(huì)通過(guò)觀察大家的身高和體格來(lái)排隊(duì)。這就是線性回歸!這個(gè)孩子其實(shí)是認(rèn)為身高和體格與人的體重有某種相關(guān)。而這個(gè)關(guān)系就像是前一段的Y和X的關(guān)系。

在Y=aX+b這個(gè)公式里:Y-因變量a-斜率X-自變量b-截距

a和b可以通過(guò)最小化因變量誤差的平方和得到(最小二乘法)。

下圖中我們得到的線性回歸方程是y=0.2811X+13.9。通過(guò)這個(gè)方程,我們可以根據(jù)一個(gè)人的身高得到他的體重信息。

線性回歸主要有兩種:一元線性回歸和多元線性回歸。一元線性回歸只有一個(gè)自變量,而多元線性回歸有多個(gè)自變量。擬合多元線性回歸的時(shí)候,可以利用多項(xiàng)式回歸(PolynomialRegression)或曲線回歸(CurvilinearRegression)。Python代碼#ImportLibrary#Importothernecessarylibrarieslikepandas,numpy...fromsklearnimportlinear_model#LoadTrainandTestdatasets#Identifyfeatureandresponsevariable(s)andvaluesmustbenumericandnumpyarraysx_train=input_variables_values_training_datasetsy_train=target_variables_values_training_datasetsx_test=input_variables_values_test_datasets#Createlinearregressionobjectlinear=linear_model.LinearRegression()#Trainthemodelusingthetrainingsetsandcheckscorelinear.fit(x_train,y_train)linear.score(x_train,y_train)#EquationcoefficientandInterceptprint('Coefficient:\n',linear.coef_)print('Intercept:\n',ercept_)#PredictOutputpredicted=linear.predict(x_test)R代碼#LoadTrainandTestdatasets#Identifyfeatureandresponsevariable(s)andvaluesmustbenumericandnumpyarraysx_train<-input_variables_values_training_datasetsy_train<-target_variables_values_training_datasetsx_test<-input_variables_values_test_datasetsx<-cbind(x_train,y_train)#Trainthemodelusingthetrainingsetsandcheckscorelinear<-lm(y_train~.,data=x)summary(linear)#PredictOutputpredicted=predict(linear,x_test)

2.邏輯回歸別被它的名字迷惑了,邏輯回歸其實(shí)是一個(gè)分類算法而不是回歸算法。通常是利用已知的自變量來(lái)預(yù)測(cè)一個(gè)離散型因變量的值(像二進(jìn)制值0/1,是/否,真/假)。簡(jiǎn)單來(lái)說(shuō),它就是通過(guò)擬合一個(gè)邏輯函數(shù)(logitfuction)來(lái)預(yù)測(cè)一個(gè)事件發(fā)生的概率。所以它預(yù)測(cè)的是一個(gè)概率值,自然,它的輸出值應(yīng)該在0到1之間。

同樣,我們可以用一個(gè)例子來(lái)理解這個(gè)算法。

假設(shè)你的一個(gè)朋友讓你回答一道題??赡艿慕Y(jié)果只有兩種:你答對(duì)了或沒有答對(duì)。為了研究你最擅長(zhǎng)的題目領(lǐng)域,你做了各種領(lǐng)域的題目。那么這個(gè)研究的結(jié)果可能是這樣的:如果是一道十年級(jí)的三角函數(shù)題,你有70%的可能性能解出它。但如果是一道五年級(jí)的歷史題,你會(huì)的概率可能只有30%。邏輯回歸就是給你這樣的概率結(jié)果。

回到數(shù)學(xué)上,事件結(jié)果的勝算對(duì)數(shù)(logodds)可以用預(yù)測(cè)變量的線性組合來(lái)描述:odds=p/(1-p)=probabilityofeventoccurrence/probabilityofnoteventoccurrenceln(odds)=ln(p/(1-p))logit(p)=ln(p/(1-p))=b0+b1X1+b2X2+b3X3....+bkXk

在這里,p是我們感興趣的事件出現(xiàn)的概率。它通過(guò)篩選出特定參數(shù)值使得觀察到的樣本值出現(xiàn)的概率最大化,來(lái)估計(jì)參數(shù),而不是像普通回歸那樣最小化誤差的平方和。

你可能會(huì)問為什么需要做對(duì)數(shù)呢?簡(jiǎn)單來(lái)說(shuō)這是重復(fù)階梯函數(shù)的最佳方法。因本篇文章旨不在此,這方面就不做詳細(xì)介紹了。Python代碼#ImportLibraryfromsklearn.linear_modelimportLogisticRegression#Assumedyouhave,X(predictor)andY(target)fortrainingdatasetandx_test(predictor)oftest_dataset#Createlogisticregressionobjectmodel=LogisticRegression()#Trainthemodelusingthetrainingsetsandcheckscoremodel.fit(X,y)model.score(X,y)#EquationcoefficientandInterceptprint('Coefficient:\n',model.coef_)print('Intercept:\n',ercept_)#PredictOutputpredicted=model.predict(x_test)R代碼x<-cbind(x_train,y_train)#Trainthemodelusingthetrainingsetsandcheckscorelogistic<-glm(y_train~.,data=x,family='binomial')summary(logistic)#PredictOutputpredicted=predict(logistic,x_test)

延伸:

以下是一些可以嘗試的優(yōu)化模型的方法:加入交互項(xiàng)(interaction)減少特征變量正則化(regularization)使用非線性模型

3.決策樹這是我最喜歡也是能經(jīng)常使用到的算法。它屬于監(jiān)督式學(xué)習(xí),常用來(lái)解決分類問題。令人驚訝的是,它既可以運(yùn)用于類別變量(categoricalvariables)也可以作用于連續(xù)變量。這個(gè)算法可以讓我們把一個(gè)總體分為兩個(gè)或多個(gè)群組。分組根據(jù)能夠區(qū)分總體的最重要的特征變量/自變量進(jìn)行。更詳細(xì)的內(nèi)容可以閱讀這篇文章DecisionTreeSimplified。

從上圖中我們可以看出,總體人群最終在玩與否的事件上被分成了四個(gè)群組。而分組是依據(jù)一些特征變量實(shí)現(xiàn)的。用來(lái)分組的具體指標(biāo)有很多,比如Gini,informationGain,Chi-square,entropy。

理解決策樹原理的最好的辦法就是玩Jezzball游戲。這是微軟的一款經(jīng)典游戲(見下圖)。這個(gè)游戲的最終任務(wù)是在一個(gè)有移動(dòng)墻壁的房間里,通過(guò)建造墻壁來(lái)盡可能地將房間分成盡量大的,沒有小球的空間。

每一次你用建墻來(lái)分割房間,其實(shí)就是在將一個(gè)總體分成兩部分。決策樹也是用類似方法將總體分成盡量多的不同組別。延伸閱讀:SimplifiedVersionofDecisionTreeAlgorithms

Python代碼#ImportLibrary#Importothernecessarylibrarieslikepandas,numpy...fromsklearnimporttree#Assumedyouhave,X(predictor)andY(target)fortrainingdatasetandx_test(predictor)oftest_dataset#Createtreeobjectmodel=tree.DecisionTreeClassifier(criterion='gini')#forclassification,hereyoucanchangethealgorithmasginiorentropy(informationgain)bydefaultitisgini

#model=tree.DecisionTreeRegressor()forregression#Trainthemodelusingthetrainingsetsandcheckscoremodel.fit(X,y)model.score(X,y)#PredictOutputpredicted=model.predict(x_test)R代碼library(rpart)x<-cbind(x_train,y_train)#growtreefit<-rpart(y_train~.,data=x,method="class")summary(fit)#PredictOutputpredicted=predict(fit,x_test)

4.支持向量機(jī)(SVM)這是一個(gè)分類算法。在這個(gè)算法中我們將每一個(gè)數(shù)據(jù)作為一個(gè)點(diǎn)在一個(gè)n維空間上作圖(n是特征數(shù)),每一個(gè)特征值就代表對(duì)應(yīng)坐標(biāo)值的大小。比如說(shuō)我們有兩個(gè)特征:一個(gè)人的身高和發(fā)長(zhǎng)。我們可以將這兩個(gè)變量在一個(gè)二維空間上作圖,圖上的每個(gè)點(diǎn)都有兩個(gè)坐標(biāo)值(這些坐標(biāo)軸也叫做支持向量)。

現(xiàn)在我們要在圖中找到一條直線能最大程度將不同組的點(diǎn)分開。兩組數(shù)據(jù)中距離這條線最近的點(diǎn)到這條線的距離都應(yīng)該是最遠(yuǎn)的。

在上圖中,黑色的線就是最佳分割線。因?yàn)檫@條線到兩組中距它最近的點(diǎn),點(diǎn)A和B的距離都是最遠(yuǎn)的。任何其他線必然會(huì)使得到其中一個(gè)點(diǎn)的距離比這個(gè)距離近。這樣根據(jù)數(shù)據(jù)點(diǎn)分布在這條線的哪一邊,我們就可以將數(shù)據(jù)歸類。更多閱讀:SimplifiedVersionofSupportVectorMachine

我們可以把這個(gè)算法想成n維空間里的JezzBall游戲,不過(guò)有一些變動(dòng):你可以以任何角度畫分割線/分割面(經(jīng)典游戲中只有垂直和水平方向)?,F(xiàn)在這個(gè)游戲的目的是把不同顏色的小球分到不同空間里。小球是不動(dòng)的。Python代碼#ImportLibraryfromsklearnimportsvm#Assumedyouhave,X(predictor)andY(target)fortrainingdatasetandx_test(predictor)oftest_dataset#CreateSVMclassificationobjectmodel=svm.svc()#thereisvariousoptionassociatedwithit,thisissimpleforclassification.Youcanreferlink,formo#redetail.#Trainthemodelusingthetrainingsetsandcheckscoremodel.fit(X,y)model.score(X,y)#PredictOutputpredicted=model.predict(x_test)R代碼library(e1071)x<-cbind(x_train,y_train)#Fittingmodelfit<-svm(y_train~.,data=x)summary(fit)#PredictOutputpredicted=predict(fit,x_test)

5.樸素貝葉斯這個(gè)算法是建立在貝葉斯理論上的分類方法。它的假設(shè)條件是自變量之間相互獨(dú)立。簡(jiǎn)言之,樸素貝葉斯假定某一特征的出現(xiàn)與其它特征無(wú)關(guān)。比如說(shuō),如果一個(gè)水果它是紅色的,圓狀的,直徑大概7cm左右,我們可能猜測(cè)它為蘋果。即使這些特征之間存在一定關(guān)系,在樸素貝葉斯算法中我們都認(rèn)為紅色,圓狀和直徑在判斷一個(gè)水果是蘋果的可能性上是相互獨(dú)立的。

樸素貝葉斯的模型易于建造,并且在分析大量數(shù)據(jù)問題時(shí)效率很高。雖然模型簡(jiǎn)單,但很多情況下工作得比非常復(fù)雜的分類方法還要好。

貝葉斯理論告訴我們?nèi)绾螐南闰?yàn)概率P(c),P(x)和條件概率P(x|c)中計(jì)算后驗(yàn)概率P(c|x)。算法如下:

P(c|x)是已知特征x而分類為c的后驗(yàn)概率。P(c)是種類c的先驗(yàn)概率。P(x|c)是種類c具有特征x的可能性。P(x)是特征x的先驗(yàn)概率。

例子:

以下這組訓(xùn)練集包括了天氣變量和目標(biāo)變量“是否出去玩”。我們現(xiàn)在需要根據(jù)天氣情況將人們分為兩組:玩或不玩。整個(gè)過(guò)程按照如下步驟進(jìn)行:

步驟1:根據(jù)已知數(shù)據(jù)做頻率表步驟2:計(jì)算各個(gè)情況的概率制作概率表。比如陰天(Overcast)的概率為0.29,此時(shí)玩的概率為0.64.

步驟3:用樸素貝葉斯計(jì)算每種天氣情況下玩和不玩的后驗(yàn)概率。概率大的結(jié)果為預(yù)測(cè)值。

提問:

天氣晴朗的情況下(sunny),人們會(huì)玩。這句陳述是否正確?我們可以用上述方法回答這個(gè)問題。P(Yes|Sunny)=P(Sunny|Yes)*P(Yes)/P(Sunny)。

這里,P(Sunny|Yes)=3/9=0.33,P(Sunny)=5/14=0.36,P(Yes)=9/14=0.64。那么,P(Yes|Sunny)=0.33*0.64/0.36=0.60>0.5,說(shuō)明這個(gè)概率值更大。

當(dāng)有多種類別和多種特征時(shí),預(yù)測(cè)的方法相似。樸素貝葉斯通常用于文本分類和多類別分類問題。Python代碼#ImportLibraryfromsklearn.naive_bayesimportGaussianNB#Assumedyouhave,X(predictor)andY(target)fortrainingdatasetandx_test(predictor)oftest_dataset#CreateSVMclassificationobjectmodel=GaussianNB()#thereisotherdistributionformultinomialclasseslikeBernoulliNaiveBayes,Referlink#Trainthemodelusingthetrainingsetsandcheckscoremodel.fit(X,y)#PredictOutputpredicted=model.predict(x_test)R代碼library(e1071)x<-cbind(x_train,y_train)#Fittingmodelfit<-naiveBayes(y_train~.,data=x)summary(fit)#PredictOutputpredicted=predict(fit,x_test)

6.KNN(K-鄰近算法)這個(gè)算法既可以解決分類問題,也可以用于回歸問題,但工業(yè)上用于分類的情況更多。KNN先記錄所有已知數(shù)據(jù),再利用一個(gè)距離函數(shù),找出已知數(shù)據(jù)中距離未知事件最近的K組數(shù)據(jù),最后按照這K組數(shù)據(jù)里最常見的類別預(yù)測(cè)該事件。

距離函數(shù)可以是歐式距離,曼哈頓距離,閔氏距離(MinkowskiDistance),和漢明距離(HammingDistance)。前三種用于連續(xù)變量,漢明距離用于分類變量。如果K=1,那問題就簡(jiǎn)化為根據(jù)最近的數(shù)據(jù)分類。K值的選取時(shí)常是KNN建模里的關(guān)鍵。

KNN在生活中的運(yùn)用很多。比如,如果你想了解一個(gè)不認(rèn)識(shí)的人,你可能就會(huì)從這個(gè)人的好朋友和圈子中了解他的信息。

在用KNN前你需要考慮到:KNN的計(jì)算成本很高所有特征應(yīng)該標(biāo)準(zhǔn)化數(shù)量級(jí),否則數(shù)量級(jí)大的特征在計(jì)算距離上會(huì)有偏移。在進(jìn)行KNN前預(yù)處理數(shù)據(jù),例如去除異常值,噪音等。Python代碼#ImportLibraryfromsklearn.neighborsimportKNeighborsClassifier#Assumedyouhave,X(predictor)andY(target)fortrainingdatasetandx_test(predictor)oftest_dataset#CreateKNeighborsclassifierobjectmodelKNeighborsClassifier(n_neighbors=6)#defaultvalueforn_neighborsis5#Trainthemodelusingthetrainingsetsandcheckscoremodel.fit(X,y)#PredictOutputpredicted=model.predict(x_test)R代碼library(knn)x<-cbind(x_train,y_train)#Fittingmodelfit<-knn(y_train~.,data=x,k=5)summary(fit)#PredictOutputpredicted=predict(fit,x_test)

7.K均值算法(K-Means)這是一種解決聚類問題的非監(jiān)督式學(xué)習(xí)算法。這個(gè)方法簡(jiǎn)單地利用了一定數(shù)量的集群(假設(shè)K個(gè)集群)對(duì)給定數(shù)據(jù)進(jìn)行分類。同一集群內(nèi)的數(shù)據(jù)點(diǎn)是同類的,不同集群的數(shù)據(jù)點(diǎn)不同類。

還記得你是怎樣從墨水漬中辨認(rèn)形狀的么?K均值算法的過(guò)程類似,你也要通過(guò)觀察集群形狀和分布來(lái)判斷集群數(shù)量!

K均值算法如何劃分集群:從每個(gè)集群中選取K個(gè)數(shù)據(jù)點(diǎn)作為質(zhì)心(centroids)。將每一個(gè)數(shù)據(jù)點(diǎn)與距離自己最近的質(zhì)心劃分在同一集群,即生成K個(gè)新集群。找出新集群的質(zhì)心,這樣就有了新的質(zhì)心。重復(fù)2和3,直到結(jié)果收斂,即不再有新的質(zhì)心出現(xiàn)。

怎樣確定K的值:如果我們?cè)诿總€(gè)集群中計(jì)算集群中所有點(diǎn)到質(zhì)心的距離平方和,再將不同集群的距離平方和相加,我們就得到了這個(gè)集群方案的總平方和。

我們知道,隨著集群數(shù)量的增加,總平方和會(huì)減少。但是如果用總平方和對(duì)K作圖,你會(huì)發(fā)現(xiàn)在某個(gè)K值之前總平方和急速減少,但在這個(gè)K值之后減少的幅度大大降低,這個(gè)值就是最佳的集群數(shù)。Python代碼#ImportLibraryfromsklearn.clusterimportKMeans#Assumedyouhave,X(attributes)fortrainingdatasetandx_test(attributes)oftest_dataset#CreateKNeighborsclassifierobjectmodelk_means=KMeans(n_clusters=3,random_state=0)#Trainthemodelusingthetrainingsetsandcheckscoremodel.fit(X)#PredictOutputpredicted=model.predict(x_test)R代碼library(cluster)fit<-kmeans(X,3)#5clustersolution

8.隨機(jī)森林隨機(jī)森林是對(duì)決策樹集合的特有名稱。隨機(jī)森林里我們有多個(gè)決策樹(所以叫“森林”)。為了給一個(gè)新的觀察值分類,根據(jù)它的特征,每一個(gè)決策樹都會(huì)給出一個(gè)分類。隨機(jī)森林算法選出投票最多的分類作為分類結(jié)果。

怎樣生成決策樹:如果訓(xùn)練集中有N種類別,則有重復(fù)地隨機(jī)選取N個(gè)樣本。這些樣本將組成培養(yǎng)決策樹的訓(xùn)練集。如果有M個(gè)特征變量,那么選取數(shù)m<<M,從而在每個(gè)節(jié)點(diǎn)上隨機(jī)選取m個(gè)特征變量來(lái)分割該節(jié)點(diǎn)。m在整個(gè)森林養(yǎng)成中保持不變。每個(gè)決策樹都最大程度上進(jìn)行分割,沒有剪枝。

比較決策樹和調(diào)節(jié)模型參數(shù)可以獲取更多該算法細(xì)節(jié)。我建議讀者閱讀這些文章:IntroductiontoRandomforest–SimplifiedComparingaCARTmodeltoRandomForest(Part1)ComparingaRandomForesttoaCARTmodel(Part2)TuningtheparametersofyourRandomForestmodelPython代碼#ImportLibraryfromsklearn.ensembleimportRandomForestClassifier#Assumedyouhave,X(predictor)andY(target)fortrainingdatasetandx_test(predictor)oftest_dataset#CreateRandomForestobjectmodel=RandomForestClassifier()#Trainthemodelusingthetrainingsetsandcheckscoremodel.fit(X,y)#PredictOutputpredicted=model.predict(x_test)R代碼library(randomForest)x<-cbind(x_train,y_train)#Fittingmodelfit<-randomForest(Species~.,x,ntree=500)summary(fit)#PredictOutputpredicted=predict(fit,x_test)

9.降維算法(DimensionalityReductionAlgorithms)在過(guò)去的4-5年里,可獲取的數(shù)據(jù)幾乎以指數(shù)形式增長(zhǎng)。公司/政府機(jī)構(gòu)/研究組織不僅有了更多的數(shù)據(jù)來(lái)源,也獲得了更多維度的數(shù)據(jù)信息。

例如:電子商務(wù)公司有了顧客更多的細(xì)節(jié)信息,像個(gè)人信息,網(wǎng)絡(luò)瀏覽歷史,個(gè)人喜惡,購(gòu)買記錄,反饋信息等,他們關(guān)注你的私人特征,比你天天去的超市里的店員更了解你。

作為一名數(shù)據(jù)科學(xué)家,我們手上的數(shù)據(jù)有非常多的特征。雖然這聽起來(lái)有利于建立更強(qiáng)大精準(zhǔn)的模型,但它們有時(shí)候反倒也是建模中的一大難題。怎樣才能從1000或2000個(gè)變量里找到最重要的變量呢?這種情況下降維算法及其他算法,如決策樹,隨機(jī)森林,PCA,因子分析,相關(guān)矩陣,和缺省值比例等,就能幫我們解決難題。

進(jìn)一步的了解可以閱讀BeginnersGuideToLearnDimensionReductionTechniques。

Python代碼更多信息在這里#ImportLibraryfromsklearnimportdecomposition#Assumedyouhavetrainingandtestdatasetastrainandtest#CreatePCAobejectpca=decomposition.PCA(n_components=k)#defaultvalueofk=min(n_sample,n_features)#ForFactoranalysis#fa=decomposition.FactorAnalysis()#ReducedthedimensionoftrainingdatasetusingPCAtrain_reduced=pca.fit_transform(train)#Reducedthedimensionoftestdatasettest_reduced=pca.transform(test)R代碼library(stat

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論