R語言數(shù)據(jù)分析與挖掘-神經(jīng)網(wǎng)絡(luò)與支持向量機(jī)_第1頁
R語言數(shù)據(jù)分析與挖掘-神經(jīng)網(wǎng)絡(luò)與支持向量機(jī)_第2頁
R語言數(shù)據(jù)分析與挖掘-神經(jīng)網(wǎng)絡(luò)與支持向量機(jī)_第3頁
R語言數(shù)據(jù)分析與挖掘-神經(jīng)網(wǎng)絡(luò)與支持向量機(jī)_第4頁
R語言數(shù)據(jù)分析與挖掘-神經(jīng)網(wǎng)絡(luò)與支持向量機(jī)_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

理解神經(jīng)網(wǎng)絡(luò)01102神經(jīng)網(wǎng)絡(luò)的R語言實現(xiàn)010103理解支持向量機(jī)0104支持向量機(jī)的R語言實現(xiàn)理解神經(jīng)網(wǎng)絡(luò)201PAGE3理解神經(jīng)網(wǎng)絡(luò)3人工神經(jīng)網(wǎng)絡(luò)對一組輸入信號和一組輸出信號之間的關(guān)系建模,使用的模型來源于人類大腦對來自感覺輸入的刺激是如何反應(yīng)的理解。就像大腦使用一個稱為神經(jīng)元(neuron)的相互連接的細(xì)胞網(wǎng)絡(luò)來創(chuàng)建一個巨大的并行處理器一樣,人工神經(jīng)網(wǎng)絡(luò)使用人工神經(jīng)元或者節(jié)點(diǎn)(node)的網(wǎng)絡(luò)來解決學(xué)習(xí)問題。從廣義上講,人工神經(jīng)網(wǎng)絡(luò)可應(yīng)用于分類、數(shù)值預(yù)測,甚至是無監(jiān)督的模式識別。人工神經(jīng)網(wǎng)絡(luò)最好應(yīng)用于下列問題:輸入數(shù)據(jù)和輸出數(shù)據(jù)都很好理解或者至少相對簡單,但其涉及輸入到輸出的過程是及其復(fù)雜的。作為一種黑箱方法,對于這些類型的黑箱問題,它們運(yùn)行得很好。雖然有很多種不同的神經(jīng)網(wǎng)絡(luò),但是每一種都可以由下面的特征來定義:

(1)激活函數(shù)(activationfunction):將神經(jīng)元的凈輸入信號轉(zhuǎn)換成單一的輸出信號,以便進(jìn)一步在網(wǎng)路中傳播。

(2)網(wǎng)絡(luò)拓?fù)洌╪etworktopology)(或結(jié)構(gòu)):描述了模型中神經(jīng)元的數(shù)量以及層數(shù)和它們連接的方式。

(3)訓(xùn)練算法(trainingalgorithm):指定如何設(shè)置連接權(quán)重,以便抑制或者增加神經(jīng)元在輸入信號中的比重。PAGE4激活函數(shù)4激活函數(shù)是人工神經(jīng)元處理信息并將信息傳遞到整個網(wǎng)絡(luò)的機(jī)制。激活函數(shù)的主要作用是提供網(wǎng)絡(luò)的非線性建模能力,如不特別說明,激活函數(shù)一般而言是非線性函數(shù)。假設(shè)一個神經(jīng)網(wǎng)絡(luò)中僅包含線性卷積和全連接運(yùn)算,那么該網(wǎng)絡(luò)僅能夠表達(dá)線性映射,即便增加網(wǎng)絡(luò)的深度也依舊還是線性映射,難以有效對實際環(huán)境中非線性分布的數(shù)據(jù)建模。加入(非線性)激活函數(shù)之后,神經(jīng)網(wǎng)絡(luò)才具備了分層的非線性映射學(xué)習(xí)能力。因此,激活函數(shù)是深度神經(jīng)網(wǎng)絡(luò)中不可或缺的部分。常用激活函數(shù)有Identity(恒等函數(shù))、Binarystep(單位跳躍函數(shù))、Sigmoid(“S”形函數(shù))、TanH(雙曲正切函數(shù))、ReLU(整流線性單元函數(shù))等。接下來,我們詳細(xì)了解下Sigmoid、TanH和ReLU激活函數(shù)的基本原理。PAGE5網(wǎng)絡(luò)結(jié)構(gòu)5神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)能力來源于它的拓?fù)浣Y(jié)構(gòu)(topology),或者相互連接的神經(jīng)元的模式與結(jié)構(gòu)。雖然有無數(shù)的網(wǎng)絡(luò)結(jié)構(gòu)形式,但是它們可以通過3個關(guān)鍵特征來區(qū)分:(1)層的數(shù)目。(2)網(wǎng)絡(luò)中的信息是否允許向后傳播。(3)網(wǎng)絡(luò)中每一層內(nèi)的節(jié)點(diǎn)數(shù)。拓?fù)浣Y(jié)構(gòu)決定了可以通過網(wǎng)絡(luò)進(jìn)行學(xué)習(xí)任務(wù)的復(fù)雜性。一般來說,更大、更復(fù)雜的網(wǎng)絡(luò)能夠識別更復(fù)雜的決策邊界。然而,神經(jīng)網(wǎng)絡(luò)的效能不僅是一個網(wǎng)絡(luò)規(guī)模的函數(shù),也取決于其構(gòu)成元素的組織方式。在一個神經(jīng)網(wǎng)絡(luò)中通常會分成這樣幾層:輸入層(inputlayer)、隱藏層(hiddenlayer)和輸出層(outputlayer)。神經(jīng)網(wǎng)絡(luò)的R語言實現(xiàn)602PAGE7神經(jīng)網(wǎng)絡(luò)的R語言實現(xiàn)7目前使用R語言構(gòu)建神經(jīng)網(wǎng)絡(luò)主要包括nnet、neuralnet、AMOTE及RSNNS擴(kuò)展包,這些擴(kuò)展包均可以通過install.packages()命令進(jìn)行在線安裝。其中nnet提供了最常見的前饋反向傳播神經(jīng)網(wǎng)絡(luò)算法;neuralnet提供了彈性反向傳播算法和更多的激活函數(shù)形式;AMOTE則更進(jìn)一步提供了更為豐富的控制參數(shù),并可以增加多個隱藏層。前面三個擴(kuò)展包主要基于BP神經(jīng)網(wǎng)絡(luò),并未涉及到神經(jīng)網(wǎng)絡(luò)中的其他拓?fù)浣Y(jié)構(gòu)和網(wǎng)絡(luò)模型。而RSNNS擴(kuò)展包則提供了更多的神經(jīng)網(wǎng)絡(luò)模型。PAGE8nnet擴(kuò)展包8nnet擴(kuò)展包的nnet()函數(shù)實現(xiàn)了單隱藏層的前饋神經(jīng)網(wǎng)絡(luò)和多項對數(shù)線性模型。nnet()函數(shù)基本表達(dá)形式為:

nnet(x,y,weights,size,Wts,mask,

linout=FALSE,entropy=FALSE,softmax=FALSE,censored=FALSE,skip=FALSE,rang=0.7,decay=0,

maxit=100,Hess=FALSE,trace=TRUE,MaxNWts=1000,

abstol=1.0e-4,reltol=1.0e-8,...)參數(shù)參數(shù)說明size隱藏層中的神經(jīng)元數(shù),設(shè)置為0時,表示沒有隱藏層Wts初始系數(shù),如果不設(shè)定,則使用隨機(jī)數(shù)設(shè)定linout如果等于TRUE,則模型的輸出為連續(xù)實數(shù),一般用于回歸分析(目標(biāo)變量為連續(xù)型);如果等于FALSE(默認(rèn)取值),則模型輸出為邏輯數(shù)據(jù),一般用于分類分析(目標(biāo)變量為離散型)。entropy損失函數(shù)是否采用交叉熵,F(xiàn)ALSE(默認(rèn))表示損失函數(shù)采用誤差平方和的形式rang初始權(quán)值設(shè)置maxit最大迭代次數(shù)iterations,默認(rèn)為100次abstol和reltolskip是否跳過隱藏層,如果為FALSE(默認(rèn)),則不跳過decay加權(quán)系數(shù)的衰減PAGE9neuralnet擴(kuò)展包9neuralnet擴(kuò)展包的neuralnet()函數(shù)可實現(xiàn)傳統(tǒng)B-P網(wǎng)絡(luò)和彈性B-P網(wǎng)絡(luò)建模。函數(shù)基本表達(dá)形式為:neuralnet(formula,data,hidden=1,threshold=0.01,stepmax=1e+05,rep=1,startweights=NULL,learningrate.limit=NULL,learningrate.factor=list(minus=0.5,plus=1.2),learningrate=NULL,lifesign="none",lifesign.step=1000,algorithm="rprop+",err.fct="sse",act.fct="logistic",linear.output=TRUE,exclude=NULL,constant.weights=NULL,likelihood=FALSE)PAGE10AMORE擴(kuò)展包10AMORE擴(kuò)展包是一個更加靈活的包,該包實現(xiàn)了TAO穩(wěn)健神經(jīng)網(wǎng)絡(luò)算法,對一些想自己訓(xùn)練算法的用戶而言更有幫助。常用的函數(shù)包括創(chuàng)建網(wǎng)絡(luò)的newff()函數(shù)和訓(xùn)練網(wǎng)絡(luò)的train()函數(shù)。其中newff()函數(shù)的定義如下:newff(n.neurons,learning.rate.global,momentum.global,error.criterium,Stao,hidden.layer,output.layer,method)train(net,P,T,Pval=NULL,Tval=NULL,error.criterium="LMS",report=TRUE,n.shows,show.step,Stao=NA,prob=NULL,n.threads=0L)PAGE11RSNNS擴(kuò)展包11StuttgartNeuralNetworkSimulator(SNNS)是德國斯圖加特大學(xué)開發(fā)的優(yōu)秀神經(jīng)網(wǎng)絡(luò)仿真軟件,為國外的神經(jīng)網(wǎng)絡(luò)研究者所廣泛采用。其手冊內(nèi)容極為豐富,同時支持友好的Linux平臺。而RSNNS則是連接R語言和SNNS的工具,使用RSNNS的低級接口,SNNS中的所有算法的功能性和靈活性都能夠訪問。不僅如此,該包還包含了一個方便的高級接口,將最通用的神經(jīng)網(wǎng)絡(luò)拓?fù)浜蛯W(xué)習(xí)算法無縫集成到R語言中,包括mlp(多層感知器)、dlvq(動態(tài)學(xué)習(xí)向量化網(wǎng)絡(luò)),rbf(徑向基函數(shù)網(wǎng)絡(luò)),elman(elman神經(jīng)網(wǎng)絡(luò)),jordan(jordan神經(jīng)網(wǎng)絡(luò)),som(自組織映射神經(jīng)網(wǎng)絡(luò)),art1(適應(yīng)性共振神經(jīng)網(wǎng)絡(luò))等等。其中mlp()函數(shù)用于創(chuàng)建一個多層感知器,并且對它進(jìn)行訓(xùn)練,多層感知器是全連接的前饋神經(jīng)網(wǎng)絡(luò),它可能是目前最通用的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。其定義如下:mlp(x,y,size=c(5),maxit=100,initFunc="Randomize_Weights",initFuncParams=c(-0.3,0.3),learnFunc="Std_Backpropagation",learnFuncParams=c(0.2,0),updateFunc="Topological_Order",updateFuncParams=c(0),hiddenActFunc="Act_Logistic",shufflePatterns=TRUE,linOut=FALSE,outputActFunc=if(linOut)"Act_Identity"else"Act_Logistic",inputsTest=NULL,targetsTest=NULL,pruneFunc=NULL,pruneFuncParams=NULL,...)PAGE12基于神經(jīng)網(wǎng)絡(luò)進(jìn)行類別預(yù)測-nnet包12首先利用nnet()函數(shù)對訓(xùn)練集構(gòu)建神經(jīng)網(wǎng)絡(luò)模型,設(shè)置隱藏層的節(jié)點(diǎn)數(shù)為2,初始權(quán)值設(shè)置為0.1,加權(quán)系數(shù)的衰減為5e-4,最大迭代次數(shù)iterations為200。并調(diào)用summary()函數(shù)查看訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)信息。>#訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型>set.seed(1234)>library(nnet)>iris.nnet<-nnet(Species~.,data=train,size=2,+rang=0.1,decay=5e-4,maxit=200)>#調(diào)用summary()函數(shù)查看訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)信息>summary(iris.nnet)a4-2-3networkwith19weightsoptionswere-softmaxmodellingdecay=0.0005b->h1i1->h1i2->h1i3->h1i4->h1-11.28-5.75-1.368.655.24b->h2i1->h2i2->h2i3->h2i4->h2-0.27-0.59-1.872.931.43b->o1h1->o1h2->o15.69-1.98-7.99b->o2h1->o2h2->o2-2.15-10.398.97b->o3h1->o3h2->o3-3.5412.37-0.99>#對生成的神經(jīng)網(wǎng)絡(luò)進(jìn)行可視化>source('nnet_plot_update.r')>plot.nnet(iris.nnet)PAGE13基于神經(jīng)網(wǎng)絡(luò)進(jìn)行類別預(yù)測-neuralnet包13利用neuralnet擴(kuò)展包訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型,如果是進(jìn)行分類預(yù)測,在建模前需將因子型的因變量進(jìn)行啞變量處理,接下來,調(diào)用neuralnet()函數(shù)訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型,在建模過程中,除了指明類標(biāo)號(setosa、versicolor和virginica)以及函數(shù)中訓(xùn)練的自變量,還人為規(guī)定了隱藏層的神經(jīng)元的個數(shù)為3。模型構(gòu)建好后,輸出神經(jīng)網(wǎng)絡(luò)模型的結(jié)果矩陣result.matrix。>#對因子型的因變量進(jìn)行啞變量處理>dmy1<-dummyVars(~.,data=train,levelsOnly=TRUE)>train_dmy<-predict(dmy1,newdata=train)>test_dmy<-predict(dmy1,newdata=test)>#訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型>set.seed(1234)>library(neuralnet)>iris_neuralnet<-neuralnet(setosa+versicolor+virginica~+Sepal.Length+Sepal.Width+Petal.Length+Petal.Width,+data=train_dmy,hidden=3)#構(gòu)建模型>iris_neuralnet$result.matrix#輸出結(jié)果矩陣>plot(iris_neuralnet)#模型可視化PAGE14基于神經(jīng)網(wǎng)絡(luò)進(jìn)行預(yù)測-AMORE包14現(xiàn)基于數(shù)據(jù)集iris,使用AMORE擴(kuò)展包建立變量Sepal.Length、Sepal.Width、Petal.Length對Petal.Width預(yù)測的神經(jīng)網(wǎng)絡(luò)模型。>#回歸問題的神經(jīng)網(wǎng)絡(luò)模型>iris1<-iris[,1:4]>#對前三列進(jìn)行標(biāo)準(zhǔn)化>iris1[,1:3]<-apply(iris[,1:3],2,scale)>#加載AMORE包>library(AMORE)>#建立神經(jīng)網(wǎng)絡(luò)模型,輸入層有3個神經(jīng)元,輸出層有一個神經(jīng)元,這里增加了兩個隱藏層,分別具有10,5個神經(jīng)元。>newNet<-newff(n.neurons=c(3,10,5,1),+learning.rate.global=1e-4,+momentum.global=0.05,+error.criterium="LMS",+Stao=NA,+hidden.layer="sigmoid",+output.layer="purelin",+method="ADAPTgdwm")>#使用train函數(shù),基于訓(xùn)練數(shù)據(jù)對神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練>newNet.train<-train(newNet,iris1[,1:3],iris1[,4],+report=TRUE,show.step=100,n.shows=10)index.show:1LMS0.575364527367564index.show:2LMS0.573311933027616index.show:3LMS0.572403308700812index.show:4LMS0.571398559902228index.show:5LMS0.570292371448967index.show:6LMS0.56906195959584index.show:7LMS0.567680012232185index.show:8LMS0.566114145306589index.show:9LMS0.564325587734614index.show:10LMS0.562267513273799>#基于訓(xùn)練好的模型,對iris1進(jìn)行預(yù)測,并計算均方誤差>pred<-sim(newNet.train$net,iris1[,1:3])>error<-sqrt(sum(pred-iris1$Petal.Width)^2)>error[1]1.634289PAGE15基于神經(jīng)網(wǎng)絡(luò)進(jìn)行類別預(yù)測-RSNNS包15現(xiàn)基于iris數(shù)據(jù)集,使用RSNNS擴(kuò)展包的mlp()函數(shù)建立Sepal.Length、Sepal.Width、Petal.Length、Petal.Width對Species類別預(yù)測的神經(jīng)網(wǎng)絡(luò)模型。>library(RSNNS)>set.seed(12)>#準(zhǔn)備數(shù)據(jù)>#將因變量進(jìn)行啞變量處理>library(caret)>dmy<-dummyVars(~.,data=iris,levelsOnly=TRUE)>iris1<-predict(dmy,newdata=iris)>#將自變量進(jìn)行標(biāo)準(zhǔn)化處理>iris1[,1:4]<-apply(iris[,1:4],2,scale)>#將數(shù)據(jù)進(jìn)行分區(qū)>ind<-createDataPartition(iris$Species,p=0.8,list=FALSE)>train<-iris1[ind,]#訓(xùn)練集>test<-iris1[-ind,]#測試集>#使用mlp()函數(shù),建立具有兩個隱藏層,分別具有神經(jīng)元數(shù)量為8,4的多層感知器網(wǎng)絡(luò)>mlp.nnet<-mlp(train[,1:4],train[,5:7],size=c(8,4),learnFunc="Quickprop",+learnFuncParams=c(0.1,2.0,0.0001,0.1),maxit=100)>#利用上面建立的模型進(jìn)行預(yù)測,得到預(yù)測概率矩陣>pred_prob=predict(mlp.nnet,test[,1:4])>head(pred_prob,3)[,1][,2][,3]10.90341820.090300570.00667131330.90339420.089007060.00670245990.90332280.086098760.006775069>#然后,通過找到概率最大的那一列,得到其他可能的類別>pred_class<-unique(iris[-ind,]$Species)[apply(pred_prob,1,which.max)]>#生成混淆矩陣,觀察預(yù)測精度>table('actual'=iris[-ind,]$Species,+'prediction'=pred_class)predictionactualsetosaversicolorvirginicasetosa1000versicolor091virginica0010理解支持向量機(jī)1603PAGE17理解支持向量機(jī)17支持向量機(jī)(SupportVectorMachine,SVM)是個非常強(qiáng)大并且有多種功能的機(jī)器學(xué)習(xí)模型,能夠做線性或者非線性的分類、回歸、異常值檢測。支持向量機(jī)是機(jī)器學(xué)習(xí)領(lǐng)域中最為流行的模型之一,是任何學(xué)習(xí)機(jī)器學(xué)習(xí)的人必備的工具。支持向量機(jī)特別適合應(yīng)用于復(fù)雜但中小規(guī)模數(shù)據(jù)集的分類問題。其基本原理是將特征空間通過非線性變換的方式映射到一個高維的特征空間,并在這個高維空間中找出最優(yōu)線性分界超平面的一種方法。支持向量機(jī)算法的工作原理就是找到一個最優(yōu)的分界超平面,不僅需要這個分界超平面能夠把兩個類別的數(shù)據(jù)正確地分隔開來,還需要使這兩類數(shù)據(jù)之間的分類間隔(Margin)達(dá)到最大。PAGE18理解支持向量機(jī)18

PAGE19軟邊界、核函數(shù)19支持向量機(jī)還有另外兩個關(guān)鍵名詞:軟邊界、核函數(shù)。(1)軟邊界(SoftMargin):在線性不可分情況下就要考慮軟邊界了。軟邊界可以破例允許個別樣本跑到其他類別地盤去。但要使用參數(shù)來權(quán)衡兩端,一個是要保持最大邊緣的分離,另一個要使這種破例不能太離譜。這種參數(shù)就是對錯誤分類的懲罰程度C。(2)核函數(shù)(KernelFunction):為了解決完美分離的問題,SVM還提出一種思路,就是將原始數(shù)據(jù)映射到高維空間中去,直覺上可以感覺高維空間中的數(shù)據(jù)變的稀疏,有利于“分清敵我”。那么映射的方法就是使用“核函數(shù)”。如果“核函數(shù)”選擇得當(dāng),高維空間中的數(shù)據(jù)就變得容易線性分離了。而且可以證明,總是存在一種核函數(shù)能將數(shù)據(jù)集映射成可分離的高維數(shù)據(jù)。常用的核函數(shù)有如下種類:①Linear:線性支持向量機(jī),效果基本等價于Logistic回歸。但它可以處理變量極多的情況,例如文本挖掘。②polynomial:多項式核函數(shù),適用于圖像處理問題。③Radialbasis,高斯核函數(shù),參數(shù)包括了sigma,其值若設(shè)置過小,會有過度擬合出現(xiàn)。④sigmoid:反曲核函數(shù),多用于神經(jīng)網(wǎng)絡(luò)的激活函數(shù)。支持向量機(jī)的目的是尋找一個超平面來對樣本進(jìn)行分割,分割的原則是邊界最大化,最終轉(zhuǎn)化為一個凸二次規(guī)劃問題來求解。模型包括:(1)當(dāng)訓(xùn)練樣本線性可分時,通過硬邊界(HardMargin)最大化,學(xué)習(xí)一個線性可分支持向量機(jī)。(2)當(dāng)訓(xùn)練樣本近似線性可分時,通過軟邊界(SoftMargin)最大化,學(xué)習(xí)一個線性支持向量機(jī)。(3)當(dāng)訓(xùn)練樣本線性不可分時,通過核技巧和軟邊界最大化,學(xué)習(xí)一個非線性支持向量機(jī)。支持向量機(jī)的R語言實現(xiàn)2004PAGE21支持向量機(jī)的R語言實現(xiàn)

21libsvm和SVMlight都是非常流行的支持向量機(jī)算法。在R語言中,來自維也納理工大學(xué)統(tǒng)計系的e1071擴(kuò)展包提供了libsvm的R語言接口;來自多特蒙德工業(yè)大學(xué)統(tǒng)計系的klaR擴(kuò)展包提供了SVMlight的一個接口。e1071包R語言的e1071擴(kuò)展包提供了libsvm的接口。使用e1071擴(kuò)展包中svm()函數(shù)可以得到與libsvm相同的結(jié)果。write.svm()函數(shù)更是可以把訓(xùn)練得到的結(jié)果保存為標(biāo)準(zhǔn)的Libsvm格式,以供其他環(huán)境下libsvm的使用。kernlab包kernlab是R語言中實現(xiàn)基于核技巧機(jī)器學(xué)習(xí)的擴(kuò)展包,可以通過install.packages(“kernlab”)命令進(jìn)行在線安裝。kernlab的算法群可以解決機(jī)器學(xué)習(xí)中分類、回歸、奇異值檢測、分位數(shù)回歸、降維等諸多任務(wù)。kernlab擴(kuò)展包還包括支持向量機(jī),譜聚類、和主成分分析(KPCA)和高斯過程等算法。PAGE22基于支持向量機(jī)進(jìn)行類別預(yù)測-線性可分22選取鳶尾花數(shù)據(jù)集iris中的變量Species因子水平為setosa或versicolor的樣本,將利用e1071擴(kuò)展包中的svm()函數(shù)建立自變量為Sepal.Width、Petal.Length對因變量Species的分類模型。>#構(gòu)建數(shù)據(jù)子集>X<-iris[iris$Species!='virginica',2:3]#自變量:Sepal.Width,Petal.Length>y<-iris[iris$Species!='virginica','Species']#因變量>#構(gòu)建支持向量機(jī)分類器>library(e1071)>svm.model<-svm(x=X,y=y,kernel='linear',degree=1,scale=FALSE)>summary(svm.model)Call:svm.default(x=X,y=y,scale=FALSE,kernel="linear",degree=1)Parameters:SVM-Type:C-classificationSVM-Kernel:linearcost:1NumberofSupportVectors:3(21)NumberofClasses:2Levels:setosaversicolorvirginica>svm.model$index#查看支持向量的序號[1]254299>svm.model$nSV#查看各類的支持向量個數(shù)[1]21>svm.model$SV#查看支持向量的自變量值

Sepal.WidthPetal.Length253.41.9422.31.3992.53.0PAGE23基于支持向量機(jī)進(jìn)行類別預(yù)測-繪制決策邊界23以下代碼構(gòu)建自定義函數(shù)plot_svc_decision_boundary(),用于繪制SVM分類器的判別邊界實線、支持向量及最大間隔分類。>#繪制SVM分類器的判別邊界實線、支持向量及最大間隔分類>plot_svc_decision_boundary<-function(svm.model,X){+w=t(svm.model$coefs)%*%svm.model$SV+b=-svm.model$rho+margin=1/w[2]+abline(a=-b/w[1,2],b=-w[1,1]/w[1,2],col="red",lwd=2.5)+points(X[svm.model$index,],col="blue",cex=2.5,lwd=2)+abline(a=-b/w[1,2]+margin,b=-w[1,1]/w[1,2],col="grey",lwd=2,lty=2)+abline(a=-b/w[1,2]-margin,b=-w[1,1]/w[1,2],col="grey",lwd=2,lty=2)+}>plot(X,col=y,pch=as.numeric(y)+15,cex=1.5)#繪制散點(diǎn)圖>plot_svc_decision_boundary(svm.model,X)#增加決策邊界和標(biāo)注支持向量PAGE24基于支持向量機(jī)進(jìn)行類別預(yù)測-軟間隔24支持向量機(jī)能夠通過最大化邊界得到一個優(yōu)化的超平面以完成對訓(xùn)練數(shù)據(jù)的分離,不過有時算法也允許被錯分類樣本的存在,懲罰因子能實現(xiàn)SVM對分類誤差及分離邊界的控制。如果懲罰因子比較小,分類間隔會比較大(軟間隔),將產(chǎn)生比較多的被錯分樣本;相反當(dāng)加大懲罰因子時,會縮小分類間隔(硬間隔),從而減少錯分樣本。svm()函數(shù)中可以通過參數(shù)cost來控制分類間隔的大小。下面代碼對比cost值為1和100的分類間隔。>X=iris[iris$Species!='virginica',1:2]#"Sepal.Length""Sepal.Width">y=iris[iris$Species!='virginica','Species']>svm_samllC<-svm(x=X,y=y,cost=1,+kernel="linear",scale=FALSE)>svm_largeC<-svm(x=X,y=y,cost=100,+kernel="linear",scale=FALSE)>par(mfrow=c(1,2))>plot(X,col=y,pch=as.numeric(y)+15,main='smallcost')>plot_svc_decision_boundary(svm_samllC,X)>plot(X,col=y,pch=as.numeric(y)+15,main='largecost')>plot_svc_decision_boundary(svm_largeC,X)>par(mfrow=c(1,1))PAGE25基于支持向量機(jī)進(jìn)行類別預(yù)測-線性不可分25雖然在許多情況下,線性SVM分類器是有效的,但有很多數(shù)據(jù)集并不是線性可分。一種處理非線性數(shù)據(jù)集方法是增加更多的特征,例如多項式特征,在某些情況下可以變成線性可分的數(shù)據(jù)。svm()函數(shù)中可通過參數(shù)kernel將核函數(shù)取值為“polynomial”實現(xiàn)。讓我們在衛(wèi)星數(shù)據(jù)集(moonsdatasets)測試一下效果。>moons<-read.csv('../data/moons.csv')>#編寫繪制決策邊界函數(shù)>visualize_classifier<-function(model,X,y,xlim,ylim,title){+x1s<-seq(xlim[1],xlim[2],length.out=200)+x2s<-seq(ylim[1],ylim[2],length.out=200)+Z<-expand.grid(x1s,x2s)+colnames(Z)<-colnames(X)+y_pred<-predict(model,Z,type='class')+y_pred<-matrix(y_pred,length(x1s))++filled.contour(x1s,x2s,y_pred,+nlevels=2,+col=RColorBrewer::brewer.pal(length(unique(y)),'Pastel1'),+key.axes=FALSE,+plot.axes={axis(1);axis(2);+points(X[,1],X[,2],pch=as.numeric(y)+16,col=as.numeric(y)+2,cex=1.5)+},+xlab=colnames(X)[1],ylab=colnames(X)[2]+)+title(main=title)+}>xlim<-c(-1.5,2.5)>ylim<-c(

溫馨提示

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

評論

0/150

提交評論