
簡(jiǎn)單易學(xué)的機(jī)器學(xué)習(xí)算法—神經(jīng)網(wǎng)絡(luò)之BP神經(jīng)網(wǎng)絡(luò)
一、BP神經(jīng)網(wǎng)絡(luò)的概念
BP神經(jīng)網(wǎng)絡(luò)是一種多層的前饋神經(jīng)網(wǎng)絡(luò),其主要的特點(diǎn)是:信號(hào)是前向傳播的,而誤差是反向傳播的。具體來(lái)說(shuō),對(duì)于如下的只含一個(gè)隱層的神經(jīng)網(wǎng)絡(luò)模型:
(三層BP神經(jīng)網(wǎng)絡(luò)模型)
BP神經(jīng)網(wǎng)絡(luò)的過(guò)程主要分為兩個(gè)階段,第一階段是信號(hào)的前向傳播,從輸入層經(jīng)過(guò)隱含層,最后到達(dá)輸出層;第二階段是誤差的反向傳播,從輸出層到隱含層,最后到輸入層,依次調(diào)節(jié)隱含層到輸出層的權(quán)重和偏置,輸入層到隱含層的權(quán)重和偏置。
二、BP神經(jīng)網(wǎng)絡(luò)的流程
在知道了BP神經(jīng)網(wǎng)絡(luò)的特點(diǎn)后,我們需要依據(jù)信號(hào)的前向傳播和誤差的反向傳播來(lái)構(gòu)建整個(gè)網(wǎng)絡(luò)。
1、網(wǎng)絡(luò)的初始化
假設(shè)輸入層的節(jié)點(diǎn)個(gè)數(shù)為n,隱含層的節(jié)點(diǎn)個(gè)數(shù)為,輸出層的節(jié)點(diǎn)個(gè)數(shù)為m。輸入層到隱含層的權(quán)重,隱含層到輸出層的權(quán)重為wjk,輸入層到隱含層的偏置為aj,隱含層到輸出層的偏置為bk。學(xué)習(xí)速率為
,激勵(lì)函數(shù)為
。其中激勵(lì)函數(shù)為
取Sigmoid函數(shù)。形式為:
2、隱含層的輸出
如上面的三層BP網(wǎng)絡(luò)所示,隱含層的輸出為
3、輸出層的輸出
4、誤差的計(jì)算
我們?nèi)≌`差公式為:
其中為期望輸出。我們記
,則可以表示為
以上公式中
5、權(quán)值的更新
權(quán)值的更新公式為:
這里需要解釋一下公式的由來(lái):
這是誤差反向傳播的過(guò)程,我們的目標(biāo)是使得誤差函數(shù)達(dá)到最小值,即,我們使用梯度下降法:
隱含層到輸出層的權(quán)重更新
則權(quán)重的更新公式為:
輸入層到隱含層的權(quán)重更新
其中
則權(quán)重的更新公式為:
6、偏置的更新
偏置的更新公式為:
隱含層到輸出層的偏置更新
則偏置的更新公式為:
輸入層到隱含層的偏置更新
其中
則偏置的更新公式為:
7、判斷算法迭代是否結(jié)束
有很多的方法可以判斷算法是否已經(jīng)收斂,常見(jiàn)的有指定迭代的代數(shù),判斷相鄰的兩次誤差之間的差別是否小于指定的值等等。
三、實(shí)驗(yàn)的仿真
在本試驗(yàn)中,我們利用BP神經(jīng)網(wǎng)絡(luò)處理一個(gè)四分類問(wèn)題,最終的分類結(jié)果為:
MATLAB代碼
主程序
[plain] view plain copy 在CODE上查看代碼片派生到我的代碼片
%% BP的主函數(shù)
% 清空
clear all;
clc;
% 導(dǎo)入數(shù)據(jù)
load data;
%從1到2000間隨機(jī)排序
k=rand(1,2000);
[m,n]=sort(k);
%輸入輸出數(shù)據(jù)
input=data(:,2:25);
output1 =data(:,1);
%把輸出從1維變成4維
for i=1:2000
switch output1(i)
case 1
output(i,:)=[1 0 0 0];
case 2
output(i,:)=[0 1 0 0];
case 3
output(i,:)=[0 0 1 0];
case 4
output(i,:)=[0 0 0 1];
end
end
%隨機(jī)提取1500個(gè)樣本為訓(xùn)練樣本,500個(gè)樣本為預(yù)測(cè)樣本
trainCharacter=input(n(1:1600),:);
trainOutput=output(n(1:1600),:);
testCharacter=input(n(1601:2000),:);
testOutput=output(n(1601:2000),:);
% 對(duì)訓(xùn)練的特征進(jìn)行歸一化
[trainInput,inputps]=mapminmax(trainCharacter');
%% 參數(shù)的初始化
% 參數(shù)的初始化
inputNum = 24;%輸入層的節(jié)點(diǎn)數(shù)
hiddenNum = 50;%隱含層的節(jié)點(diǎn)數(shù)
outputNum = 4;%輸出層的節(jié)點(diǎn)數(shù)
% 權(quán)重和偏置的初始化
w1 = rands(inputNum,hiddenNum);
b1 = rands(hiddenNum,1);
w2 = rands(hiddenNum,outputNum);
b2 = rands(outputNum,1);
% 學(xué)習(xí)率
yita = 0.1;
%% 網(wǎng)絡(luò)的訓(xùn)練
for r = 1:30
E(r) = 0;% 統(tǒng)計(jì)誤差
for m = 1:1600
% 信息的正向流動(dòng)
x = trainInput(:,m);
% 隱含層的輸出
for j = 1:hiddenNum
hidden(j,:) = w1(:,j)'*x+b1(j,:);
hiddenOutput(j,:) = g(hidden(j,:));
end
% 輸出層的輸出
outputOutput = w2'*hiddenOutput+b2;
% 計(jì)算誤差
e = trainOutput(m,:)'-outputOutput;
E(r) = E(r) + sum(abs(e));
% 修改權(quán)重和偏置
% 隱含層到輸出層的權(quán)重和偏置調(diào)整
dw2 = hiddenOutput*e';
db2 = e;
% 輸入層到隱含層的權(quán)重和偏置調(diào)整
for j = 1:hiddenNum
partOne(j) = hiddenOutput(j)*(1-hiddenOutput(j));
partTwo(j) = w2(j,:)*e;
end
for i = 1:inputNum
for j = 1:hiddenNum
dw1(i,j) = partOne(j)*x(i,:)*partTwo(j);
db1(j,:) = partOne(j)*partTwo(j);
end
end
w1 = w1 + yita*dw1;
w2 = w2 + yita*dw2;
b1 = b1 + yita*db1;
b2 = b2 + yita*db2;
end
end
%% 語(yǔ)音特征信號(hào)分類
testInput=mapminmax('apply',testCharacter',inputps);
for m = 1:400
for j = 1:hiddenNum
hiddenTest(j,:) = w1(:,j)'*testInput(:,m)+b1(j,:);
hiddenTestOutput(j,:) = g(hiddenTest(j,:));
end
outputOfTest(:,m) = w2'*hiddenTestOutput+b2;
end
%% 結(jié)果分析
%根據(jù)網(wǎng)絡(luò)輸出找出數(shù)據(jù)屬于哪類
for m=1:400
output_fore(m)=find(outputOfTest(:,m)==max(outputOfTest(:,m)));
end
%BP網(wǎng)絡(luò)預(yù)測(cè)誤差
error=output_fore-output1(n(1601:2000))';
k=zeros(1,4);
%找出判斷錯(cuò)誤的分類屬于哪一類
for i=1:400
if error(i)~=0
[b,c]=max(testOutput(i,:));
switch c
case 1
k(1)=k(1)+1;
case 2
k(2)=k(2)+1;
case 3
k(3)=k(3)+1;
case 4
k(4)=k(4)+1;
end
end
end
%找出每類的個(gè)體和
kk=zeros(1,4);
for i=1:400
[b,c]=max(testOutput(i,:));
switch c
case 1
kk(1)=kk(1)+1;
case 2
kk(2)=kk(2)+1;
case 3
kk(3)=kk(3)+1;
case 4
kk(4)=kk(4)+1;
end
end
%正確率
rightridio=(kk-k)./kk
激活函數(shù)
[plain] view plain copy 在CODE上查看代碼片派生到我的代碼片
%% 激活函數(shù) 數(shù)據(jù)分析師培訓(xùn)
function [ y ] = g( x )
y = 1./(1+exp(-x));
end
數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼
若不方便掃碼,搜微信號(hào):CDAshujufenxi
LSTM 模型輸入長(zhǎng)度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長(zhǎng)序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報(bào)考條件詳解與準(zhǔn)備指南? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代浪潮下,CDA 數(shù)據(jù)分析師認(rèn)證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計(jì)的實(shí)用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強(qiáng)大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠(chéng)摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實(shí)施重大更新。 此次更新旨在確保認(rèn) ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價(jià)值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡(jiǎn)稱 BI)深度融合的時(shí)代,BI ...
2025-07-10SQL 在預(yù)測(cè)分析中的應(yīng)用:從數(shù)據(jù)查詢到趨勢(shì)預(yù)判? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代,預(yù)測(cè)分析作為挖掘數(shù)據(jù)潛在價(jià)值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價(jià)值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點(diǎn),而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報(bào)考到取證的全攻略? 在數(shù)字經(jīng)濟(jì)蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭(zhēng)搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢(shì)性檢驗(yàn):捕捉數(shù)據(jù)背后的時(shí)間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢(shì)性檢驗(yàn)如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時(shí)間維度的精準(zhǔn)切片? ? 在數(shù)據(jù)的世界里,時(shí)間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準(zhǔn) ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實(shí)戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認(rèn)證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗(yàn):數(shù)據(jù)趨勢(shì)與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準(zhǔn)確捕捉數(shù)據(jù)的趨勢(shì)變化以及識(shí)別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認(rèn)證作為國(guó)內(nèi)權(quán)威的數(shù)據(jù)分析能力認(rèn)證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對(duì)策略? 長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨(dú)特的門控機(jī)制,在 ...
2025-07-07統(tǒng)計(jì)學(xué)方法在市場(chǎng)調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場(chǎng)調(diào)研是企業(yè)洞察市場(chǎng)動(dòng)態(tài)、了解消費(fèi)者需求的重要途徑,而統(tǒng)計(jì)學(xué)方法則是市場(chǎng)調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書考試全攻略? 在數(shù)字化浪潮席卷全球的當(dāng)下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動(dòng)力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準(zhǔn)確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動(dòng)力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價(jià)值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03