1. 程式人生 > >機器學習常用演算法優點及缺點總結

機器學習常用演算法優點及缺點總結

決策樹

一、  決策樹優點

1、決策樹易於理解和解釋,可以視覺化分析,容易提取出規則。

2、可以同時處理標稱型和數值型資料。

3、測試資料集時,執行速度比較快。

4、決策樹可以很好的擴充套件到大型資料庫中,同時它的大小獨立於資料庫大小。

二、決策樹缺點

1、對缺失資料處理比較困難。

2、容易出現過擬合問題。

3、忽略資料集中屬性的相互關聯。

4、ID3演算法計算資訊增益時結果偏向數值比較多的特徵。

三、改進措施

1、對決策樹進行剪枝。可以採用交叉驗證法和加入正則化的方法。

2、使用基於決策樹的combination演算法,如bagging演算法,randomforest演算法,可以解決過擬合的問題

三、應用領域

企業管理實踐,企業投資決策,由於決策樹很好的分析能力,在決策過程應用較多。

KNN演算法

一、KNN演算法的優點

1、KNN是一種線上技術,新資料可以直接加入資料集而不必進行重新訓練

2、KNN理論簡單,容易實現

二、KNN演算法的缺點

1、對於樣本容量大的資料集計算量比較大。

2、樣本不平衡時,預測偏差比較大。如:某一類的樣本比較少,而其它類樣本比較多。

3、KNN每一次分類都會重新進行一次全域性運算。

4、k值大小的選擇。

三、KNN演算法應用領域

文字分類、模式識別、聚類分析,多分類領域

支援向量機(SVM)

一、  SVM優點

1、解決小樣本下機器學習問題。

2、解決非線性問題。

3、無區域性極小值問題。(相對於神經網路等演算法)

4、可以很好的處理高維資料集。

5、泛化能力比較強。

二、SVM缺點

1、對於核函式的高維對映解釋力不強,尤其是徑向基函式。

2、對缺失資料敏感。

三、SVM應用領域

文字分類、影象識別、主要二分類領域

AdaBoost演算法

一、  AdaBoost演算法優點

1、很好的利用了弱分類器進行級聯。

2、可以將不同的分類演算法作為弱分類器。

3、AdaBoost具有很高的精度。

4、相對於bagging演算法和Random Forest演算法,AdaBoost充分考慮的每個分類器的權重。

二、Adaboost演算法缺點

1、AdaBoost迭代次數也就是弱分類器數目不太好設定,可以使用交叉驗證來進行確定。

2、資料不平衡導致分類精度下降。

3、訓練比較耗時,每次重新選擇當前分類器最好切分點。

三、AdaBoost應用領域

模式識別、計算機視覺領域,用於二分類和多分類場景

樸素貝葉斯演算法

一、  樸素貝葉斯演算法優點

1、對大數量訓練和查詢時具有較高的速度。即使使用超大規模的訓練集,針對每個專案通常也只會有相對較少的特徵數,並且對專案的訓練和分類也僅僅是特徵概率的數學運算而已。

2、支援增量式運算。即可以實時的對新增的樣本進行訓練。

3、樸素貝葉斯對結果解釋容易理解。

二、樸素貝葉斯缺點

1、由於使用了樣本屬性獨立性的假設,所以如果樣本屬性有關聯時其效果不好。

三、樸素貝葉斯應用領域

文字分類、欺詐檢測中使用較多

Logistic迴歸演算法

一、logistic迴歸優點

1、計算代價不高,易於理解和實現

二、logistic迴歸缺點

1、容易產生欠擬合。

2、分類精度不高。

三、logistic迴歸應用領域

用於二分類領域,可以得出概率值,適用於根據分類概率排名的領域,如搜尋排名等。

Logistic迴歸的擴充套件softmax可以應用於多分類領域,如手寫字識別等。

人工神經網路

一、  神經網路優點

1、分類準確度高,學習能力極強。

2、對噪聲資料魯棒性和容錯性較強。

3、有聯想能力,能逼近任意非線性關係。

二、神經網路缺點

1、神經網路引數較多,權值和閾值。

2、黑盒過程,不能觀察中間結果。

3、學習過程比較長,有可能陷入區域性極小值。

三、人工神經網路應用領域

目前深度神經網路已經應用與計算機視覺,自然語言處理,語音識別等領域並取得很好的效果。

 ===============================================================================================

原文:http://suanfazu.com/t/qian-tan-wo-dui-ji-qi-xue-xi-de-dian-li-jie/305

機器學習方法非常多,也很成熟。下面我挑幾個說。

  1. 首先是SVM。因為我做的文字處理比較多,所以比較熟悉SVM。SVM也叫支援向量機,其把資料對映到多維空間中以點的形式存在,然後找到能夠分類的最優超平面,最後根據這個平面來分類。SVM能對訓練集之外的資料做很好的預測、泛化錯誤率低、計算開銷小、結果易解釋,但其對引數調節和核函式的引數過於敏感。個人感覺SVM是二分類的最好的方法,但也僅限於二分類。如果要使用SVM進行多分類,也是在向量空間中實現多次二分類。
    SVM有一個核心函式SMO,也就是序列最小最優化演算法。SMO基本是最快的二次規劃優化演算法,其核心就是找到最優引數α,計算超平面後進行分類。SMO方法可以將大優化問題分解為多個小優化問題求解,大大簡化求解過程。某些條件下,把原始的約束問題通過拉格朗日函式轉化為無約束問題,如果原始問題求解棘手,在滿足KKT的條件下用求解對偶問題來代替求解原始問題,使得問題求解更加容易。 SVM還有一個重要函式是核函式。核函式的主要作用是將資料從低位空間對映到高維空間。詳細的內容我就不說了,因為內容實在太多了。總之,核函式可以很好的解決資料的非線性問題,而無需考慮對映過程。

  2. 第二個是KNN。KNN將測試集的資料特徵與訓練集的資料進行特徵比較,然後演算法提取樣本集中特徵最近鄰資料的分類標籤,即KNN演算法採用測量不同特徵值之間的距離的方法進行分類。KNN的思路很簡單,就是計算測試資料與類別中心的距離。KNN具有精度高、對異常值不敏感、無資料輸入假定、簡單有效的特點,但其缺點也很明顯,計算複雜度太高。要分類一個數據,卻要計算所有資料,這在大資料的環境下是很可怕的事情。而且,當類別存在範圍重疊時,KNN分類的精度也不太高。所以,KNN比較適合小量資料且精度要求不高的資料。
    KNN有兩個影響分類結果較大的函式,一個是資料歸一化,一個是距離計算。如果資料不進行歸一化,當多個特徵的值域差別很大的時候,最終結果就會受到較大影響;第二個是距離計算。這應該算是KNN的核心了。目前用的最多的距離計算公式是歐幾里得距離,也就是我們常用的向量距離計算方法。
    個人感覺,KNN最大的作用是可以隨時間序列計算,即樣本不能一次性獲取只能隨著時間一個一個得到的時候,KNN能發揮它的價值。至於其他的特點,它能做的,很多方法都能做;其他能做的它卻做不了。

  3. 第三個就是Naive Bayes了。Naive Bayes簡稱NB(牛X),為啥它牛X呢,因為它是基於Bayes概率的一種分類方法。貝葉斯方法可以追溯到幾百年前,具有深厚的概率學基礎,可信度非常高。Naive Baye中文名叫樸素貝葉斯,為啥叫“樸素”呢?因為其基於一個給定假設:給定目標值時屬性之間相互條件獨立。比如我說“我喜歡你”,該假設就會假定“我”、“喜歡”、“你”三者之間毫無關聯。仔細想想,這幾乎是不可能的。馬克思告訴我們:事物之間是有聯絡的。同一個事物的屬性之間就更有聯絡了。所以,單純的使用NB演算法效率並不高,大都是對該方法進行了一定的改進,以便適應資料的需求。
    NB演算法在文字分類中用的非常多,因為文字類別主要取決於關鍵詞,基於詞頻的文字分類正中NB的下懷。但由於前面提到的假設,該方法對中文的分類效果不好,因為中文顧左右而言他的情況太多,但對直來直去的老美的語言,效果良好。至於核心演算法嘛,主要思想全在貝葉斯里面了,沒啥可說的。

  4. 第四個是迴歸。迴歸有很多,Logistic迴歸啊、嶺迴歸啊什麼的,根據不同的需求可以分出很多種。這裡我主要說說Logistic迴歸。為啥呢?因為Logistic迴歸主要是用來分類的,而非預測。迴歸就是將一些資料點用一條直線對這些點進行擬合。而Logistic迴歸是指根據現有資料對分類邊界線建立迴歸公式,以此進行分類。該方法計算代價不高,易於理解和實現,而且大部分時間用於訓練,訓練完成後分類很快;但它容易欠擬合,分類精度也不高。主要原因就是Logistic主要是線性擬合,但現實中很多事物都不滿足線性的。即便有二次擬合、三次擬合等曲線擬合,也只能滿足小部分資料,而無法適應絕大多數資料,所以迴歸方法本身就具有侷限性。但為什麼還要在這裡提出來呢?因為迴歸方法雖然大多數都不合適,但一旦合適,效果就非常好。
    Logistic迴歸其實是基於一種曲線的,“線”這種連續的表示方法有一個很大的問題,就是在表示跳變資料時會產生“階躍”的現象,說白了就是很難表示資料的突然轉折。所以用Logistic迴歸必須使用一個稱為“海維塞德階躍函式”的Sigmoid函式來表示跳變。通過Sigmoid就可以得到分類的結果。
    為了優化Logistic迴歸引數,需要使用一種“梯度上升法”的優化方法。該方法的核心是,只要沿著函式的梯度方向搜尋,就可以找到函式的最佳引數。但該方法在每次更新迴歸係數時都需要遍歷整個資料集,對於大資料效果還不理想。所以還需要一個“隨機梯度上升演算法”對其進行改進。該方法一次僅用一個樣本點來更新迴歸係數,所以效率要高得多。

  5. 第五個是決策樹。據我瞭解,決策樹是最簡單,也是曾經最常用的分類方法了。決策樹基於樹理論實現資料分類,個人感覺就是資料結構中的B+樹。決策樹是一個預測模型,他代表的是物件屬性與物件值之間的一種對映關係。決策樹計算複雜度不高、輸出結果易於理解、對中間值缺失不敏感、可以處理不相關特徵資料。其比KNN好的是可以瞭解資料的內在含義。但其缺點是容易產生過度匹配的問題,且構建很耗時。決策樹還有一個問題就是,如果不繪製樹結構,分類細節很難明白。所以,生成決策樹,然後再繪製決策樹,最後再分類,才能更好的瞭解資料的分類過程。
    決策樹的核心樹的分裂。到底該選擇什麼來決定樹的分叉是決策樹構建的基礎。最好的方法是利用資訊熵實現。熵這個概念很頭疼,很容易讓人迷糊,簡單來說就是資訊的複雜程度。資訊越多,熵越高。所以決策樹的核心是通過計算資訊熵劃分資料集。

  6. 我還得說一個比較特殊的分類方法:AdaBoost。AdaBoost是boosting演算法的代表分類器。boosting基於元演算法(整合演算法)。即考慮其他方法的結果作為參考意見,也就是對其他演算法進行組合的一種方式。說白了,就是在一個數據集上的隨機資料使用一個分類訓練多次,每次對分類正確的資料賦權值較小,同時增大分類錯誤的資料的權重,如此反覆迭代,直到達到所需的要求。AdaBoost泛化錯誤率低、易編碼、可以應用在大部分分類器上、無引數調整,但對離群點敏感。該方法其實並不是一個獨立的方法,而是必須基於元方法進行效率提升。個人認為,所謂的“AdaBoost是最好的分類方法”這句話是錯誤的,應該是“AdaBoost是比較好的優化方法”才對。

好了,說了這麼多了,我有點暈了,還有一些方法過幾天再寫。總的來說,機器學習方法是利用現有資料作為經驗讓機器學習,以便指導以後再次碰到的決策。目前來說,對於大資料分類,還是要藉助分散式處理技術和雲技術才有可能完成,但一旦訓練成功,分類的效率還是很可觀的,這就好比人年齡越大看待問題越精準的道理是一樣的。這八個月裡,從最初的理解到一步步實現;從需求的邏輯推斷到實現的方法選擇,每天都是辛苦的,但每天也都是緊張刺激的。我每天都在想學了這個以後可以實現什麼樣的分類,其實想想都是讓人興奮的。當初,我逃避做程式設計師,主要原因就是我不喜歡做已經知道結果的事情,因為那樣的工作沒有什麼期盼感;而現在,我可以利用資料分析得到我想象不到的事情,這不僅滿足了我的好奇感,也讓我能在工作中樂在其中。也許,我距離社會的技術需求還有很遠的距離,但我對自己充滿信心,因為,我不感到枯燥,不感到彷徨,雖然有些力不從心,但態度堅定。

===================================================

http://blog.csdn.net/vola9527/article/details/43347747

簡述機器學習十大演算法的每個演算法的核心思想、工作原理、適用情況及優缺點等。

1)C4.5演算法:

ID3演算法是以資訊理論為基礎,以資訊熵和資訊增益度為衡量標準,從而實現對資料的歸納分類。ID3演算法計算每個屬性的資訊增益,並選取具有最高增益的屬性作為給定的測試屬性。

C4.5演算法核心思想是ID3演算法,是ID3演算法的改進,改進方面有:

1)用資訊增益率來選擇屬性,克服了用資訊增益選擇屬性時偏向選擇取值多的屬性的不足;

2)在樹構造過程中進行剪枝

3)能處理非離散的資料

4)能處理不完整的資料

 C4.5演算法優點:產生的分類規則易於理解,準確率較高。

缺點:

1)在構造樹的過程中,需要對資料集進行多次的順序掃描和排序,因而導致演算法的低效。

2)C4.5只適合於能夠駐留於記憶體的資料集,當訓練集大得無法在記憶體容納時程式無法執行。

2)K means 演算法

是一個簡單的聚類演算法,把n的物件根據他們的屬性分為k個分割,k< n。 演算法的核心就是要優化失真函式J,使其收斂到區域性最小值但不是全域性最小值。

其中N為樣本數,K是簇數,rnk b表示n屬於第k個簇,uk 是第k箇中心點的值。然後求出最優的uk

優點:演算法速度很快

缺點是,分組的數目k是一個輸入引數,不合適的k可能返回較差的結果。

3)樸素貝葉斯演算法:

樸素貝葉斯法是基於貝葉斯定理與特徵條件獨立假設的分類方法。演算法的基礎是概率問題,分類原理是通過某物件的先驗概率,利用貝葉斯公式計算出其後驗概率,即該物件屬於某一類的概率,選擇具有最大後驗概率的類作為該物件所屬的類。樸素貝葉斯假設是約束性很強的假設,假設特徵條件獨立,但樸素貝葉斯演算法簡單,快速,具有較小的出錯率。

在樸素貝葉斯的應用中,主要研究了電子郵件過濾以及文字分類研究。

4)K最近鄰分類演算法(KNN)

分類思想比較簡單,從訓練樣本中找出K個與其最相近的樣本,然後看這k個樣本中哪個類別的樣本多,則待判定的值(或說抽樣)就屬於這個類別。

缺點:

1)K值需要預先設定,而不能自適應

2)當樣本不平衡時,如一個類的樣本容量很大,而其他類樣本容量很小時,有可能導致當輸入一個新樣本時,該樣本的K個鄰居中大容量類的樣本佔多數。

該演算法適用於對樣本容量比較大的類域進行自動分類。

5)EM最大期望演算法

EM演算法是基於模型的聚類方法,是在概率模型中尋找引數最大似然估計的演算法,其中概率模型依賴於無法觀測的隱藏變數。E步估計隱含變數,M步估計其他引數,交替將極值推向最大。

EM演算法比K-means演算法計算複雜,收斂也較慢,不適於大規模資料集和高維資料,但比K-means演算法計算結果穩定、準確。EM經常用在機器學習和計算機視覺的資料集聚(Data Clustering)領域。

6)PageRank演算法

是google的頁面排序演算法,是基於從許多優質的網頁連結過來的網頁,必定還是優質網頁的迴歸關係,來判定所有網頁的重要性。(也就是說,一個人有著越多牛X朋友的人,他是牛X的概率就越大。)

優點:

完全獨立於查詢,只依賴於網頁連結結構,可以離線計算。

缺點:

1)PageRank演算法忽略了網頁搜尋的時效性。

2)舊網頁排序很高,存在時間長,積累了大量的in-links,擁有最新資訊的新網頁排名卻很低,因為它們幾乎沒有in-links。

7)AdaBoost

Adaboost是一種迭代演算法,其核心思想是針對同一個訓練集訓練不同的分類器(弱分類器),然後把這些弱分類器集合起來,構成一個更強的最終分類器(強分類器)。其演算法本身是通過改變資料分佈來實現的,它根據每次訓練集之中每個樣本的分類是否正確,以及上次的總體分類的準確率,來確定每個樣本的權值。將修改過權值的新資料集送給下層分類器進行訓練,最後將每次訓練得到的分類器最後融合起來,作為最後的決策分類器。

整個過程如下所示:
1. 先通過對N個訓練樣本的學習得到第一個弱分類器;
2. 將分錯的樣本和其他的新資料一起構成一個新的N個的訓練樣本,通過對這個樣本的學習得到第二個弱分類器;
3. 將和都分錯了的樣本加上其他的新樣本構成另一個新的N個的訓練樣本,通過對這個樣本的學習得到第三個弱分類器;
4. 如此反覆,最終得到經過提升的強分類器。

目前AdaBoost演算法廣泛的應用於人臉檢測、目標識別等領域。

8)Apriori演算法

Apriori演算法是一種挖掘關聯規則的演算法,用於挖掘其內含的、未知的卻又實際存在的資料關係,其核心是基於兩階段頻集思想的遞推演算法 。

Apriori演算法分為兩個階段:

1)尋找頻繁項集

2)由頻繁項集找關聯規則

演算法缺點:

1) 在每一步產生侯選專案集時迴圈產生的組合過多,沒有排除不應該參與組合的元素;

2) 每次計算項集的支援度時,都對資料庫中    的全部記錄進行了一遍掃描比較,需要很大的I/O負載。

9)SVM支援向量機

支援向量機是一種基於分類邊界的方法。其基本原理是(以二維資料為例):如果訓練資料分佈在二維平面上的點,它們按照其分類聚集在不同的區域。基於分類邊界的分類演算法的目標是,通過訓練,找到這些分類之間的邊界(直線的――稱為線性劃分,曲線的――稱為非線性劃分)。對於多維資料(如N維),可以將它們視為N維空間中的點,而分類邊界就是N維空間中的面,稱為超面(超面比N維空間少一維)。線性分類器使用超平面型別的邊界,非線性分類器使用超曲面。

支援向量機的原理是將低維空間的點對映到高維空間,使它們成為線性可分,再使用線性劃分的原理來判斷分類邊界。在高維空間中是一種線性劃分,而在原有的資料空間中,是一種非線性劃分。

SVM在解決小樣本、非線性及高維模式識別問題中表現出許多特有的優勢,並能夠推廣應用到函式擬合等其他機器學習問題中。

10)CART分類與迴歸樹

是一種決策樹分類方法,採用基於最小距離的基尼指數估計函式,用來決定由該子數

據集生成的決策樹的拓展形。如果目標變數是標稱的,稱為分類樹;如果目標變數是連續的,稱為迴歸樹。分類樹是使用樹結構演算法將資料分成離散類的方法。

優點

1)非常靈活,可以允許有部分錯分成本,還可指定先驗概率分佈,可使用自動的成本複雜性剪枝來得到歸納性更強的樹。

2)在面對諸如存在缺失值、變數數多等問題時CART 顯得非常穩健。