哈嘍,大家好,不知不覺我的機(jī)器學(xué)習(xí)筆記已經(jīng)走過了十期,啃完了《機(jī)器學(xué)習(xí)實(shí)戰(zhàn)》中的分類算法部分。我們學(xué)習(xí)了從最開始的如何配置環(huán)境到數(shù)據(jù)預(yù)處理,特征選擇,建立模型,到最后的評(píng)價(jià)模型這一系列數(shù)據(jù)挖掘的基本過程,在此,我們做一個(gè)階段性的總結(jié)目錄,供大家學(xué)習(xí)歸納~ 進(jìn)行數(shù)據(jù)挖掘,必然需要一個(gè)強(qiáng)大方便的分析環(huán)境,正所謂「工欲善其事必先利其器」,首先給大家介紹的 Jupyter Notebook 正是這樣一件利器,一個(gè)可以把代碼、圖像、注釋、公式和作圖集于一處,從而實(shí)現(xiàn)可讀性分析的交互式筆記本。我們可以用它一邊運(yùn)行代碼進(jìn)行數(shù)據(jù)分析,一邊用 Markdown 語法來記錄實(shí)驗(yàn)過程。在準(zhǔn)備數(shù)據(jù)挖掘之前,對(duì)數(shù)據(jù)的探索性分析以及一系列數(shù)據(jù)預(yù)處理的步驟十分重要,因?yàn)橐恍┎煌暾⒉灰恢?、有異常的?shù)據(jù),通常會(huì)嚴(yán)重影響到數(shù)據(jù)挖掘建模的執(zhí)行效率甚至導(dǎo)致挖掘結(jié)果出現(xiàn)偏差。所以在這一期中,我們介紹了如何使用 sklearn 包處理缺失值、對(duì)分類數(shù)據(jù)進(jìn)行編碼、切分?jǐn)?shù)據(jù)集以及數(shù)據(jù)的無量綱化。以此來提高數(shù)據(jù)的質(zhì)量,讓數(shù)據(jù)可以更好地適應(yīng)模型。當(dāng)數(shù)據(jù)預(yù)處理完成后,我們通常需要選擇有意義的特征輸入機(jī)器學(xué)習(xí)的算法和模型進(jìn)行訓(xùn)練。這里,我介紹了包括對(duì)數(shù)據(jù)進(jìn)行方差過濾,去除低方差的特征以及如何使用 sklearn 中的 feature_selection 庫來進(jìn)行特征選擇(過濾法、包裝法、嵌入法)。學(xué)習(xí)了上游的數(shù)據(jù)處理以及特征工程以后,就開始學(xué)習(xí)算法吧~ 每個(gè)算法的內(nèi)容都包括了算法原理以及代碼實(shí)戰(zhàn)。第一個(gè)算法,我們介紹的是最簡單的 k-鄰近算法,用一個(gè)詞來描述這個(gè)算法就是「物以類聚」。如果一個(gè)樣本在特征空間中的 k 個(gè)最相似(即特征空間中最鄰近)的樣本中的大多數(shù)屬于某一個(gè)類別,則該樣本也屬于這個(gè)類別。決策樹,顧名思義,即以建樹的形式來做決策。我們首先會(huì)將所有特征看成一個(gè)個(gè)節(jié)點(diǎn),接著遍歷當(dāng)前數(shù)據(jù),找到最佳的分割點(diǎn)并根據(jù)分割點(diǎn)得出進(jìn)一步的子節(jié)點(diǎn),以此循環(huán),最終使得,所有子節(jié)點(diǎn)中所包含的樣本都盡可能屬于同一類(為了判斷「節(jié)點(diǎn)的純度」,我們還引入了「信息熵」的概念)。樸素貝葉斯算法是機(jī)器學(xué)習(xí)中常見的基本算法之一,主要用于進(jìn)行分類。它是基于貝葉斯定理與條件獨(dú)立性假設(shè)的分類方法。對(duì)于給定的訓(xùn)練數(shù)據(jù)集,首先基于特征條件獨(dú)立性假設(shè)學(xué)習(xí)輸入/輸出的聯(lián)合概率分布,然后基于此模型,對(duì)于給定的輸入 x 利用貝葉斯定理求出后驗(yàn)概率最大的輸出 y。邏輯回歸是一種廣義線性回歸分析模型,雖帶有「回歸」二字,但其實(shí)是一種線性分類器。本期從線性回歸引入 sigmoid 函數(shù)以構(gòu)建分類模型,介紹了損失函數(shù)的概念以及代碼實(shí)現(xiàn)梯度下降法來求解模型的最優(yōu)參數(shù)。支持向量機(jī),是機(jī)器學(xué)習(xí)中獲得關(guān)注最多的算法。它的目的就是尋找一個(gè)超平面來對(duì)樣本進(jìn)行分割,分割的原則是間隔的最大化,最終轉(zhuǎn)化為一個(gè)凸二次規(guī)劃問題來求解。由于公式推導(dǎo)比較晦澀難懂,我們先通過第一期「一文讀懂支持向量機(jī)」大致介紹了支持向量機(jī)的基本概念,而在第二期「支持向量機(jī)·sklearn 參數(shù)詳解」中則詳細(xì)介紹了 sklearn 包中關(guān)于支持向量機(jī)的各種參數(shù),最后通過一個(gè)簡單的案例嘗試構(gòu)建模型。和我們之前介紹的算法不同,Adaboost 算法是一種集成學(xué)習(xí)方法,它本身不是一個(gè)單獨(dú)的機(jī)器學(xué)習(xí)算法,而是通過在數(shù)據(jù)上構(gòu)建多個(gè)模型,集成所有模型的建模結(jié)果,以此提高模型的準(zhǔn)確性。簡單來說就是“三個(gè)臭皮匠頂個(gè)諸葛亮”。構(gòu)建了模型之后,我們就需要對(duì)模型的好壞進(jìn)行評(píng)估,我們從最基礎(chǔ)的 TP,F(xiàn)P,F(xiàn)N,TN 四個(gè)基本概念介紹了機(jī)器學(xué)習(xí)中的混淆矩陣,進(jìn)一步衍生出準(zhǔn)確率「Accuracy」,精確率「Precision」,靈敏度「Sensitivity」,特異度「Specificity」的概念,同時(shí)也包括了 F1 score 和 ROC 曲線的原理和意義。至此,我們已經(jīng)學(xué)習(xí)了《機(jī)器學(xué)習(xí)實(shí)戰(zhàn)》中的分類算法,除了書上的內(nèi)容以外,我還增加了 Python 中 sklearn 包的實(shí)戰(zhàn)內(nèi)容以及更清晰易懂的算法原理內(nèi)容,希望對(duì)大家有所幫助。 看到這里的童鞋一定對(duì)機(jī)器學(xué)習(xí)充滿了興趣吧 ~ 那就不要猶豫了,一起來學(xué)習(xí)吧!
|