1. 程式人生 > >【斯坦福---機器學習】複習筆記之生成學習演算法

【斯坦福---機器學習】複習筆記之生成學習演算法

本講大綱:

1.生成學習演算法(Generative learning algorithm) 
2.高斯判別分析(GDA,Gaussian Discriminant Analysis) 
3.樸素貝葉斯(Naive Bayes) 
4.拉普拉斯平滑(Laplace smoothing)

1.生成學習演算法

判別學習演算法(discriminative learning algorithm):直接學習p(y|x)(比如說logistic迴歸)或者說是從輸入直接對映到{0,1}.

生成學習演算法(generative learning algorithm):p(x|y)(和p(y))進行建模.

簡單的來說,判別學習演算法的模型是通過一條分隔線把兩種類別區分開,而生成學習演算法是對兩種可能的結果分別進行建模,然後分別和輸入進行比對,計算出相應的概率。

比如說良性腫瘤和惡性腫瘤的問題,對良性腫瘤建立model1(y=0),對惡性腫瘤建立model2(y=1),p(x|y=0)表示是良性腫瘤的概率,p(x|y=1)表示是惡性腫瘤的概率.

根據貝葉斯公式(Bayes rule)推匯出y在給定x的概率為:這裡寫圖片描述

2.高斯判別分析

GDA是我們要學習的第一個生成學習演算法.

GDA的兩個假設:

  • 假設輸入特徵x∈Rn,並且是連續值;
  • p(x|y)是多維正態分佈(multivariate normal distribution)
    ;

2.1 多維正態分佈 
若x服從多維正態分佈(也叫多維高斯分佈),均值向量(mean vector)這裡寫圖片描述,協方差矩陣(convariance matrix)這裡寫圖片描述,寫成x~這裡寫圖片描述, 其密度函式為: 
這裡寫圖片描述 
這裡寫圖片描述表示行列式(determinant).

均值:這裡寫圖片描述 
協方差Cov(Z)=這裡寫圖片描述=這裡寫圖片描述 = ∑

高斯分佈的一些例子: 
這裡寫圖片描述 
左圖均值為零(2*1的零向量),協方差矩陣為單位矩陣I(2*2)(成為標準正態分佈). 
中圖協方差矩陣為0.6I, 
右圖協方差矩陣為2I

這裡寫圖片描述 
均值為0,方差分別為: 
這裡寫圖片描述

2.2 高斯判別分析模型 
這裡寫圖片描述 
寫出概率分佈: 
這裡寫圖片描述

模型的引數為φ,μ0,μ1,∑,對數似然性為: 
這裡寫圖片描述

求出最大似然估計為: 
這裡寫圖片描述

結果如圖所示: 
這裡寫圖片描述

1.3 討論GDA和logistic迴歸 
GDA模型和logistic迴歸有一個很有意思的關係. 
如果把這裡寫圖片描述看做是x的函式,則有: 
這裡寫圖片描述 
其中這裡寫圖片描述這裡寫圖片描述的函式,這正是logistic迴歸的形式.

關於模型的選擇: 
剛才說到如果p(x|y)是一個多維的高斯分佈,那麼p(y|x)必然能推出一個logistic函式;反之則不正確,p(y|x)是一個logistic函式並不能推出p(x|y)服從高斯分佈.這說明GDA比logistic迴歸做了更強的模型假設.

  • 如果p(x|y)真的服從或者趨近於服從高斯分佈,則GDA比logistic迴歸效率高.
  • 當訓練樣本很大時,嚴格意義上來說並沒有比GDA更好的演算法(不管預測的多麼精確).
  • 事實證明即使樣本數量很小,GDA相對logisic都是一個更好的演算法.

但是,logistic迴歸做了更弱的假設,相對於不正確的模型假設,具有更好的魯棒性(robust).許多不同的假設能夠推出logistic函式的形式. 比如說,如果這裡寫圖片描述這裡寫圖片描述那麼p(y|x)是logistic. logstic迴歸在這種型別的Poisson資料中效能很好. 但是如果我們使用GDA模型,把高斯分佈應用於並不是高斯資料中,結果是不好預測的,GDA就不是很好了.

3.樸素貝葉斯

在GDA模型中,特徵向量x是連續的實數向量.如果x是離散值,我們需要另一種學習演算法了.

例子:垃圾郵件分類問題 
首先是把一封郵件作為輸入特徵,與已有的詞典進行比對,如果出現了該詞,則把向量的xi=1,否則xi=0,例如: 
這裡寫圖片描述 
我們要對p(x|y)建模,但是假設我們的詞典有50000個詞,那麼這裡寫圖片描述,如果採用多項式建模的方式,會有這裡寫圖片描述,明顯引數太多了,這個方法是行不通的.

為了對p(x|y)建模,我們做一個很強的假設,假設給定y,xi是條件獨立(conditionally independent)的.這個假設成為樸素貝葉斯假設(Naive Bayes assumption).

因此有: 
這裡寫圖片描述

雖然說樸素貝葉斯假設是很強的,但是其實這兒演算法在很多問題都工作的很好.

模型引數包括:這裡寫圖片描述這裡寫圖片描述

聯合似然性(joint likelihood)為: 
這裡寫圖片描述 
得到最大似然估計值: 
這裡寫圖片描述

很容易計算: 
這裡寫圖片描述

樸素貝葉斯的問題: 
假設在一封郵件中出現了一個以前郵件從來沒有出現的詞,在詞典的位置是35000,那麼得出的最大似然估計為: 
這裡寫圖片描述 
也即使說,在訓練樣本的垃圾郵件和非垃圾郵件中都沒有見過的詞,模型認為這個詞在任何一封郵件出現的概率為0. 
假設說這封郵件是垃圾郵件的概率比較高,那麼 
這裡寫圖片描述 
模型失靈.

在統計上來說,在你有限的訓練集中沒有見過就認為概率是0是不科學的.

4.laplace平滑

為了避免樸素貝葉斯的上述問題,我們用laplace平滑來優化這個問題. 
這裡寫圖片描述

回到樸素貝葉斯問題,通過laplace平滑: 
這裡寫圖片描述

分子加1,分母加1就把分母為零的問題解決了.

感謝博主的總結:http://blog.csdn.net/andrewseu/article/details/46789121

相關推薦

斯坦福---機器學習複習筆記生成學習演算法

本講大綱: 1.生成學習演算法(Generative learning algorithm)  2.高斯判別分析(GDA,Gaussian Discriminant Analysis)  3.樸素貝葉斯(Naive Bayes)  4.拉普拉斯平滑(Laplace sm

斯坦福---機器學習複習筆記樸素貝葉斯演算法

本講大綱: 1.樸素貝葉斯(Naive Bayes) 2.神經網路(Neural Networks) 3.支援向量機(Support vector machines) 1.樸素貝葉斯 前面講的主要是是二元值的特徵,更一般化的是xi可以取{1,2,3

斯坦福---機器學習複習筆記最優間隔分類器

本講大綱: 1.最優間隔分類器(optimal margin classifier) 2.原始/對偶優化問題(KKT)(primal/dual optimization problem) 3.SVM對偶(SVM dual) 4.核方法(kernels)(

Android 進階ORM 框架 greenDAO學習筆記

前言 當初學習Hibernate的時候就非常驚歎這種ORM思想,後來才知道原來Android中也有這種基於ORM思想的開源框架greenDAO。 greenDAO簡介: 簡單的講,greenDAO 是一個將物件對映到 SQLite 資料庫

機器學習實戰系列讀書筆記AdaBoost演算法公式推導和例子講解(一)

最近在看整合演算法AdaBoost,推薦先看李航的統計學習方法第8章,然後再看機器學習實戰第7章,李航的書上的公式推導講的很詳細了,但是很多地方對於初學者來說,還是需要時間去理解和消化的。本文將從以下幾個方面來介紹AdaBoost演算法。一、AdaBoost演算法公式推導二、

機器學習實戰系列讀書筆記KNN演算法(三)

本次讀書筆記在於延續上一篇部落格的工程,做出微小的改動,即使用Matplotlib建立散點圖(散點圖使用DataMat矩陣的第一、第二列資料)。首先還是介紹一個相關知識點,方便程式碼瀏覽。知識點一:1、在使用Matplotlib生成圖表時,預設不支援漢字,所有漢字都會顯示成框

機器學習特徵選擇最小冗餘最大相關性(mRMR)與隨機森林(RF)

特徵選擇之最小冗餘最大相關性(mRMR) 最小冗餘最大相關性(mRMR)是一種濾波式的特徵選擇方法,由Peng et.al提出。主要用途有機器學習,影象識別等。 一種常用的特徵選擇方法是最大化特徵與分類變數之間的相關度,就是選擇與分類變數擁有最高相關度的前k個變數。但是,在特徵選擇中,

多執行緒複習筆記多執行緒中的異常

在一個執行緒組中如果其中一個執行緒執行報錯並不影響其他執行緒的繼續執行,例如: package com.fyw.thread.lock.exception; public class MyThread extends Thread { private String num; publi

多執行緒複習筆記多執行緒中的Lock使用

Lock 1、getHoldCount() 查詢當前執行緒保持此鎖鎖定的個數,也就是呼叫lock方法的次數 2、int getQueueLength 返回正等待此鎖定的執行緒估計數,例如有5個執行緒,1個執行緒首先執行await,那麼呼叫getQueueLength返回4 3、i

多執行緒複習筆記執行緒間的通訊

Object.wait:釋放鎖,當時程式碼不會往下繼續執行,需要等待notify通知,wait(1000)超過1秒自動喚醒 Object.notify:不釋放鎖,需要等到同步程式碼塊執行完畢,如果沒有wait執行緒,notify命令將被忽略。 condition 如果有多個執行緒處於等待

Machine Learning·機器學習決策樹ID3演算法(Iterative Dichotomiser 3)

目錄 1、什麼是決策樹 2、如何構造一棵決策樹? 2.1、基本方法 2.2、評價標準是什麼/如何量化評價一個特徵的好壞? 2.3、資訊熵、資訊增益的計算 2.4、決策樹構建方法

Python學習第2篇:Python數據類型

msg ear sleep abc 命令 play bbbb 朋友 == 數字類型和字符串類型 1.bin()函數將十進制轉換成而進制 2.oct()函數將十進制轉換成八進制 3.hex()函數將十進制轉換成十六進制     十六進制表示:0-9 a b c

Python學習第2篇:Python數據類型(2)

append 但是 iss 代碼 key 常用方法 uber ner ces 元組 #為何要有元組,存放多個值,元組不可變,更多的是用來做查詢 t=(1,[1,3],‘sss‘,(1,2)) #t=tuple((1,[1,3],‘sss‘,(1,2))) #

Redis學習Redis筆記(一)——特點、基礎命令和資料結構

更新時間:2018-10-13 Redis的特性 速度快 持久化(斷電不丟資料) 多種資料結構 支援多種客戶端語言 功能豐富 操作簡單 主從複製 高可用,分散式 Redis的通用命令 key

javascript筆記Array方法forEach&map&filter&some&every

做前端有多年了,看過不少技術文章,學了新的技術,但更新迭代快的大前端,龐大的知識庫,很多學過就忘記了,特別在專案緊急的條件下,哪怕心中隱隱約約有學過一個方法,但會下意識的使用舊的方法去解決,多年前ES5幾個新增的陣列方法,好用但是常忘記用,趁著這周比較清閒,重溫下並做下筆記,養成記筆記的好習慣。 for

Python學習第4篇:Python可變資料型別與不可變資料型別 可變資料型別和不可變資料型別

可變資料型別和不可變資料型別 1.可變資料型別:在id不變的情況下,value可改變(列表和字典是可變型別,但是字典中的key值必須是不可變型別)   2.不可變資料型別:value改變,id也跟著改變。

Python學習第3篇:Python運算子 python-----運算子及while迴圈

python-----運算子及while迴圈 一、運算子 計算機可以進行的運算有很多種,不只是加減乘除,它和我們人腦一樣,也可以做很多運算。 種類:算術運

Python學習第5篇:Python字元編碼問題 python----------字元編碼具體原理

python之----------字元編碼具體原理 1.記憶體和硬碟都是用來儲存的。 CPU:速度快 硬碟:永久儲存 &nb

Python學習第9篇:Python常用模組二(時間模組,序列化模組等) 常用模組2

常用模組2 一、time模組 表示時間的三種方式:   時間戳:數字(計算機能認識的)   時間字串:t='2012-12-12'

Python學習第8篇:Python常用模組一(主要是正則以及collections模組) python--------------常用模組正則

python--------------常用模組之正則 一、認識模組     什麼是模組:一個模組就是一個包含了python定義和宣告的檔案,檔名就是加上.py的字尾,但其實import載入的模組分為四個通用類別 :