1. 程式人生 > >【機器學習】帶你3分鐘看完《機器學習實戰》總結篇

【機器學習】帶你3分鐘看完《機器學習實戰》總結篇

決策樹易於理解和解釋,可以視覺化分析,容易提取出規則; 計算複雜度不高,對中間值的缺失不敏感,可以處理不相關特徵資料; 測試資料集時,執行速度比較快; 決策樹可以很好的擴充套件到大型資料庫中,同時它的大小獨立於資料庫大小。一種二值決策分類“機”,泛化錯誤率低和較好的推廣性使其被認為是監督學習中最好的定式演算法。Boosting 中最流行的的一個演算法是 AdaBoost,以弱學習器作為基分類器,並且輸入資料,使其通過權重向量進行加權。Apriori 演算法從單元素項集開始,通過組合滿足最小支援度要求的項集來形成更大的集合。下一章的 FPgrowth 演算法只需對資料庫進行兩次遍歷,能夠顯著加快頻繁項集的發現速度。應用領域: 目前深度神經網路已經應用與計算機視覺,自然語言處理,語音識別等領域並取得很好的效果。

前些天完成了《機器學習實戰》這本書的學習,也利用 Python3 實現了各個章節的程式碼,對傳統的機器學習方法有了更進一步的瞭解,這裡做一個總結。

程式碼傳送門:
https://github.com/xyxxmb/Machine-Learning-In-Action

目錄

第一部分:分類

【Ch1】機器學習基礎
【Ch2】k - 近鄰演算法
【Ch3】決策樹
【Ch4】基於概率論的分類方法:樸素貝葉斯
【Ch5】Logistic 迴歸
【Ch6】支援向量機
【Ch7】利用 AdaBoost 元演算法提高分類效能

第二部分:利用迴歸預測數值型資料

【Ch8】預測數值型資料:迴歸
【Ch9】樹迴歸

第三部分:無監督學習

【Ch10】利用 K-均值聚類演算法對未標註資料分組
【Ch11】基於 Apriori 演算法進行關聯分析
【Ch12】使用 FP-growth 演算法來高效發現頻繁項集

第四部分:其他工具

【Ch13】利用 PCA 來簡化資料
【Ch14】利用 SVD 簡化資料
【Ch15】大資料與 MapReduce

補充:

【神經網路】

Ch1:機器學習基礎

監督學習(分類、迴歸);無監督學習(聚類、密度估計)


Ch2:k - 近鄰演算法
簡單來說,k - 近鄰演算法採用測量不同特徵值之間的距離的方法進行分類。它是一種基於例項的學習,使用演算法時必須有接近實際資料的訓練樣本資料。

優點:

  1. 精度高,對異常值不敏感,無資料輸入假定;

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

  3. KNN 理論簡單,容易實現。

缺點:

  1. 對於樣本容量大的資料集計算量比較大,即計算複雜度高;

  2. 必須儲存全部資料集,即空間複雜度高;

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

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

  5. K 值大小的選擇;

  6. KNN 無法給出基礎結構資訊,無法知曉平均例項樣本與典型例項樣本具有什麼特徵,即無法給出資料的內在含義。

適用資料型別:數值型和標稱型。

應用領域:文字分類;模式識別;聚類分析;多分類領域。

使用方法:


Ch3:決策樹

決策樹分類器就像帶有終止塊的流程圖,終止塊表示分類結果。開始處理資料時,首先需要測量集合中資料的不一致性,也就是熵(反映資料的無序程度),然後尋找最優方案劃分資料集(選取資訊增益(熵)最大的特徵),直到資料集中的所有資料屬於同一分類。構建決策樹時,採用遞迴的方法將資料集轉化為決策樹。

優點:

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

  2. 計算複雜度不高,對中間值的缺失不敏感,可以處理不相關特徵資料;

  3. 測試資料集時,執行速度比較快;

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

缺點:

  1. 容易出現過擬合問題。

  2. 對缺失資料處理比較困難。

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

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

適用資料型別:標稱型和數值型。

改進措施(主要解決過擬合問題):

  1. 對決策樹進行剪枝,可以採用交叉驗證法和正則化的方法;

  2. 使用基於決策樹的 combination 演算法,如 Bagging,Random Forest 等。

決策樹流行演算法:ID3、C4.5、CART

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

使用方法:

總結:Ch2 和 Ch3 都是確定的分類演算法,資料例項最終會被明確的劃分到某個分類當中。

Ch4:基於概率論的分類方法:樸素貝葉斯

使用概率,提供一種利用已知值來估計未知概率的方法。通過特徵間的獨立性假設(樸素一詞的由來),降低對資料量的要求。

優點:

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

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

  3. 樸素貝葉斯對結果解釋容易理解;

  4. 對資料較少的情況下仍然有效;

  5. 可以處理多類別問題。

缺點:

  1. 因為要將文字轉化為詞向量(文件中的每個詞在詞庫中只表示出現與不出現,即 [0,1,1,0,0,1],如果要表示一個詞出現了多次,需要用到詞袋模型,即 [0,1,3,2,0,0,2]),因此對於輸入資料的準備方式較為敏感;

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

適用資料型別:標稱型。

改進措施:

  1. 下溢位問題:對概率取對數;

  2. 詞袋模型在解決文件分類問題上比詞集模型好;

  3. 移除提用詞(對分類基本上沒有幫助的詞,如助詞、語氣詞等)。

應用領域:欺詐檢測;一封電子郵件是否是垃圾郵件;一篇文章應該分到科技、政治,還是體育類;一段文字表達的是積極的情緒還是消極的情緒;人臉識別等。

使用方法:


Ch5:Logistic 迴歸

尋找一個非線性函式 Sigmoid 的最佳擬合引數,求解過程可以由最優化演算法(如梯度上升或隨機梯度上升(佔用更少資源,線上學習)) 來完成。

優點:計算代價不高,易於理解和實現。

缺點:

  1. 容易產生欠擬合;

  2. 分類精度可能不高。

適用資料型別:數值型和標稱型。

改進措施:

隨機梯度上升訓練演算法代替梯度上升訓練演算法,實現線上學習。

應用領域:

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

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

  3. 信用評估;

  4. 測量市場營銷的成功度;

  5. 預測某個產品的收益;

  6. 特定的某天是否會發生地震。

使用方法:

Ch6:支援向量機

一種二值決策分類“機”,泛化錯誤率低和較好的推廣性使其被認為是監督學習中最好的定式演算法。它試圖求解一個二次優化問題來最大化分類間隔。支援向量機採用 SMO 演算法每次只優化兩個 alpha 值來加快 SVM 的訓練速度。核方法(或核技巧)會將資料(有時是非線性資料)從一個低維空間對映到一個高維空間,將一個在低維空間中的非線性問題轉化為在高維空間的線性問題,如徑向基函式(度量兩個向量距離的核函式)。

優點:

  1. 解決小樣本下機器學習問題;

  2. 解決非線性問題;

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

  4. 可以很好的處理高維資料集,計算開銷不大,結果易解釋;

  5. 泛化能力比較強。

缺點:

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

  2. 對引數調節和核函式的選擇敏感,原始分類器不加修改僅適用於處理二類問題;

  3. 對缺失資料敏感。

適用資料型別:數值型和標稱型。

應用領域:文字分類、影象識別、主要二分類領域。

使用方法:

Ch7:利用 AdaBoost 元演算法提高分類效能

通過組合多個分類器(可以不同)的分類結果,獲得了比簡單的分類器更好的效果。選擇不同的分類器可以緩解同一分類器可能放大的過擬合問題。

有三種整合方法:Bagging、Boosting 和 Random Forset。Bagging
通過隨機抽樣 S 次(有放回的抽樣),得到 S 個與原資料集大小相同的資料集,作用到 S 個分類器上,最後根據投票決定分到哪一個類;Boosting 在 Bagging 上更進一步,它在資料集上順序應用了多個不同的分類器。

Boosting 中最流行的的一個演算法是 AdaBoost,以弱學習器作為基分類器,並且輸入資料,使其通過權重向量進行加權。在第一次迭代中,所有資料等權重,在後續迭代中,前次迭代中分錯的資料的權值增大,這種針對錯誤的調節能力正是 AdaBoost 的長處。

優點:

  1. 很好的利用了弱分類器進行級聯;

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

  3. AdaBoost 具有很高的精度;

  4. 相對於 Bagging 演算法和 Random Forest 演算法,AdaBoost 充分考慮的每個分類器的權重;

  5. 泛化錯誤率低,易編碼,可以應用在大部分分類器上,無引數調整。

缺點:

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

  2. 資料不平衡導致分類精度下降;

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

  4. 對離散點敏感。

適用資料型別:數值型和標稱型。

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

使用方法:

補充(非均衡分類問題):

非均衡分類問題是指在分類器訓練時正例數目和反例數目相差很大的一類問題,該問題在錯分正例和反例的代價不同時也存在(比如錯分導致死亡)。因此,ROC曲線、正確率和召回率有利於度量分類器的指標。



調節正例和反例的數目可以採用欠抽樣(刪除多的樣本)和過抽樣(賦值少的樣本)的方法,另外一種方法就是在分類的過程中將錯誤的代價也考慮在內。

Ch8:預測數值型資料:迴歸

迴歸與分類的不同點在於,迴歸預測連續型變數,分類預測離散型變數。在迴歸方程中,求得最佳迴歸係數的方法是最小化誤差的平方和。使用嶺迴歸可以保證 X^T*X 的逆不能計算時,仍然能求得迴歸引數。

嶺迴歸是縮減法的一種,相當於對迴歸係數的大小施加了限制。另一種很好的方法是 lasso 演算法,難以求解,但可以使用簡便的逐步線性迴歸來求得近似結果。

縮減法還可以看做對一個模型增加偏差(模型預測值與資料之間的差異)的同時減少方差(模型之間的差異)。

優點:結果易於理解,計算不復雜。

缺點:對非線性的資料擬合不好。

適用資料型別:數值型和標稱型。

使用方法:

Ch9:樹迴歸

輸入資料和目標變數之間呈現非線性關係,一種可行的方法是使用樹對預測值分段,包括分段常數和分段直線。若葉節點使用的模型是分段常數則稱為迴歸樹,若葉節點使用的模型是分段直線則稱為模型樹

CART 演算法可以用於構造二元樹並處理離散型或數值型資料的切分,該演算法構造的迴歸樹或模型樹傾向於產生過擬合問題,可以採用預剪枝(在樹的構建過程中就進行剪枝)和後剪枝(當樹構建完畢再進行剪枝)。預剪枝更有效,但使用者需要定義一些引數。

優點:可以對複雜的和非線性的資料建模。

缺點:結果不易理解。

適用資料型別:數值型和標稱型。

使用方法(R2為相關係數):

Ch10:利用 K-均值聚類演算法對未標註資料分組

聚類是一種無監督的學習方法(沒有目標變數)。聚類將資料點歸到多個簇中,其中相似資料點屬於同一簇,而不相似資料點屬於不同簇中。

K-均值演算法是廣泛使用的聚類演算法,其中 K 是使用者指定的建立簇的數目。演算法以 K 個隨機質心開始,計算每個點到質心的距離。每個點會被分配到最近的簇質心,然後更新簇質心。以上過程重複數次直至簇質心不再改變。

K-均值演算法易受到初始質心的影響,為了獲得更好的聚類效果,可以採用二分 K-均值聚類演算法。二分 K-均值聚類演算法首先將所有點作為一個簇,然後使用 K-均值演算法(k=2)對其劃分。下一次迭代時,選擇有最大誤差的簇進行劃分。該過程重複直到 K 個簇建立成功為止。

相關推薦

機器學習3分鐘機器學習實戰總結

決策樹易於理解和解釋,可以視覺化分析,容易提取出規則; 計算複雜度不高,對中間值的缺失不敏感,可

c語言真正走進指標的世界——陣列與指標的關係(一)

       每天下課之後,都感覺老師上課在神仙程式設計,我們一群凡人在底下面無表情地走神,前一秒還是在講加減乘除的基本用法,後一秒就變成了指標陣列、陣列指標、結構體指標和N級指標的性質以及運用............(真是令人頭禿 —^—) ——————

c語言真正走進指標的世界——那些一不小心就會出現的BUG

                                    Let's     &nbs

c語言真正走進指標的世界——指標的特性

         當你看到這篇文章時,請忘掉你之前對指標的所有認知,什麼地址什麼的統統忘掉。                      

谷歌大神分鐘懂TensorFlow

文/資料俠GasparovicTensorFlow 是世界上最受歡迎的開源機器學習框架,它具有快速、靈活並適合產品級大規模應用等特點,讓每個開發者和研究者都能方便地使用人工智慧來解決多樣化的挑戰。今天DT君給大家推薦的這個視訊(及文字實錄),是2017年穀歌開發者大會歐洲站上

手把手擼一個基於vueCli 3.0的前端框架

vuecli 是 vue 的一套工具,便於我們快速開發,其使用方法也是千奇百怪,各種奇技淫巧層出不窮,網上大多教程也只是教你怎麼去安裝,並沒有說要怎麼去用,今天來和大家探討一下該怎麼合理的使用。 1、建立專案 假設你已經安裝過node了,執行下面命令安裝vuecli3.0,如果你之前安裝

機器學習為什麼程式設計學得越久,就越難入門人工智慧?

有沒有這種感覺,學習程式設計的過程就像在挖一口井,而這口井你可以挖成“web”的形狀,也可以挖成“app”的形狀,還可以挖出“game”的形狀。突然有一天,別人說:挖出“artificial intelligence”的形狀後的井水才是最甜的。於是,你就開

轉載吃透RTMP

描述 也不會 一點 bool event let har 承擔 開發 RTMP協議是Real Time Message Protocol(實時信息傳輸協議)的縮寫,它是由Adobe公司提出的一種應用層的協議,用來解決多媒體數據傳輸流的多路復用(Multiplexing)和分

LightningChart 體數據領略體數據渲染的前世今生

常用 可視化分析 表格 行高 討論 一場 復雜計算 從數據 線圖 前言 3D數據采集領域的高速發展,在具有交互式幀率的現代化工作站上執行高級可視化,體數據的重要性將越來越重要。體數據集可以通過MRI,CT,PET,USCT或回聲定位等技術捕獲,也可以通過物理模擬(流體動力

機器學習EM演算法在高斯混合模型學習中的應用

前言 EM演算法,此部落格介紹了EMEM演算法相關理論知識,看本篇部落格前先熟悉EMEM演算法。 本篇部落格打算先從單個高斯分佈說起,然後推廣到多個高斯混合起來,最後給出高斯混合模型引數求解過程。 單個高斯分佈 假如我們有一些資料,這些資料來自同一個

cggwz的資訊飛船領略計算機世界的美妙和神奇

博主要去備戰高考了!很遺憾不能和大家交流了,但是,請各位不要離開,明年高考結束,我就會強勢迴歸!! 畢竟這是個表白牆 我永遠喜歡chq  ——lovechq 我永遠喜歡御阪美琴 ——cgg 這個隊形由我打破女神大人,我愛你! —

凱子哥學FrameworkActivity介面顯示全解析

前幾天凱子哥寫的Framework層的解析文章《Activity啟動過程全解析》,反響還不錯,這說明“寫讓大家都能看懂的Framework解析文章”的思想是基本正確的。 我個人覺得,深入分析的文章必不可少,但是對於更多的Android開發者——即

凱子哥學FrameworkActivity啟動過程全解析

It’s right time to learn Android’s Framework ! 前言 一個App是怎麼啟動起來的? App的程式入口到底是哪裡? Launcher到底是什麼神奇的東西? 聽說還有個AMS的東西,它是做什麼的?

unix學習檔案處理3—正則表示式和grep命令

unix檔案處理—正則表示式和grep命令 正則表示式 使用\{\}匹配模式結果出現的次數 pattern\{n\} 用來匹配前面pattern出現次數。n為次數 pattern\{n,\}m 含義同上,但次數最少為n pattern\{n,m

手把手擼一個Django web框架

據說 python 已經成為了前端開發程式設計師想學習的首位的後端語言,python 的語法及其簡單,我們可以很快的上手,python 有很多做web伺服器的框架,在此呢我推薦 Django,因為他是一個極簡的框架,沒有其他亂七八糟的東西,適合快速上手。在編寫的過程中如果出現缺少某個包,大家記得

手把手擼一個安卓殼子

web前端的小夥伴們大家好,說起APP混合開發,大家首先想到的可能就是類似Cordova的庫,可以讓我們不寫一行安卓程式碼,就輕鬆地實現原生APP的一些常用功能,但是對於一些特別的"需求"我們就無能為力了。所以為了提高我們的知識儲備,我覺得還是有必要學習一波安卓的知識的。下面就由我帶著大家手把手

ShawnZhang藍橋杯——演算法提高 勾股數

本道題非常的簡單,主要的問題就是三條邊的條件控制上 for(;a<500;a++){ for(b=a;b<500;b++){ for(c=5;c<500;c++){………………

論文閱讀中醫類藥性分析:使用機器學習方法預測類藥性

論文來源: Sheng, Tian,Junmei, Wang,Youyong, Li,Xiaojie, Xu,Tingjun, Hou.Drug-likeness analysis of traditional Chinese medicines: prediction of d

Android 熱修復與外掛化 一入門Android外掛化(附demo)

本文為博主Colin原創文章,歡迎轉載。 https://blog.csdn.net/colinandroid/article/details/79431502   一. 背景 Android外掛化作為每個合格的Android程式設計師都必須會的技術,被各大廠廣泛使用。隨著各大廠對

專欄 - 玩轉Visual Studio

帶你玩轉Visual Studio 本系列是從事C++開發工作一年半以來對VS用法的經驗和總結,主要內容有:1、Windows下Visual Studio在C++開發方面的功能和使用方法;2、用Visual Studio進行C++