1. 程式人生 > >簡單易學的機器學習演算法——神經網路之BP神經網路

簡單易學的機器學習演算法——神經網路之BP神經網路

%% BP的主函式

% 清空
clear all;
clc;

% 匯入資料
load data;

%從1到2000間隨機排序
k=rand(1,2000);
[m,n]=sort(k);

%輸入輸出資料
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

%隨機提取1500個樣本為訓練樣本,500個樣本為預測樣本
trainCharacter=input(n(1:1600),:);
trainOutput=output(n(1:1600),:);
testCharacter=input(n(1601:2000),:);
testOutput=output(n(1601:2000),:);

% 對訓練的特徵進行歸一化
[trainInput,inputps]=mapminmax(trainCharacter');

%% 引數的初始化

% 引數的初始化
inputNum = 24;%輸入層的節點數
hiddenNum = 50;%隱含層的節點數
outputNum = 4;%輸出層的節點數

% 權重和偏置的初始化
w1 = rands(inputNum,hiddenNum);
b1 = rands(hiddenNum,1);
w2 = rands(hiddenNum,outputNum);
b2 = rands(outputNum,1);

% 學習率
yita = 0.1;

%% 網路的訓練
for r = 1:30
    E(r) = 0;% 統計誤差
    for m = 1:1600
        % 資訊的正向流動
        x = trainInput(:,m);
        % 隱含層的輸出
        for j = 1:hiddenNum
            hidden(j,:) = w1(:,j)'*x+b1(j,:);
            hiddenOutput(j,:) = g(hidden(j,:));
        end
        % 輸出層的輸出
        outputOutput = w2'*hiddenOutput+b2;
        
        % 計算誤差
        e = trainOutput(m,:)'-outputOutput;
        E(r) = E(r) + sum(abs(e));
        
        % 修改權重和偏置
        % 隱含層到輸出層的權重和偏置調整
        dw2 = hiddenOutput*e';
        db2 = e;
        
        % 輸入層到隱含層的權重和偏置調整
        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

%% 語音特徵訊號分類
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

%% 結果分析
%根據網路輸出找出資料屬於哪類
for m=1:400
    output_fore(m)=find(outputOfTest(:,m)==max(outputOfTest(:,m)));
end

%BP網路預測誤差
error=output_fore-output1(n(1601:2000))';

k=zeros(1,4);  
%找出判斷錯誤的分類屬於哪一類
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

%找出每類的個體和
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

啟用函式

相關推薦

簡單易學機器學習演算法——神經網路BP神經網路

%% BP的主函式 % 清空 clear all; clc; % 匯入資料 load data; %從1到2000間隨機排序 k=rand(1,2000); [m,n]=sort(k); %輸入輸出資料 input=data(:,2:25); output1 =data(:,1); %把輸出從1維變

機器學習筆記八—— knn-最簡單機器學習演算法以及KD樹原理

上一節結束了線性迴歸、邏輯迴歸,今天一節來介紹機器學習中最簡單的演算法:    K近鄰(KNN,全稱K-nearst Neighbor)       概述:判斷一個樣本的label只需要判斷該樣本週圍其他樣本的label。簡言之,朋

python機器學習算法系列初識神經網路分類

下面的例子是區分數字如下圖:在程式中通過下面語句就可以自動下載資料集mnist=input_data.read_data_sets('MNIST_data',one_hot=True) 但是有時候會出錯,那就需要大家手動下載,它包括四個壓縮檔案,下載統一後放在python工作

機器學習演算法小整理KNN

1、工作原理: 存在一個樣本資料集合(訓練樣本集)且樣本集中每個資料都存在標籤(樣本集中每一資料與所屬分類的對應關係)。輸入沒有標籤的新資料後,將新資料的每個特徵與樣本集中資料對應的特徵進行比較,提取樣本集中特徵最相似資料(最近鄰)的分類標籤。一般只選擇樣本資料集中前K個最

機器學習(四):BP神經網路_手寫數字識別_Python

機器學習演算法Python實現 三、BP神經網路 全部程式碼 1、神經網路model 先介紹個三層的神經網路,如下圖所示 輸入層(input layer)有三個units(為

機器學習BP神經網路演算法實現影象分類

BP 演算法是一個迭代演算法,它的基本思想為:(1) 先計算每一層的狀態和啟用值,直到最後一層(即訊號是前向傳播的);(2) 計算每一層的誤差,誤差的計算過程是從最後一層向前推進的(這就是反向傳播演算法名字的由來);(3) 更新引數(目標是誤差變小),迭代前面兩

吳恩達機器學習(第十章)---神經網路的反向傳播演算法

一、簡介 我們在執行梯度下降的時候,需要求得J(θ)的導數,反向傳播演算法就是求該導數的方法。正向傳播,是從輸入層從左向右傳播至輸出層;反向傳播就是從輸出層,算出誤差從右向左逐層計算誤差,注意:第一層不計算,因為第一層是輸入層,沒有誤差。 二、如何計算 設為第l層,第j個的誤差。

簡單易學機器學習演算法——Softmax Regression

Contents   [hide] 1 簡介 2 代價函式 3 Softmax迴歸模型引數化的特點 4&nbs

機器學習---演算法---神經網路入門

轉自:http://www.ruanyifeng.com/blog/2017/07/neural-network.html   眼下最熱門的技術,絕對是人工智慧。 人工智慧的底層模型是"神經網路"(neural network)。許多複雜的應用(比如模式識別、自動控制)和高階模型(比如深度學習

簡單易學機器學習演算法——梯度提升決策樹GBDT

梯度提升決策樹(Gradient Boosting Decision Tree,GBDT)演算法是近年來被提及比較多的一個演算法,這主要得益於其演算法的效能,以及該演算法在各類資料探勘以及機器學習比賽中的卓越表現,有很多人對GBDT演算法進行了開原始碼的開發,比較火的是陳

深入淺出|深度學習演算法BP神經網路 詳細公式推導

所謂神經網路,目前用得最廣泛的一個定義是“的神經網路是由具有適應性簡單單元組成的廣泛並行互連的網路,它的組織能夠模擬生物神經系統對真實世界物體所做出的互動反應”。 BP(back propagation)神經網絡一種按照誤差逆向傳播演算法訓練的多層前饋神經網路,是目前應用

機器學習&資料探勘筆記_16(常見面試機器學習演算法思想簡單梳理)

  前言:   找工作時(IT行業),除了常見的軟體開發以外,機器學習崗位也可以當作是一個選擇,不少計算機方向的研究生都會接觸這個,如果你的研究方向是機器學習/資料探勘之類,且又對其非常感興趣的話,可以考慮考慮該崗位,畢竟在機器智慧沒達到人類水平之前,機器學習可以作為一種重要手段,而隨著科技的不斷髮展,

簡單易學機器學習演算法——AdaBoost

#coding:UTF-8 ''' Created on 2015年6月15日 @author: zhaozhiyong ''' from numpy import * def loadSimpleData(): datMat = mat([[1., 2.1],

機器學習演算法推導】BP神經網路

非線性問題 對於一張汽車圖片,如何將其識別為汽車呢?我們人可能看一眼就能識別出來,但是如何讓計算機也擁有同樣的技能呢?我們知道,一張圖片在計算機中都是以畫素矩陣的形式儲存的,無論是一輛汽車,還是一輛飛機,在計算機中都是一個個矩陣,並無法直觀地感受到這個矩陣代表是汽車還是飛機。用邏輯迴

從整合方法到神經網路:自動駕駛技術中的機器學習演算法有哪些?

來源:機器之心 編譯:Lj Linjing、蔣思源 物聯網智庫 原創 轉載請註明來源和出處 ------   【導讀】------ 機器學習演算法可以融合來自車體內外不同感測器的資料,從而評估駕駛員狀況或者對駕駛場景進行分類。本文將粗略講解一下各類用於自動駕駛技術的演算法。 如今,機器

簡單易學機器學習演算法——K-近鄰演算法

# coding:UTF-8 import cPickle as pickle import gzip import numpy as np def load_data(data_file): with gzip.open(data_file, 'rb') as f: train_set, vali

簡單易學機器學習演算法——整合方法(Ensemble Method)

一、整合學習方法的思想前面介紹了一系列的演算法,每個演算法有不同的適用範圍,例如有處理線性可分問題的,有處理線性不可分問題。在現實世界的生活中,常常會因為“集體智慧”使得問題被很容易解決,那麼問題來了,

簡單易學機器學習演算法——因子分解機(Factorization Machine)

#coding:UTF-8 from __future__ import division from math import exp from numpy import * from random import normalvariate#正態分佈 from datetime import datetime

常見面試機器學習演算法思想簡單梳理(進階版)

//2015年5月1日 //參考http://blog.jobbole.com/74438/ 實際上在面試過程中,懂這些演算法的基本思想和大概流程是遠遠不夠的,那些面試官往往問的都是一些公司內部業務中的課題,往往要求你不僅要懂得這些演算法的理論過程,而且要非常熟悉怎樣使用

簡單易學機器學習演算法——K-Means演算法

一、聚類演算法的簡介    聚類演算法是一種典型的無監督學習演算法,主要用於將相似的樣本自動歸到一個類別中。聚類演算法與分類演算法最大的區別是:聚類演算法是無監督的學習演算法,而分類演算法屬於監督的學習