用R實現神經網路

2021-09-12 08:37:35 字數 3877 閱讀 2488

神經網路是一種運算模型,由大量的節點(或神經元)和之間的相互連線構成,每個節點代表一種特定的輸出函式。

每兩個節點間的連線都代表乙個對於通過該連線訊號的加權值,稱為權重,這相當於神經網路的記憶。

神經網路分為倆類:分類和回歸

注意點1難解釋2會學習過度,需要恰當的使用嚴格衡量神經網路的方法,如測試集和交叉驗證。3,費時間

nnet軟體包用來建立單隱藏層的前饋人工神經網路模型,同時也能建立多項對數線性模型。

class.ind()函式用來對資料進行預處理

class.ind(cl)

cl是需要進行預處理的結果變數

nnet()函式是建立單隱藏層測前饋人人工神經網路模型,也可以建立無隱藏層的

nnet(formula, data, weights, ...,

subset, na.action, contrasts = null)

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

linout = false, entropy = false, softmax = false,

******ed = false, skip = false, rang = 0.7, decay = 0,

maxit = 100, hess = false, trace = true, maxnwts = 1000,

abstol = 1.0e-4, reltol = 1.0e-8, ...)

第一類格式中,formula代表的是函式模型的形式

data代表的是在模型中包含有變數的一組可選格式資料

weights代表的是各類樣本在模型中所佔的權重,該引數的預設值為1,即各類樣本按原始比例建立模型

subset主要用於抽取樣本資料中的部分樣本為訓練集

第二類格式中,x為乙個矩陣或格式化資料集

y是類別變數,是乙個矩陣,class.ind處理後生成的類指標矩陣

size代表的是隱藏層的節點個數,引數值為0時為無隱藏層的模型

rang初始隨機權重的範圍[-rang,rang],通常情況下,

decay是指模型建立過程中模型權重的衰減精度,即模型的衰減值小於該引數時,不再迭代。預設值為0

maxit控制的是模型的最大迭代次數

nnet的輸出結果

wts,包含了在模型迭代過程中所尋找到的最優權重值,也可以理解為模型的最優係數。

residuals,包含了訓練集的殘差值。

convergence表示在建立的迭代過程中,迭代次數是否達到最大迭代數,1表示最大,0表示沒有達到。

nnethess()函式模型中的黑塞矩陣(即二次導數矩陣)

nnethess(net, x, y, weights)

net即模型,x和y分別是自變數和相應變數。weights同nnet()中一樣

library(nnet)

wine=read.table("c:\\users\\administrator\\desktop\\資料分析\\winequality-white.txt",header=t,sep=";",na.strings="null")

cha=0#使用隨機森林中已標定品質的白酒資料

for(i in 1:4898)

wine[,12]=factor(cha)

scale01=function(x)

}new

}set.seed(71)

samp=sample(1:4898,3000)

wine[samp,1:11]=scale01(wine[samp,])#對樣本進行預處理

r=1/max(abs(wine[samp,1:11]))#確定引數rang的變化範圍

set.seed(101)

model1=nnet(quality~.,data=wine,subest=samp,size=4,rang=r,decay=5e-4,maxit=200)#建立神經網路模型

x=subset(wine,select=-quality)#提取wine資料集中除quality列以外的資料作為自變數

y=wine[,12]#提取quality列資料作為響應變數

y=class.ind(y)#預處理將其變為類指標矩陣

set.seed(101)

model2=nnet(x,y,decay=5e-4,maxit=200,size=4,rang=r)#建立神經網路模型

x=wine[,1:11]

?predict

pred=predict(model1,x,type="class")#根據模型對x資料進行**

pred[sample(1:4898,8)]

xt=wine[,1:11]

pred=predict(model2,xt)#根據模型對xt資料進行**

dim(pred)

pred[sample(1:4898,4),]

name=c("bad","good","mid")

prednew=max.col(pred)#確定每行中最大值所在的列

prednewn=name[prednew]#根據**結果將其變為相對應的類別名稱

set.seed(201)

prednewn[sample(1:4898,8)]

true=max.col(y)#確定真實值的每行中最大值所在的列

table(true,prednewn)#模型**精度展示

set.seed(444)

nrow.wine=dim(wine)[1]

samp=sample(1:nrow.wine,nrow.wine*0.7)#抽取70%樣本

wine[samp,1:11]=scale01(wine[samp,])#對資料樣本進行預處理

wine[-samp,1:11]=scale01(wine[-samp,])#對測試集進行預處理

r=1/max(abs(wine[samp,1:11]))#確定rang的變化範圍

n=length(samp)

err1=0

err2=0

for(i in 1:17)

#執行時間較長,

plot(1:17,err1,"l",col=1,lty=1,ylab="1",xlab="2",ylim=c(min(min(err1),min(err2)),max(max(err1),max(err2))))

lines(1:17,err2,col=1,lty=3)

points(1:17,err1,col=1,pch="+")

points(1:17,err2,col=1,pch="o")

legend(1,0.53,"ce",bty="n",cex=1.5)

legend(1,0.35,"ce",bty="n",cex=1.5)

err11=0

err12=0

for(i in 1:500)

plot(1:length(err11),err11,'l',ylab ="1",xlab ="2",col=1,ylim=c(min(min(err11),min(err12)),max(max(err11),max(err12))))

lines(1:length(err11),err12,col=1,lty=3)

legend(250,0.47,"ce",bty="n",cex=1.2)

legend(250,0.425,"ce",bty="n",cex=1.2)

set.seed(111)

model=nnet(quality~.,data=wine,maxit=300,rang=r,size=3,subset = samp)

x=wine[-samp,1:11]#確認需要進行**的樣本的特徵矩陣

pred=predict(model,x,tepe="class")#**

table(wine[-samp,12,pred])

R語言實現擬合神經網路 神經網路包

神經網路一直是迷人的機器學習模型之一,不僅因為花哨的反向傳播演算法,而且還因為它們的複雜性 考慮到許多隱藏層的深度學習 和受大腦啟發的結構。神經網路並不總是流行,部分原因是它們在某些情況下仍然存在計算成本高昂,部分原因是與支援向量機 svm 等簡單方法相比,它們似乎沒有產生更好的結果。然而,神經網路...

R中神經網路的實現

歸一化函式 x m in x ma x x min x frac max x mi n x x m in x 還原 min x x m ax x mi n x min x x max x min x min x x max x m in x premnmx aareturn aa postmnmx ...

神經網路 python實現神經網路

神經網路系列目錄 神經網路 神經網路原理介紹 bp演算法 神經網路 sklearn引數介紹及應用 神經網路實戰 主播綜合評分回歸 實戰 最小二乘法 梯度下降法區別及python實現 本篇博文通過python 實現神經網路,採用sklearn自帶的手寫數字集,看分類情況如何 一 匯入資料集並標準化 資...