1. 程式人生 > >斯坦福機器學習筆記1:GDA高斯判別分析演算法的原理及matlab程式實現

斯坦福機器學習筆記1:GDA高斯判別分析演算法的原理及matlab程式實現

ps:我本身沒有系統的學過matlab程式設計,所以有的方法,比如求均值用mean()函式之類的方法都是用很笨的方法實現的,所以有很多需要改進的地方,另外是自學實現的程式,可能有的地方我理解錯誤,如果有錯誤請提出來,大家一起學習微笑,本人qq553566286

首先,本文用到的資料是

train=[0 0;2 4;3 3;3 4;4 2;44;4 3;5 3;6 2;7 1;2 9;3 8;4 6;4 7;5 6;5 8;6 6;7 4;8 4;10 10];#訓練資料

group=[0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1]';#每一行訓練資料所對應的類別

將類別為0的資料用藍點表示出來,其中第一列作為橫座標,第二列作為縱座標,類別1的用黑點表示出來

影象表示如下

雖然資料的表示並不太符合高斯分佈,一會兒看到結果的時候會發現準確率還是可以的,這裡只是講講原理。

首先根據極大似然估計得到各引數的運算如下


其中fai是標籤為1的畫素的比例,mu0是所有標籤為0的自變數的平均值,這裡是一個二維的向量,因為train的每個樣本有兩個變數。Sigma是方差

對上面的公式進行程式設計實現

求fai

fai=num/length(group);

求mu0

sum1=0;
sum2=0;
for i=1:m
    sum1=sum1+(1-group(i))*train(i,1);
    sum2=sum2+(1-group(i))*train(i,2);
end
mu01=sum1/(m*fai);
mu02=sum2/(m*fai);
mu0=[mu01,mu02];

求mu1

sum1=0;
sum2=0;
for i=1:m
    sum1=sum1+group(i)*train(i,1);
    sum2=sum2+group(i)*train(i,2);
end
mu11=sum1/(m*fai);
mu12=sum2/(m*fai);
mu1=[mu11,mu12];

求sigma

sigmasum=[0,0;0,0];
for i=1:m
    sigmasum=sigmasum+(train(i,:)'-(mu1)')*(train(i,:)'-(mu1)')';
end
sigma=sigmasum/m;

下面將mu0和mu1都用紅點plot在剛剛的點圖中,可以看到m0和m1都是在中心的

plot(mu11,mu12,'r*');

接下來,在圖中畫出以m0,sigma和m1,sigma為引數的高斯等高線影象。

[x y]=meshgrid(linspace(0,10,50)',linspace(0,10,50)'); 
X=[x(:) y(:)]; 
z1=mvnpdf(X,mu0,sigma);
contour(x,y,reshape(z1,50,50),4);
hold on;

上述程式碼具體的含義自行百度,可以改改引數看看對結果的影響

結果如下:




那我們來試試幾個點,先看[4 3]這個點,我們可以很明顯的看到他應該是屬於第0類別的中心部分;

我們要求p(x丨y=0)和p(x丨y=0),觀察他們誰大誰小,以確定在哪一類。

公式如下:



對上述式子進行程式設計

test=[4 3];
p0=exp(-(test'-(mu0)')'*sigma^-1*(test'-(mu0)')/2)/(((2*pi)^(2/2))*det(sigma)^(1/2))
p1=exp(-(test'-(mu1)')'*sigma^-1*(test'-(mu1)')/2)/(((2*pi)^(2/2))*det(sigma)^(1/2))
if p0>p1
    disp('屬於第零類');
else
    disp('屬於第一類');
end
執行結果:

看到這裡差別0.008左右,看似不大

再看一個[6.5 5]這個點,可以看到他是屬於第一類的,而且和第零類差別很小

可以看到這裡只差0.003,由此可見,分類效果還是很好的,這也印證了所說的生成學習所需要的資料量比較少、

 完整程式如下

clear;clc;close all;
train=[0 0;2 4;3 3;3 4;4 2;4 4;4 3;5 3;6 2;7 1;2 9;3 8;4 6;4 7;5 6;5 8;6 6;7 4;8 4;10 10];
group=[0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1]';
num=0;
fai=0;
m=length(group);
for i=1:m
    if(group(i,1)==0)
        plot(train(i,1),train(i,2),'b*');
        hold on
    end
    if(group(i,1)==1)
        plot(train(i,1),train(i,2),'k*');
        hold on
    end
end
for i=1:m
    if(group(i,1)==1)
        num=num+1;
    end
end
fai=num/length(group);
sum1=0;
sum2=0;
for i=1:m
    sum1=sum1+(1-group(i))*train(i,1);
    sum2=sum2+(1-group(i))*train(i,2);
end
mu01=sum1/(m*fai);
mu02=sum2/(m*fai);
mu0=[mu01,mu02];
plot(mu01,mu02,'r*');
hold on
sum1=0;
sum2=0;
for i=1:m
    sum1=sum1+group(i)*train(i,1);
    sum2=sum2+group(i)*train(i,2);
end
mu11=sum1/(m*fai);
mu12=sum2/(m*fai);
mu1=[mu11,mu12];
plot(mu11,mu12,'r*');
% sigma=cov(train(:,1),train(:,2));
sigmasum=[0,0;0,0];
for i=1:m
    sigmasum=sigmasum+(train(i,:)'-(mu1)')*(train(i,:)'-(mu1)')';
end
sigma=sigmasum/m;
[x y]=meshgrid(linspace(0,10,50)',linspace(0,10,50)'); 
X=[x(:) y(:)]; 
z1=mvnpdf(X,mu0,sigma);
contour(x,y,reshape(z1,50,50),4);
hold on;

[x y]=meshgrid(linspace(0,10,50)',linspace(0,10,50)'); 
X=[x(:) y(:)];
z2=mvnpdf(X,mu1,sigma);
contour(x,y,reshape(z2,50,50),4);
hold off

test=[6.5 5];
p0=exp(-(test'-(mu0)')'*sigma^-1*(test'-(mu0)')/2)/(((2*pi)^(2/2))*det(sigma)^(1/2))
p1=exp(-(test'-(mu1)')'*sigma^-1*(test'-(mu1)')/2)/(((2*pi)^(2/2))*det(sigma)^(1/2))
if p0>p1
    disp('屬於第零類');
else
    disp('屬於第一類');
end



相關推薦

斯坦福機器學習筆記1GDA判別分析演算法原理matlab程式實現

ps:我本身沒有系統的學過matlab程式設計,所以有的方法,比如求均值用mean()函式之類的方法都是用很笨的方法實現的,所以有很多需要改進的地方,另外是自學實現的程式,可能有的地方我理解錯誤,如果有錯誤請提出來,大家一起學習,本人qq553566286 首先,本文用到的

斯坦福機器學習 網易公開課系列筆記(五)——判別分析、樸素貝葉

高斯判別分析(Gaussian discriminant analysis) 判別模型和生成模型       前面我們介紹了Logistic迴歸,通過學習hΘ(x)來對資料的分類進行預測:給定一個特徵向量x→輸出分類y∈{0,1}。這類通過直接

機器學習筆記1機器學習定義與分類

機器學習定義與分類 Andrew Ng機器學習課程學習筆記1 定義 Arthur Samuel (1959) Machine Learning: Field of study that gives computers the ability to l

機器學習筆記(1)線性迴歸

初次接觸機器學習的朋友們,建議先把這篇概念性的科普文章,精讀5遍以上:神經網路淺講:從神經元到深度學習 裡面有大量的矩陣向量的操作,不熟悉NDArray的,建議先看上一篇mxnet安裝及NDArray初體驗 下面這個示例的思路,先講解一下,不然不知道它們在幹嘛:) 先給出一個線性方程(1),如下圖:

機器學習筆記1機器學習的動機與應用

目標:機器學習有意義;機器學習的應用;所有人有能力進行機器學習的研究。 預備知識:隊、列、二叉樹、線性代數 預備軟體:Octave、Matlab 機器學習:1959年由Arthur提出:在不直接對對問題賦予計算機學習能力的一個領域。寫一個下棋,和自己下棋,程式自己和自己

機器學習筆記(3)——使用聚類分析演算法對文字分類(分類數k未知)

聚類分析是一種無監督機器學習(訓練樣本的標記資訊是未知的)演算法,它的目標是將相似的物件歸到同一個簇中,將不相似的物件歸到不同的簇中。如果要使用聚類分析演算法對一堆文字分類,關鍵要解決這幾個問題: 如何衡量兩個物件是否相似 演算法的效能怎麼度量 如何確定分類的個數或聚類

Coursera deeplearning.ai 深度學習筆記1-4-Deep Neural Networks-深度神經網路原理推導與程式碼實現

在掌握了淺層神經網路演算法後,對深度神經網路進行學習。 1. 原理推導 1.1 深度神經網路表示 定義:L表示神經網路總層數,上標[l]代表第l層網路,n[l]代表第l層的節點數,a[l]

深入淺出機器學習之生成模型,判別

        這一講是一塊單獨的內容,和上一部分的迴歸不太一樣,這塊側重用概率的方式來進行分類。        首先說一下判別學習和生成學習之間的區別,判別學習就是直接學習P(y| x),通過一系列

機器學習筆記----Fuzzy c-means(FCM)模糊聚類詳解matlab實現

前言:這幾天一直都在研究模糊聚類。感覺網上的文件都沒有一個詳細而具體的講解,正好今天有時間,就來聊一聊模糊聚類。 一:模糊數學 我們大家都知道計算機其實只認識兩個數字0,1。我們平時寫程式其實也是這樣if 1 then do.永遠這種模式,在這種模式中,一個元素要麼屬

判別分析演算法及其python實現

高斯判別分析演算法(Gaussian discriminat analysis) 高斯判別演算法是一個典型的生成學習演算法(關於生成學習演算法可以參考我的另外一篇部落格)。在這個演算法中,我們假設p(x|y)服從多元正態分佈。 注:在判別學習演算法中,

斯坦福機器學習筆記-Lecture 1,2

1. 知識點 1. 監督學習 指提前知道資料集以及正確答案,預測新資料對應的答案。 2. 無監督學習 未知正確答案,對已有的資料進行分類。 3. 線性迴歸 一種常見的學習方法。主要方法為設目標變數為已知feature的線性函式,並使其代價最小。 公式: 單變數

機器學習(周志華西瓜書)》學習筆記1第三章-線性模型

一、線性迴歸     線性迴歸的基本思想是採用對輸入樣例各個特徵進行線性加權的方式得到預測的輸出,並將預測的輸出和真實值的均方誤差最小化。1)如果輸入樣例只有一個特徵,那這個過程就是用一條直線去擬合平面直角座標系上的點; 2)如果有兩個特徵,表現在平面直角座標系上就是用一條

斯坦福CS20 TensorFlow學習筆記(1)Overview of Tensorflow

     斯坦福CS20 TensorFlow學習筆記(1):Overview of Tensorflow 1- TensorFlow是什麼? Google官方的介紹是: TensorFlow™ is an open source software

吳恩達機器學習筆記 —— 1 緒論初識機器學習

機器學習目前已經應用在很多領域,比如網頁搜尋、垃圾郵件過濾、點選率預測、生物資訊、無人駕駛、無人機、手寫體識別、自然語言處理、計算機視覺。 什麼是機器學習 1 機器學習一些比較難以變成的能力——Arthur Samuel 2 通過給定任務T以及效能度量P以及經驗E,計算機程式從經驗E中學習,用學習的結果

機器學習筆記 1 LMS和梯度下降(批梯度下降) 20170617

temp eas 理解 import 樣本 alt mes show 超過 # 概念 LMS(least mean square):(最小均方法)通過最小化均方誤差來求最佳參數的方法。 GD(gradient descent) : (梯度下降法)一種參數更新法則。可以作為L

Effictive Java學習筆記1創建和銷毀對象

安全 需要 () 函數 調用 bsp nbsp bean 成了 建議1:考慮用靜態工廠方法代替構造器 理由:1)靜態方法有名字啊,更容易懂和理解。構造方法重載容易讓人混淆,並不是好主意    2)靜態工廠方法可以不必每次調用時都創建一個新對象,而公共構造函數每次調用都會

斯坦福機器學習ex1.1(python)

blog com cnblogs div pan .com tlab 表示 def 使用的工具:NumPy和Matplotlib NumPy是全書最基礎的Python編程庫。除了提供一些高級的數學運算機制以外,還具備非常高效的向量和矩陣運算功能。這些對於機器學習的計算任務是

機器學習筆記(3)多類邏輯回歸

display images 可能 https 都沒有 -s labels 明顯 交叉 仍然是 動手學嘗試學習系列的筆記,原文見:多類邏輯回歸 — 從0開始 。 這篇的主要目的,是從一堆服飾圖片中,通過機器學習識別出每個服飾圖片對應的分類是什麽(比如:一個看起來

機器學習筆記1 - Hello World In Machine Learning

之間 項目 圍棋 gpu 強勁 大量數據 特殊 轉換成 [1] 前言 Alpha Go在16年以4:1的戰績打敗了李世石,17年又以3:0的戰績戰勝了中國圍棋天才柯潔,這真是科技界振奮人心的進步。伴隨著媒體的大量宣傳,此事變成了婦孺皆知的大事件。大家又開始激烈的討論機器人什

golang學習筆記(1)安裝&helloworld

golang安裝:golang編譯器安裝過程比較簡單,也比較快,不同平臺下(win/linux/macos)都比較相似;https://dl.gocn.io/golang/1.9.2/go1.9.2.src.tar.gz 下載對應的系統版本的編譯器go的版本號由"." 分為3部分如當前的