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

下載本文檔

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

文檔簡介

第6章神經(jīng)網(wǎng)絡(luò)與支持向量機(jī)Part/

01支持向量機(jī)

支持向量機(jī)(SupportVectorMachine,SVM)是一種支持線性分類和非線性分類的二元分類算法。經(jīng)過演進(jìn),現(xiàn)在也支持多元分類,被廣泛地應(yīng)用在回歸以及分類當(dāng)中。支持向量機(jī)支持向量機(jī)支持向量機(jī)可以簡單地描述為對樣本數(shù)據(jù)進(jìn)行分類,真正對決策函數(shù)進(jìn)行求解。首先,要找到分類問題中的最大分類間隔,然后確定最優(yōu)分類超平面,并將分類問題轉(zhuǎn)化為二次規(guī)劃問題進(jìn)行求解。線性可分支持向量機(jī)支持向量機(jī)支持向量機(jī)線性可分:如果在特征空間中存在一個(gè)超平面能夠?qū)⑻卣骺臻g中的實(shí)例分為兩類,使得超平面的任意一側(cè)的實(shí)例全部擁有同一種標(biāo)簽。若找不到這樣的平面,則稱為線性不可分。在線性可分的情況下,在超平面兩側(cè)所有樣本點(diǎn)中,存在某點(diǎn)離該平面最近,則把這個(gè)最近的距離稱為間隔。支持向量機(jī)(SupportVectorMachine,SVM)是一種有監(jiān)督的學(xué)習(xí)方法,可以用于與分類和回歸相關(guān)的數(shù)據(jù)分析任務(wù)。給定一組訓(xùn)練樣本,每一個(gè)樣本都帶有各自的類別標(biāo)簽,支持向量機(jī)的訓(xùn)練目標(biāo)就是構(gòu)建一個(gè)分類模型,將空間中的不同類別的點(diǎn)用盡可能寬的間隔分開。支持向量機(jī)線性可分支持向量機(jī)核函數(shù)支持向量機(jī)用到了線性可分的假設(shè)。對于線性不可分的情形,可以借助核函數(shù)把低維空間中的點(diǎn)映射到高維空間,期望在低維空間中線性不可分的點(diǎn)在高維空間變得線性可分。選擇核函數(shù)是為了可以完成樣本點(diǎn)從低維空間到高維空間的變換。但是,在獲得線性可分性能時(shí),用戶也不希望因此引入過高的計(jì)算開銷。支持向量機(jī)中設(shè)計(jì)核函數(shù)時(shí)只要求它的內(nèi)積形式可以用原空間中點(diǎn)的簡單函數(shù)來計(jì)算。因此,高維空間中的超平面可定義為與空間中某個(gè)向量的點(diǎn)積為常數(shù)的點(diǎn)的集合。支持向量機(jī)e1071包中的svm()函數(shù)函數(shù)svm()返回的是一個(gè)SVM類中的對象,可以使用svm_model$labels查看。下面列出了對象中的部分屬性:

(1)SV:發(fā)現(xiàn)的支持向量矩陣;(2)labels:分類模式下對應(yīng)的標(biāo)簽;(3)index:輸入向量中的支持向量索引。svm()函數(shù)的主要核函數(shù)包括:支持向量機(jī)支持向量機(jī)舉例library

("e1071")attach

(iris)x

<-

subset

(iris,

select=-Species)

y

<-

Speciessvm_model

<-

svm

(Species

~

.,

data=iris)

#品種是其他屬性的因變量subset()函數(shù)從iris中取出子集,第一個(gè)參數(shù)表示數(shù)據(jù)集,select是一個(gè)邏輯向量。svm_model默認(rèn)調(diào)用的是最常用核函數(shù)之一的徑向核radial。支持向量機(jī)分類效果>

pred

<-

predict

(svm_model,

x)

>

table

(pred,

y)

ypred

setosa

versicolor

virginica

setosa

50

0

0

versicolor

0

48

2

virginica

0

2

48

從分類效果可以看出,在versicolor和virginica中,各有兩個(gè)樣本被混淆。支持向量機(jī)取得的分類效果現(xiàn)在比決策樹更好。支持向量機(jī)數(shù)據(jù)預(yù)處理plot

(svm_model,

iris,

Petal.Width

~

Petal.Length,

#因?yàn)閕ris數(shù)據(jù)包括四個(gè)屬性,在二維圖形中需要指定其余二維,才能顯示區(qū)域邊界

slice

=

list

(Sepal.Width

=

2,

Sepal.Length

=

4))從圖中可以觀察到支持向量(用×表示)的分布情況。因?yàn)榘迅呔S數(shù)據(jù)畫在了二維平面上,而且間隔的選取對其他兩個(gè)沒有顯示的維度的特定值設(shè)置的,所以圖中的支持向量并不一定落在邊界附近。支持向量機(jī)參數(shù)優(yōu)化>

svm_model_after_tune

<-

svm

(Species

~

.,

data=iris,

kernel="radial",

cost=2,

gamma=0.8)>

summary

(svm_model_after_tune)>

pred

<-

predict

(svm_model_after_tune,x)

>

table

(pred,

y)

y

pred

setosa

versicolor

virginica

setosa

50

0

0

versicolor

0

49

0

virginica

0

1

50支持向量機(jī)對參數(shù)敏感。以radial核函數(shù)、損失系數(shù)2(表明了分類器對錯(cuò)誤分類的容忍度。)以及核函數(shù)參數(shù)0.8訓(xùn)練出一個(gè)新的分類器。從混淆矩陣可以看出結(jié)果的改善。支持向量機(jī)Part/

02神經(jīng)網(wǎng)絡(luò)基本原理人工神經(jīng)網(wǎng)絡(luò)是在生物學(xué)中神經(jīng)網(wǎng)絡(luò)的啟發(fā)下誕生了的。在生命科學(xué)中,神經(jīng)網(wǎng)絡(luò)是指動(dòng)物大腦中一系列相互連接的神經(jīng)元。信號通過神經(jīng)元的軸突經(jīng)過突觸傳遞到其他神經(jīng)元的樹突上,這就是神經(jīng)元之間的接口。當(dāng)外界總的信號輸入超過了一定的閾值,神經(jīng)元?jiǎng)t會(huì)沿著軸突傳遞信號。神經(jīng)元就可以通過接口相互影響,共同發(fā)揮作用。神經(jīng)網(wǎng)絡(luò)原理神經(jīng)元神經(jīng)元是人工神經(jīng)網(wǎng)絡(luò)中的基本組成單位,在結(jié)構(gòu)上受到了神經(jīng)生物學(xué)中動(dòng)物大腦神經(jīng)元的啟示。單個(gè)神經(jīng)元的功能非常簡單,只是把輸入信號加權(quán)求和,再把結(jié)果傳遞給一個(gè)激活函數(shù)。一般地,激活函數(shù)會(huì)選擇性地抑制住一部分神經(jīng)元。典型的激活函數(shù)通常是非線性的。多個(gè)神經(jīng)元相互連接就組成了一個(gè)神經(jīng)網(wǎng)絡(luò)。通過選擇神經(jīng)元的數(shù)量、結(jié)合方式,以及激活函數(shù)的形式,用戶可以構(gòu)造不同結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò)。神經(jīng)網(wǎng)絡(luò)原理ReLU函數(shù)x

<-

seq

(-1,1,0.1)

#設(shè)置xrelu

<-

function

(x)

ifelse

(x

>

0,

x,

0)

#定義ReLU函數(shù)plot

(x,

relu(x),

type

=

"l")

#畫出函數(shù)text

(0.6,

0.4,

"ReLU

(x)")

#添加文字說明神經(jīng)網(wǎng)絡(luò)原理多層感知器模型多層感知器一般由至少三層神經(jīng)元組成,除了輸入層與輸出層之外,還至少包括一個(gè)被稱為隱層的中間層。一般在多層感知器中使用全連接模式,也就是相鄰層中的神經(jīng)元節(jié)點(diǎn)互相連接。在相鄰層的兩個(gè)神經(jīng)元ni和nj之間傳輸信號時(shí),使用權(quán)重wij來定量表示這種連接關(guān)系。因?yàn)闄?quán)重wij的大小是可以調(diào)節(jié)的,如果使用非線性激活函數(shù),多層感知器可以逼近一些極其復(fù)雜的多變量函數(shù)。輸入層隱層輸出層神經(jīng)網(wǎng)絡(luò)原理反向傳播算法前向傳播:在神經(jīng)網(wǎng)絡(luò)中,信號從輸入層到輸出層逐層傳播。如果連接每一層的權(quán)重都是已知的,根據(jù)輸入信號就可以計(jì)算出輸出信號。當(dāng)權(quán)重未知時(shí),需要根據(jù)輸入和輸出來估計(jì)權(quán)重,使得神經(jīng)網(wǎng)絡(luò)能刻畫出輸入和輸出之間的映射。反饋機(jī)制:猜測一組權(quán)重作為初始值,前向傳播信號計(jì)算出理論輸出,再根據(jù)理論值與實(shí)際值的偏差,來修正權(quán)重。神經(jīng)網(wǎng)絡(luò)原理偏差估計(jì)反向傳播:偏差信號從輸出層到輸入層逐層反向傳遞。把第i層的第j個(gè)神經(jīng)元的偏差記作。使用梯度下降法更新對權(quán)重參數(shù)的估計(jì)。因?yàn)橹挥休敵鰧拥钠梢灾苯佑?jì)算出來,在其他層中需要先得到估計(jì)偏差,才能用于修訂參數(shù)。把下一層的偏差傳遞給上一層,用于偏差估計(jì)簡化:神經(jīng)網(wǎng)絡(luò)原理梯度估計(jì)使用梯度下降的方法來求權(quán)重,需要首先得出梯度方向,也就是偏差對權(quán)重的偏導(dǎo)。把第i層的第j個(gè)神經(jīng)元的偏差記作。

,。鏈?zhǔn)角髮?dǎo):選擇步長,神經(jīng)網(wǎng)絡(luò)原理算法說明學(xué)習(xí)因子η對于算法的性能非常重要。因?yàn)樯窠?jīng)網(wǎng)絡(luò)中的優(yōu)化目標(biāo)函數(shù)不一定為凸,梯度下降法只能保證收斂到局部最優(yōu),不能保證全局最優(yōu)。對于一般的應(yīng)用而言,局部最優(yōu)實(shí)際上已經(jīng)能夠具有實(shí)用性。神經(jīng)網(wǎng)絡(luò)原理R語言中的神經(jīng)網(wǎng)絡(luò)包包

名說

明nnet支持單隱層的前饋神經(jīng)網(wǎng)絡(luò),可用于多項(xiàng)式對數(shù)線性模型neuralnet使用反向傳播算法訓(xùn)練神經(jīng)網(wǎng)絡(luò)h2o包含支持H2O的R腳本功能RSNNS斯圖加特神經(jīng)網(wǎng)絡(luò)模擬器的接口

tensorflowTensorFlow的接口deepnetR語言深度學(xué)習(xí)包darch支持深度架構(gòu)和受限玻爾茲曼機(jī)的R語言包rnn實(shí)現(xiàn)循環(huán)神經(jīng)網(wǎng)絡(luò)的包MXNetR支持靈活高效GPU計(jì)算和深度學(xué)習(xí)的R語言包kerasKeras的R語言接口神經(jīng)網(wǎng)絡(luò)原理neuralnet包R語言中的neuralnet包支持神經(jīng)網(wǎng)絡(luò)的基本操作。安裝與下載:install.packages

("neuralnet")library

("neuralnet")主要的神經(jīng)網(wǎng)絡(luò)建模函數(shù)為: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)

稱說

明formula對需要擬合的模型形式的符號性描述data包含formula中所指定變量的數(shù)據(jù)框hidden一個(gè)整型數(shù)向量,表示每一個(gè)隱層中神經(jīng)元的個(gè)數(shù)threshold數(shù)值型停止條件,誤差函數(shù)偏導(dǎo)數(shù)的閾值stepmax訓(xùn)練神經(jīng)網(wǎng)絡(luò)的最大步長,如果到達(dá)了這個(gè)最大值,則停止訓(xùn)練rep神經(jīng)網(wǎng)絡(luò)訓(xùn)練的最大迭代次數(shù)startweights包含權(quán)重初始值的向量algorithm包含用于神經(jīng)網(wǎng)絡(luò)計(jì)算的算法名稱的字符串,可選:backprop、rprop+、rprop–、sag或slr。backprop指反向傳播算法act.fct代表可微的激活函數(shù)名稱的字符串,logistic和tanh分別表示Logistic函數(shù)和雙曲正切函數(shù)err.fct字符串,表示用于計(jì)算誤差的可微函數(shù),可選sse和ce,分別代表誤差的平方和,以及交叉熵神經(jīng)網(wǎng)絡(luò)實(shí)踐函數(shù)返回神經(jīng)網(wǎng)絡(luò)對象函數(shù)的返回值是一個(gè)nn類的對象,其屬性如右表所示。

稱說

明call與調(diào)用函數(shù)形式相匹配err.fct實(shí)際使用的誤差函數(shù)act.fct實(shí)際使用的激活函數(shù)datadata參數(shù)net.result包含神經(jīng)網(wǎng)絡(luò)每一次迭代的結(jié)果列表weights包含神經(jīng)網(wǎng)絡(luò)每一次迭代所擬合權(quán)重的向量神經(jīng)網(wǎng)絡(luò)實(shí)踐神經(jīng)網(wǎng)絡(luò)實(shí)踐應(yīng)用:非線性回歸#生成1~100之間的50個(gè)均勻分布的隨機(jī)數(shù)作為訓(xùn)練輸入traininginput

<-

as.data.frame

(runif

(50,

min=1,

max=100))trainingoutput

<-

log

(traininginput)

#按列綁定輸入輸出構(gòu)成訓(xùn)練集trainingdata

<-

cbind

(traininginput,trainingoutput)#設(shè)定訓(xùn)練數(shù)據(jù)的屬性名colnames

(trainingdata)

<-

c

("Input","Output")先看一個(gè)使用神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)簡單非線性函數(shù)擬合的例子。首先,用均勻概率分布生成一些整數(shù),并對它們求對數(shù)值。然后,再用神經(jīng)網(wǎng)絡(luò)做出擬合與預(yù)測。神經(jīng)網(wǎng)絡(luò)實(shí)踐設(shè)計(jì)網(wǎng)絡(luò)結(jié)構(gòu)#網(wǎng)絡(luò)包含輸入層+隱層+輸出層,隱層帶有10個(gè)神經(jīng)元#指定損失函數(shù)閾值threshold=0.01net.log

<-

neuralnet

(Output~Input,

trainingdata,

hidden=10,

threshold=0.01)print

(net.log)多層感知器,由輸入層、輸出層,以及一個(gè)隱層構(gòu)成。隱層的節(jié)點(diǎn)數(shù)量設(shè)為10。函數(shù)中并沒有指定激活函數(shù),使用的是默認(rèn)形式Sigmoid。可以使用net.log$act.fct來查看函數(shù)形式。神經(jīng)網(wǎng)絡(luò)實(shí)踐泛型函數(shù)plot調(diào)用plot

(net.log)可以畫出網(wǎng)絡(luò)結(jié)構(gòu)。雖然形式簡陋,圖中標(biāo)出了訓(xùn)練后學(xué)習(xí)到的參數(shù)。神經(jīng)網(wǎng)絡(luò)實(shí)踐測試神經(jīng)網(wǎng)絡(luò)#生成測試數(shù)據(jù)檢驗(yàn)神經(jīng)網(wǎng)絡(luò)的預(yù)測性能testdata

<-

as.data.frame

((1:10)^2)#輸入測試數(shù)據(jù),讓訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)完成運(yùn)算net.results<-compute(net.log,testdata)

#用更好的形式顯示結(jié)果,分別列出測試輸入、實(shí)際值、預(yù)測值niceoutput

<-

cbind

(testdata,

log(testdata),

as.data.frame

(net.results$net.result))colnames(niceoutput)

<-

c

("Input","Expected

Output","Neural

Net

Output")生成一組數(shù)據(jù)用于檢驗(yàn)神經(jīng)網(wǎng)絡(luò)的效果。打印niceoutput,比較實(shí)際值與預(yù)測值,看一看偏差是否可以接受。神經(jīng)網(wǎng)絡(luò)實(shí)踐應(yīng)用:分類class.ind

<-

function(cl)

#輸入cl是一個(gè)表示分類結(jié)果的向量

{

n

<-

length

(cl)

cl

<-

as.factor

(cl)

#把cl轉(zhuǎn)換為因子型

x

<-

matrix

(0,

n,

length(levels(cl)))#生成值為0的初始矩陣

x[(1:n)

+

n*(unclass(cl)-1)]

<-

1

#匹配樣本及類別

dimnames(x)

<-

list(names(cl),

levels(cl))

#設(shè)置每一列的名稱

x

#返回處理好的矩陣

}在神經(jīng)元中使用的都是數(shù)值型變量。首先需要把分類結(jié)果表示成數(shù)值作為訓(xùn)練集的期望輸出。編寫函數(shù),把輸入的類別向量轉(zhuǎn)換成值為0或1的矩陣,如果元素值為1則表示那一行樣本對應(yīng)的類別為元素所在的列。神經(jīng)網(wǎng)絡(luò)實(shí)踐輸入數(shù)據(jù)的規(guī)范化處理normalize

<-

function(x)

#設(shè)計(jì)規(guī)范化函數(shù)normalize(){

num

<-

x

-

min(x)

denom

<-

max(x)

-

min(x)

return

(num/denom)}#規(guī)范化數(shù)據(jù)集iris_norm

<-

as.data.frame(lapply(iris[1:4],

normalize))不同的變量可能有不同的取值范圍,這些取值范圍之間存在非常大的差異。在對數(shù)據(jù)進(jìn)行預(yù)處理時(shí),編寫的函數(shù)normalize()完成數(shù)據(jù)規(guī)范化工作。把數(shù)據(jù)統(tǒng)一為0~1之間的實(shí)數(shù)值。神經(jīng)網(wǎng)絡(luò)實(shí)踐劃分訓(xùn)練集與測試集set.seed

(1)index

<-

sample(nrow(iris),

nrow(iris)*0.7)iristrain

<-

iris_norm[index,]iristest

<-

iris_norm[-index,]#把測試集的分類結(jié)果用作class.ind

()的輸入iristrain.label

<-

iris

[index,5]iristest.label

<-

iris

[-index,5]target

<-

class.ind

(iristrain.label)iris.train

<-

cbind

(iristrain,

target)按照70%對30%的比例把數(shù)據(jù)集分為訓(xùn)練集與測試集兩個(gè)部分

溫馨提示

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

最新文檔

評論

0/150

提交評論