轉自:http://www.cnblogs.com/zhizhan/p/4432943.htmlhtml
一、決策樹易於理解和解釋,能夠可視化分析,容易提取出規則。程序員
二、能夠同時處理標稱型和數值型數據。算法
三、測試數據集時,運行速度比較快。數據庫
四、決策樹能夠很好的擴展到大型數據庫中,同時它的大小獨立於數據庫大小。網絡
一、對缺失數據處理比較困難。數據結構
二、容易出現過擬合問題。dom
三、忽略數據集中屬性的相互關聯。機器學習
四、ID3算法計算信息增益時結果偏向數值比較多的特徵。分佈式
一、對決策樹進行剪枝。能夠採用交叉驗證法和加入正則化的方法。函數
二、使用基於決策樹的combination算法,如bagging算法,randomforest算法,能夠解決過擬合的問題
企業管理實踐,企業投資決策,因爲決策樹很好的分析能力,在決策過程應用較多。
一、KNN是一種在線技術,新數據能夠直接加入數據集而沒必要進行從新訓練
二、KNN理論簡單,容易實現
一、對於樣本容量大的數據集計算量比較大。
二、樣本不平衡時,預測誤差比較大。如:某一類的樣本比較少,而其它類樣本比較多。
三、KNN每一次分類都會從新進行一次全局運算。
四、k值大小的選擇。
文本分類、模式識別、聚類分析,多分類領域
一、解決小樣本下機器學習問題。
二、解決非線性問題。
三、無局部極小值問題。(相對於神經網絡等算法)
四、能夠很好的處理高維數據集。
五、泛化能力比較強。
一、對於核函數的高維映射解釋力不強,尤爲是徑向基函數。
二、對缺失數據敏感。
文本分類、圖像識別、主要二分類領域
一、很好的利用了弱分類器進行級聯。
二、能夠將不一樣的分類算法做爲弱分類器。
三、AdaBoost具備很高的精度。
四、相對於bagging算法和Random Forest算法,AdaBoost充分考慮的每一個分類器的權重。
一、AdaBoost迭代次數也就是弱分類器數目不太好設定,可使用交叉驗證來進行肯定。
二、數據不平衡致使分類精度降低。
三、訓練比較耗時,每次從新選擇當前分類器最好切分點。
模式識別、計算機視覺領域,用於二分類和多分類場景
一、對大數量訓練和查詢時具備較高的速度。即便使用超大規模的訓練集,針對每一個項目一般也只會有相對較少的特徵數,而且對項目的訓練和分類也僅僅是特徵機率的數學運算而已。
二、支持增量式運算。便可以實時的對新增的樣本進行訓練。
三、樸素貝葉斯對結果解釋容易理解。
一、因爲使用了樣本屬性獨立性的假設,因此若是樣本屬性有關聯時其效果很差。
文本分類、欺詐檢測中使用較多
一、計算代價不高,易於理解和實現
一、容易產生欠擬合。
二、分類精度不高。
用於二分類領域,能夠得出機率值,適用於根據分類機率排名的領域,如搜索排名等。
Logistic迴歸的擴展softmax能夠應用於多分類領域,如手寫字識別等。
一、分類準確度高,學習能力極強。
二、對噪聲數據魯棒性和容錯性較強。
三、有聯想能力,能逼近任意非線性關係。
一、神經網絡參數較多,權值和閾值。
二、黑盒過程,不能觀察中間結果。
三、學習過程比較長,有可能陷入局部極小值。
目前深度神經網絡已經應用與計算機視覺,天然語言處理,語音識別等領域並取得很好的效果。
===============================================================================================
原文:http://suanfazu.com/t/qian-tan-wo-dui-ji-qi-xue-xi-de-dian-li-jie/305
機器學習方法很是多,也很成熟。下面我挑幾個說。
首先是SVM。由於我作的文本處理比較多,因此比較熟悉SVM。SVM也叫支持向量機,其把數據映射到多維空間中以點的形式存在,而後找到可以分類的最優超平面,最後根據這個平面來分類。SVM能對訓練集以外的數據作很好的預測、泛化錯誤率低、計算開銷小、結果易解釋,但其對參數調節和核函數的參數過於敏感。我的感受SVM是二分類的最好的方法,但也僅限於二分類。若是要使用SVM進行多分類,也是在向量空間中實現屢次二分類。
SVM有一個核心函數SMO,也就是序列最小最優化算法。SMO基本是最快的二次規劃優化算法,其核心就是找到最優參數α,計算超平面後進行分類。SMO方法能夠將大優化問題分解爲多個小優化問題求解,大大簡化求解過程。某些條件下,把原始的約束問題經過拉格朗日函數轉化爲無約束問題,若是原始問題求解棘手,在知足KKT的條件下用求解對偶問題來代替求解原始問題,使得問題求解更加容易。 SVM還有一個重要函數是核函數。核函數的主要做用是將數據從低位空間映射到高維空間。詳細的內容我就不說了,由於內容實在太多了。總之,核函數能夠很好的解決數據的非線性問題,而無需考慮映射過程。
第二個是KNN。KNN將測試集的數據特徵與訓練集的數據進行特徵比較,而後算法提取樣本集中特徵最近鄰數據的分類標籤,即KNN算法採用測量不一樣特徵值之間的距離的方法進行分類。KNN的思路很簡單,就是計算測試數據與類別中心的距離。KNN具備精度高、對異常值不敏感、無數據輸入假定、簡單有效的特色,但其缺點也很明顯,計算複雜度過高。要分類一個數據,卻要計算全部數據,這在大數據的環境下是很可怕的事情。並且,當類別存在範圍重疊時,KNN分類的精度也不過高。因此,KNN比較適合小量數據且精度要求不高的數據。
KNN有兩個影響分類結果較大的函數,一個是數據歸一化,一個是距離計算。若是數據不進行歸一化,當多個特徵的值域差異很大的時候,最終結果就會受到較大影響;第二個是距離計算。這應該算是KNN的核心了。目前用的最多的距離計算公式是歐幾里得距離,也就是咱們經常使用的向量距離計算方法。
我的感受,KNN最大的做用是能夠隨時間序列計算,即樣本不能一次性獲取只能隨着時間一個一個獲得的時候,KNN能發揮它的價值。至於其餘的特色,它能作的,不少方法都能作;其餘能作的它卻作不了。
第三個就是Naive Bayes了。Naive Bayes簡稱NB(牛X),爲啥它牛X呢,由於它是基於Bayes機率的一種分類方法。貝葉斯方法能夠追溯到幾百年前,具備深厚的機率學基礎,可信度很是高。Naive Baye中文名叫樸素貝葉斯,爲啥叫「樸素」呢?由於其基於一個給定假設:給定目標值時屬性之間相互條件獨立。好比我說「我喜歡你」,該假設就會假定「我」、「喜歡」、「你」三者之間毫無關聯。仔細想一想,這幾乎是不可能的。馬克思告訴咱們:事物之間是有聯繫的。同一個事物的屬性之間就更有聯繫了。因此,單純的使用NB算法效率並不高,大都是對該方法進行了必定的改進,以便適應數據的需求。
NB算法在文本分類中用的很是多,由於文本類別主要取決於關鍵詞,基於詞頻的文本分類正中NB的下懷。但因爲前面提到的假設,該方法對中文的分類效果很差,由於中文顧左右而言他的狀況太多,但對直來直去的老美的語言,效果良好。至於核心算法嘛,主要思想全在貝葉斯里面了,沒啥可說的。
第四個是迴歸。迴歸有不少,Logistic迴歸啊、嶺迴歸啊什麼的,根據不一樣的需求能夠分出不少種。這裏我主要說說Logistic迴歸。爲啥呢?由於Logistic迴歸主要是用來分類的,而非預測。迴歸就是將一些數據點用一條直線對這些點進行擬合。而Logistic迴歸是指根據現有數據對分類邊界線創建迴歸公式,以此進行分類。該方法計算代價不高,易於理解和實現,並且大部分時間用於訓練,訓練完成後分類很快;但它容易欠擬合,分類精度也不高。主要緣由就是Logistic主要是線性擬合,但現實中不少事物都不知足線性的。即使有二次擬合、三次擬合等曲線擬合,也只能知足小部分數據,而沒法適應絕大多數數據,因此迴歸方法自己就具備侷限性。但爲何還要在這裏提出來呢?由於迴歸方法雖然大多數都不合適,但一旦合適,效果就很是好。
Logistic迴歸實際上是基於一種曲線的,「線」這種連續的表示方法有一個很大的問題,就是在表示跳變數據時會產生「階躍」的現象,說白了就是很難表示數據的忽然轉折。因此用Logistic迴歸必須使用一個稱爲「海維塞德階躍函數」的Sigmoid函數來表示跳變。經過Sigmoid就能夠獲得分類的結果。
爲了優化Logistic迴歸參數,須要使用一種「梯度上升法」的優化方法。該方法的核心是,只要沿着函數的梯度方向搜尋,就能夠找到函數的最佳參數。但該方法在每次更新迴歸係數時都須要遍歷整個數據集,對於大數據效果還不理想。因此還須要一個「隨機梯度上升算法」對其進行改進。該方法一次僅用一個樣本點來更新迴歸係數,因此效率要高得多。
第五個是決策樹。據我瞭解,決策樹是最簡單,也是曾經最經常使用的分類方法了。決策樹基於樹理論實現數據分類,我的感受就是數據結構中的B+樹。決策樹是一個預測模型,他表明的是對象屬性與對象值之間的一種映射關係。決策樹計算複雜度不高、輸出結果易於理解、對中間值缺失不敏感、能夠處理不相關特徵數據。其比KNN好的是能夠了解數據的內在含義。但其缺點是容易產生過分匹配的問題,且構建很耗時。決策樹還有一個問題就是,若是不繪製樹結構,分類細節很難明白。因此,生成決策樹,而後再繪製決策樹,最後再分類,才能更好的瞭解數據的分類過程。
決策樹的核心樹的分裂。到底該選擇什麼來決定樹的分叉是決策樹構建的基礎。最好的方法是利用信息熵實現。熵這個概念很頭疼,很容易讓人迷糊,簡單來講就是信息的複雜程度。信息越多,熵越高。因此決策樹的核心是經過計算信息熵劃分數據集。
我還得說一個比較特殊的分類方法: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個鄰居中大容量類的樣本佔多數。
該算法在分類時有個重要的不足是,當樣本不平衡時,即:一個類的樣本容量很大,而其餘類樣本數量很小時,頗有可能致使當輸入一個未知樣本時,該樣本的K個鄰居中大數量類的樣本佔多數。 可是這類樣本並不接近目標樣本,而數量小的這類樣本很靠近目標樣本。這個時候,咱們有理由認爲該位置樣本屬於數量小的樣本所屬的一類,可是,KNN卻不關心這個問題,它只關心哪類樣本的數量最多,而不去把距離遠近考慮在內,所以,咱們能夠採用權值的方法來改進。和該樣本距離小的鄰居權值大,和該樣本距離大的鄰居權值則相對較小,由此,將距離遠近的因素也考慮在內,避免因一個樣本過大致使誤判的狀況
該算法適用於對樣本容量比較大的類域進行自動分類。
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 顯得很是穩健。