1. 程式人生 > >機器學習:各演算法小結(3)

機器學習:各演算法小結(3)

將最近接觸的幾個機器學習演算法小結一下,順便理理自己的思路。

近年來在機器學習的研究中,對演算法的創新主要是在原有的基礎上,通過結合不同演算法的優點,得到一種更有效的演算法,如結合遺傳演算法的決策樹、結合自助法boot-strap誕生的決策樹隨機森林等。我最近了解的主要是基礎演算法,然後接觸了一些新的演算法理念。主要了解了:監督學習的KNN,決策樹,支援向量機,神經網路,非監督學習的系統聚類,k-means;以及一些輔助演算法或分析如:EM思想,主成分分析、因子分析等。

一、

監督學習是在知道訓練資料X的目標Y下進行的。

KNN(k最近鄰)是最簡單的監督學習演算法之一,他是惰性學習(lazy learning)的典型代表,一開始不訓練模型,只儲存訓練資料樣本點,在需要對資料進行預測時,計算輸入資料與訓練資料各樣本點間的距離,選取其中最近的k個樣本點,根據樣本點所屬的分類來加權得到自己所屬的類別,權重一般為距離的倒數。KNN的演算法很簡單,而且分類準確性還挺高的。但是缺點也很明顯

①每次都需要計算跟所有樣本點的距離,所以當資料量過於龐大時,速度會非常慢,這是惰性學習的缺點。

②當樣本點存在範圍重疊時,分類效果會變得特別不好。

針對這2個缺點,改進的方法主要有剪輯近鄰法,將不同類別交界處的樣本進行適當篩選,去掉類別混雜的樣本,讓邊界更清晰。這樣做的話,既可以縮減樣本量,也可以讓分類準確性得到提高,步驟主要如下:

①資料分為參照集(Reference)和訓練集(Train)

②利用參照集使用KNN演算法對訓練集中的資料進行預測

③若預測的類別跟其原來所屬的類別不一樣(說明該樣本點很大可能處在兩類別的交界處),則將該樣本點從訓練集中剔除

④獲得最終剪輯後的訓練集,剪輯樣本集TE

KNN演算法還有一個要點就是對於K值的選取,如下面這個經典的圖:


當K為1,3,5時,中間的綠圓點所屬的類別都會有差別,所以究竟要選取多大的K值,決定了模型對實際樣本預測的準確度。一種最常用的方法是設立驗證資料,分別選用不同的k值,得到其對驗證資料的分類誤差率,綜合評價選取分類效果最好的K值,k值一般為2~10或例項個數的平方根。

綜合來說,KNN不用建立模型,適用於小樣本,還有那些不能一次性獲得所有資料的情況,而且其對已分好類的資料是百分百正確的,沒有資訊損失,其他諸如迴歸擬合,即使對於已知類別的訓練資料,仍然存在偏差,資訊損失。

決策樹。決策樹的樹狀圖易於理解,應用範圍相當廣範,顧名思義經常用來輔助決策,已經不能簡單的稱作分類器了。對於決策樹的介紹可以看看我的這篇博文:

http://blog.csdn.net/databatman/article/details/49406727。這裡就簡單說下大概,決策樹的話現在主要有ID3,C4.5,CART三種版本,其實都是一個東西,只是增加了些小功能,如支援對連續資料進行分類,採用資訊增益率結合資訊增益,加入了後期對樹枝的剪輯功能等,其實本質上都是決策樹,只是效能一代代更優而已。如下長這個樣子:


決策樹的分類原則是得到一顆儘量小的樹,這棵樹能滿足分類的需求,也就是我們所說的奧坎姆剃刀(最簡單的總是最好的),樹太寬或太深都不好,決策樹的做法是這樣的:通過選取資訊增益大的為節點來減少樹的深度,通過設定資訊增益率的閾值來降低樹的寬度。

支援向量機(Suppirt VectorMachine,SVM).SVM是基於統計學習理論的一種分類演算法,可以說是統計數學近年來的巔峰啊。有著堅實的數學推導作為支援。SVM是一種二元分類器,可以通過多次分類來完成對多元的分類,對噪聲魯棒性很好。SVM的思路主要如下圖,在兩類資料間,其實是有無數條線能夠完成對資料的分類,就像感知器(perceptron)也只是找到一條區域性最優解的分類線而已。而SVM找到的超平面(這裡是線),中間那條線,他處在兩條虛線的中間,離兩條虛線的距離一樣,而兩邊虛線則是通過支援向量(support vector)來構建的。


而當資料線性不可分的時候,SVM會將當前維度下線性不可分的資料對映到高維空間,完成分類。如下:


對映的函式叫核函式,有多項式核、高斯核等等。

綜合來說,SVM的分類精度特別高,在同類(監督學習演算法)演算法中,分類精度特別優良,對於SVM的具體推導感興趣的可以看v_JULY_v大大寫的博文【參考文獻1】,介紹的特別詳細。

神經網路(artificialNeural Network)。神經網路之前沉寂了一段時間,直到2006年由hinton等人提出深度學習框架,一夜之間又變得家喻戶曉,當然現在換了名字叫深度學習了。傳統的神經網路主要是BP神經網路。BP指Back Propagation反向傳播演算法。

神經網路是模擬的生物神經元之間傳遞得到的一種網狀模型如下:一般為三層結構:輸入層、隱含層(可多層)和輸出層,通常3層網路即可擬合相當複雜的函式關係。神經網路只是一種結構,當他運用BP演算法來進行擬合,就叫做BP神經網路。BP演算法的核心主要是數學中的梯度下降和鏈式法則,過程主要如圖:將訓練資料輸入,從輸出神經元獲得預測結果,比對預測結果和真實結果的值,得到誤差,通過誤差逐漸向上層調整權重,所以叫BP:誤差的反向傳播演算法。


BP神經網路能夠對非常複雜的目標函式f(x→y)進行擬合,尤其是在影象識別、語音識別等有廣泛的應用,但是當隱含層過多或節點過多時,演算法的計算速度特別慢,且初始可供調整的引數過多,有很多選取的trick,需要依賴過多的人工干預,而最終得到的精度還不是特別理想,因而前幾年熱度逐漸下降。

深度學習。最近稍微關注了下這個,就先淺淺的談談。深度學習實質是多層的神經網路(隱含層一般超過十層),如果採用傳統的BP演算法,需要極其驚人的執行時間,因此大牛們換了一種方法,他們是這麼來解決這個問題的:①逐層通過無監督學習來初始化②最後一層採用監督學習來調整。深度學習具有很優異的特徵學習能力,能夠自動提取資料中的特徵,這幾乎是科學家們一直以來奮鬥的目標,這才叫智慧啊!!最近幾年在智慧車和各種影象識別上得到了廣泛的執行,百度還特地成立了一個深度學習的機構,實在火爆。

二、

非監督學習的聚類演算法我最近也只瞭解了下系統聚類和k-means,因為這兩比較簡單,運用的也特別多。

系統聚類又叫層次聚類。他首先把n個樣本點分成n類,然後計算兩兩之間的距離,將最近的2個樣本點聚成一類,之後再次計算各個類別之間的距離,再合併縮小類別,直到最後3類,2類,1類。分類結果形式如下:


左邊的文字代表了各個樣本,從右往左看,當你想分成2類時,如圖綠線,綠線所接觸到的兩條線便是所分的兩個類別,其下所屬的例項分屬這兩個類別,如倒數3個樣本是一類,上面的所有樣本是一類。當你想分幾類,就在相應的地方進行切割。

系統聚類的分類方法簡單直觀,核心是距離的度量,距離函式的選取決定了最後的分類精度,主要有最短距離法,最長距離法,重心法,平均值法等,多種距離函式的選取讓他具有較靈活的特性。

k-means演算法。圍繞著k箇中心點聚成k個cluster。k-means演算法步驟如下:

①首先隨機選取k個點作為cluster(群)的中心

②分別計算每個樣本點到k個點的距離,分別選取最近的點,聚成k個cluster

③重新計算各個cluster的中心(一般取每個cluster內所有樣本點的平均值)

④重複進行第二到第三步,直到cluster的中心不在變化或者滿足迭代次數。

k-means演算法的難點主要在於k值的選取和cluster中心的初始化。對於k值,如果事先知道該分為幾類,當然最好,不知道的情況下,有點難度,我最近看到的一種做法是《大資料-網際網路大規模資料探勘與分散式處理》這本書裡提到的【參考文獻2】,選取聚類指標來衡量。該思路認為,當類簇的數目接近真實值的時候,指標會發生突變。原來可能上升的很慢,轉瞬間上升的很快,原來可能很慢,突然上升的很快。常用的指標有類簇的直徑和半徑、類簇平均質心的加權平均值等。

對於cluster中心的初始化,

①最常用的是隨機初始化,但是這樣的方法誤差大,聚類結果常常不一樣,輔助的辦法是多迭代幾次取平均值

②先用層次聚類得到結果,根據確定的k值,從每個簇中選取中心點。

③先隨機確定一個點,再確定第二個點:跟第一個點的距離最大,第三個點:距離前兩個點最近距離最大的點,以此類推。

後兩種準確度較高。

三、

EM(Expectationmaximization)思想。EM的核心是極大似然估計,他的基本理論是這樣的,我們在進行觀測的時候,如我們盯著廁所,看看接下來先出來的是女生還是男生。這時候先出來了一個女生,那我們就有理由相信,這是因為女廁所裡面的女生數比較多,所以我們才會優先觀測到女生。這就是極大似然估計。通過這個思想,我們能對引數進行估計,即能夠使得這種情況出現概率最大的引數的估計值,就是我們想要的最準確的引數的值了。根據這種思想,EM的步驟大概如下:(當需要估計兩個引數時)

1、E步:固定引數1,調整引數2直到最優
2、M步:固定引數2,調整引數1直到最優
3、反覆迭代1,2步直到似然函式L(Θ)最大

其實從這裡也可以看到,EM的思想是融合到許多演算法裡的,如k-means,k-means當中隱含的思想就是EM,演算法步驟中的第二步,固定了cluster的中心,選取了最短距離。第三步,固定了最短距離,選取了最優cluster中心。

降維思想。當資料所含的維度(變數)過多時,直接進行聚類或者分類,速度會特別緩慢,生成的模型過於複雜,而且往往容易造成過擬合,即“維度災難”。所以我們得對資料進行降維。

如m維空間中的資料集,包含N個樣本點Xi ,降維演算法的目的就是獲得X的相應低維表示式,,其中d<m,存在一個轉換矩陣。以上思路是對於線性降維演算法,非線性降維無法通過線性變換來得到。

 其實在做迴歸分析的時候,使用逐步迴歸或者方差分析剔除變數的時候,就涉及到了降維的思想。

①主成分分析。通過協方差矩陣進行降維。主成分的思路是對現有維度進行整合,得到各個變數的綜合指標。用例子解釋原理的話主要如下圖,一個二維的資料集,原維度為橫軸和縱軸X1、X2,通過線性變換將座標軸轉換成如圖交叉垂直的兩條虛線軸,

Y1=aX1+bX2

Y2=cX1+dX2



我們看到資料基本都分佈在第一條虛線上,這個時候就可以將這個軸當做第一主成分(新軸)用來擬合數據。第二主成分上的偏差(f方差)較小,可以去掉這個維度。一般來說選取的主成分個數,只要對原維度解釋能達到80%以上就很好了。具體介紹看博文【參考文獻4】。

②因子分析。因子分析用的好像並沒有想象中的廣泛,所以我稍微瞭解了下,思路主要是探尋可觀測變數間存在的不可觀測的隱含變數即公共因子,如數學成績和語文成績,同時高或低,我們知道他其實一定程度上代表了智商,這裡智商就是公共因子。模型構造多個公共因子和一個特殊因子,用來解釋目標值。

主成分和因子分析都消除了相關性對資料的影響,雖然當模型只是用於預測時,變數間的相關性(或多重共線性)對結果影響不大。關於兩者之間的更深入比較可參考【參考文獻5】。目前較常採用的演算法是主成分分析

 注:不能因為PCA可以降維就濫用,使用PCA的目的主要是為了避免資訊重疊,如一個數學成績,多個語文成績變數,這個時候語文成績的佔比就會高很多,從而影響模型的準確性,通過PCA將語文成績降維,就能削減這種影響,並不是相關性高就要使用PCA,可以看出我們關注的實質是相關性後面的資訊重疊。所以應當慎用PCA

最後,目前在機器學習的研究中,對演算法的創新主要是在原有的基礎上,通過結合不同演算法的優點,得到一種更有效的演算法,如結合遺傳演算法的決策樹、結合自助法boot-strap誕生的決策樹隨機森林等。

呼,總算整理完了,大腦要炸了。最後我自己總結一下,大致的流程差不多是這樣:

①到手資料進行清理,去除NA,scale標準化

②當變數過多時,主觀選取變數,或者採用PCA降維

③根據情況選用ML演算法建模

 參考文獻:

[4]  http://www.cnblogs.com/jerrylead/archive/2011/04/18/2020209.html

[5]  http://www.douban.com/note/225942377/

以上圖片皆來自網路,圖片侵刪。

相關推薦

機器學習演算法小結3

將最近接觸的幾個機器學習演算法小結一下,順便理理自己的思路。 近年來在機器學習的研究中,對演算法的創新主要是在原有的基礎上,通過結合不同演算法的優點,得到一種更有效的演算法,如結合遺傳演算法的決策樹、

機器學習十三——機器學習中的矩陣方法3病態矩陣、協同過濾的ALS演算法1

向量的範數(續) 範數可用符號∥x∥λ表示。常用的有: ∥x∥1=|x1|+⋯+|xn| ∥x∥2=x21+⋯+x2n−−−−−−−−−−−√ ∥x∥∞=max(|x1|,…,|xn|) 這裡不做解釋的給出如下示意圖: 其中,0範數表

機器學習-mnist kNN演算法識別python

方以類聚,物以群分                                               ---《周易·繫辭上》測試環境:python3.6、win7 32bit、x86。在上一篇文章中介紹了mnist資料的格式,以及用python如何讀取mnist資料

優達機器學習主成分分析PCA

主成分是由資料中具有最大方差的方向決定的,因為可以最大程度的保留資訊量 我理解相當於降維,也就是將特徵通過降維的方式減少 方差最大化相當於將所有的距離最小化,這個方差和平時理解的方差不太一樣 PCA可以幫助你發現數據中的隱藏特徵,比如說得到總體上有兩個因素推動

機器學習經典演算法總結3——特徵選擇

一、特徵的分類1. 相關特徵:對當前學習任務有用的屬性。2. 無關特徵:對當前學習任務沒有用的屬性。3. 冗餘特徵:包含的資訊能從其他特徵中推演出來,冗餘特徵有時候不起作用,有時候則是有益的,對應了學習任務所需的“中間變數”。二、特徵選擇1. 概念:從給定的特徵集合中選擇出相

Pro Android學習筆記一三七Home Screen Widgets3配置Activity

map onclick widgets info xtra ces extends height appwidget 文章轉載僅僅能用於非商業性質,且不能帶有虛擬貨幣、積分、註冊等附加條件。轉載須註明出處http://blog.csdn.net/flowingfly

從零單排入門機器學習線性回歸linear regression實踐篇

class rom enter instr function ont 線性 gin 向量 線性回歸(linear regression)實踐篇 之前一段時間在coursera看了Andrew ng的機器學習的課程,感覺還不錯,算是入門了。這次打算以該課程的作業

機器學習入門之四機器學習的方法-神經網絡轉載

轉載 bsp 圖像 src nbsp 加速 數值 str 我們   轉自 飛鳥各投林   神經網絡      神經網絡(也稱之為人工神經網絡,ANN)算法是80年代機器學習界非常流行的算法,不過在90年代中途衰落。現在,攜著“深度學習”之勢,神

機器學習邏輯回歸損失函數

梯度 模型 分享圖片 com info 而且 機器學習 邏輯 分類 # # 由於邏輯回歸解決的是分類問題,而且是二分類,因此定義損失函數時也要有兩類   # 1)如果 y = 1(p ≥ 0.5),p 越小,損失函數越大;   # 2)如果 y = 0(p ≤ 0.5),

機器學習評價分類結果實現混淆矩陣、精準率、召回率

test set 目的 mod 二分 參數 nbsp return try 一、實例  1)構造極度偏差的數據 import numpy as np from sklearn import datasets digits = datasets.load_digits

機器學習Kaggle 項目房價先進的回歸技術

版本 xpl 人工 default his 遠的 sys www. 分布 一、項目目錄 (一)數據加載 基礎統計 特征分類 基本分布(scatter) (二)數據分析 正態性檢驗 偏離度分析 (hist | scatter) 峰度分析 (hist | scat

機器學習sklearn演算法引數選擇--網格搜尋

機器學習中很多演算法的引數選擇是個比較繁瑣的問題,人工調參比較費時,好在sklearn給我們提供了網格搜尋引數的方法,其實就是類似暴力破解,先設定一些引數的取值,然後通過gridsearch,去尋找這些引數中表現的最好的引數。 我們依舊使用上一節的泰坦尼克號生存者預測資料集。同樣使用隨機森林演算

Python資料預處理機器學習、人工智慧通用技術1

Python資料預處理:機器學習、人工智慧通用技術 白寧超  2018年12月24日17:28:26  摘要:大資料技術與我們日常生活越來越緊密,要做大資料,首要解決資料問題。原始資料存在大量不完整、不一致、有異常的資料,嚴重影響到資料建模的執行效率,甚至可能導致模型

機器學習AdaBoost演算法及其實現

文章目錄 楔子 演算法描述: adaboost裡的樣本權重和話語權 演算法描述 AdaBoost的實現: 數學基礎(瞭解) 楔子 前面提到boosting演算法為一類演算法,這一類演算法框架分為3步

機器學習迴歸演算法

監督學習指的是有目標變數或預測目標的機器學習方法。迴歸與分類的不同,就在於其目標變數是連續數值型。 線性迴歸 原理 迴歸的目的是預測數值型的目標值。最直接的辦法是依據輸入寫出一個目標值

Java for Web學習筆記三五自定義tag3TLDS和Tag Handler

JSTL的TLD   這是JSTL採用的方式。TLD(Tag Library Descriptor)描述tag和function,以及具體執行的java程式碼tag handler。Tag Handler是javax.servlet.jsp.tagext.Tag或javax.servlet.jsp.tage

Unity3D學習筆記三十六Shader著色器3- 光照

像素 環境 斜率 偏移 target off 分辨 屬性 思路 光照模型:用數學的方法模擬現實世界中的光照效果。 場景中模型身上的光反射到相機中的光線: 1.漫反射:產生明暗效果 2.高光反射:產生鏡面反射,物體中有最亮且比較耀眼的一部分 3.自發光: 4.環境光:

機器學習KNN演算法(MATLAB實現)

   K-近鄰演算法的思想如下:首先,計算新樣本與訓練樣本之間的距離,找到距離最近的K 個鄰居;然後,根據這些鄰居所屬的類別來判定新樣本的類別,如果它們都屬於同一個類別,那麼新樣本也屬於這個類;否則,對每個後選類別進行評分,按照某種規則確定新樣本的類別。(統計出現的頻率)

機器學習整合演算法

整合演算法往往被稱為三個臭皮匠,賽過一個諸葛亮,整合演算法的起源是來自與PAC中的強可學習和弱可學習,如果類別決策邊界可以被一個多項式表示,並且分類正確率高,那麼就是強學習的,如果分類正確率不高,僅僅只是比隨機猜測好一點,那麼就是弱可學習,後來有人證明強可學習和弱可學習是等價的,那麼弱可學習就可以提升為強可學

機器學習---支持向量機SVM

行處理 off 距離 又是 分類器 libs 自己的 cos 一個 非常久之前就學了SVM,總認為不就是找到中間那條線嘛,但有些地方模棱兩可,真正編程的時候又是一團漿糊。參數任意試驗,毫無章法。既然又又一次學到了這一章節,那就要把之前沒有搞懂的地方都整明確,嗯~