機器學習入門 | 必知必會的基礎理論

文章大綱

一、什么是機器學習、數據挖掘?

1、AI是什么?

AI(人工智能)是研究開發用于模擬、延伸和擴展人的智能理論、方法、技術及應用系統的一門新的技術科學。人工智能是計算機科學的一個分支。
AI的應用場景:必備基礎 "機器學習"

機器學習的應用場景
2、機器學習是什么?

機器學習就是讓機器有學習的能力,讓機器通過"某種策略", 學習"歷史數據"后,能夠進行一定"預測"和"識別"的能力。

3、數據挖掘是什么?

數據挖掘是指從大量數據中通過算法搜索隱藏于其中信息的過程。機器學習是支撐數據挖掘的手段。從關系上看,數據挖掘包括機器學習。

4、為什么需要數據挖掘?

面臨復雜且大量的新數據集時,傳統數據分析計算常常遇到瓶頸,我們將常見瓶頸進行抽象。
1、高維性數據:隨著5G及物聯網的建設,數據量將會呈指數級的增長,常常遇到成百上千屬性的維度,可想象,計算復雜度將迅速增加。
2、非結構化數據:非結構化數據也包含許多含金量的信息,例如視頻、音頻、文本等等,這些都是傳統數據分析方法無法獲取的信息。
3、自動及智能問題。傳統分析方法常規流程就是"提出假設-驗證假設",但這一過程勞力費神。當前的數據分析任務常常需要產生和評估數千種假設,因此需要自動、智能的手段。

注:數據挖掘非萬能法則,數據分析也非所想的不堪,兩者的結合應用才能更好的為業務賦能。事實上,數據挖掘是需要數據分析進行輔助的,比如數據探索,特征工程。

二、機器學習所需要的基礎理論

  • 讓機器通過"某種策略", 學習"歷史數據"后,能夠進行一定"預測"和"識別"的能力
1、某種策略(模型)、損失、模型訓練和標簽
1)模型是什么?以"一元線性回歸"為例
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用來正常顯示中文標簽
plt.rcParams['axes.unicode_minus']=False #用來正常顯示負號
df1 = pd.DataFrame({'用戶人數':[100,200,300,400,500],'銷售額(元)':[1000,2000,3000,4000,5000]})
df1.plot(x='用戶人數',y='銷售額(元)')
from sklearn.linear_model import LinearRegression
x = df1['用戶人數'].values.reshape(-1,1)
y = df1['銷售額(元)']
lr = LinearRegression()
lr.fit(x,y)
# 模型的斜率
lr.coef_
lr.predict(np.array([600]).reshape(-1,1))
假設用戶人數為600,那銷量是 6000 ,這是模型的預測能力。
2)損失

損失是對糟糕預測的懲罰。損失是一個數值,表示對于單個樣本而言,模型預測的準確程度。如果模型的預測完全準確,則損失為零,否則損失會較大。如下圖:那副圖的損失更大?紅色箭頭表示損失,藍色線表示預測,可見圖二的模型更準確(預測值-實際值),圖一的損失更大。

3)模型訓練

模型訓練表示通過有標簽樣本來學習(確定)所有權重和偏差的理想值。模型訓練檢查多個樣本,并嘗試找出可最大限度的減少損失的模型(方向)。比如:上面的線性回歸,k 和 b 都是兩個未知的參數 ,根據已有的樣本 x 和 y 去訓練模型。

y = kx + b
4)標簽

標簽,白話說就是模型的 y 值,比如上面的線性回歸標簽就是銷售額,抽象的說,標簽就是結論。比如:【x,y】——【用戶人數,銷售額】——【100,1000】,就是一個樣本。

2、代價函數(損失函數)
  • 代價函數:是一個數學函數,能夠以有意義的方式匯總各種損失
  • 最常見的代價函數:MSE(均方誤差)指的是每個樣本平均平方損失。

注:MSE 常用于機器學習,但它不是唯一實用的損失函數,也不是適用于所有模型最佳的損失函數。

三、劃分數據集(訓練、驗證、測試)
1)訓練集與測試集(常見模式)

訓練集:用于訓練模型的子集
測試集:用于測試訓練后模型的子集

  • 舉個例子:訓練集相當于上課學知識,測試集相當于期末考試,用來最終評估學習效果。
2)劃分注意點:

① 通常將數據集的70%作為訓練集,30%作為測試集(8 : 2也行),并且挑選的測試集的特征應該與訓練集的特征相同。
② 通常需要在開始構建模型之前把數據集進行劃分,防止數據窺探偏誤。也就是說,我們避免了解太多關于測試集中的樣本特點,防止我們認為的挑選有助于測試集數據的模型。這樣的結果會過于樂觀,但是實際上并沒有預期的那樣優秀。
③ 對于時序數據集、訓練集和測試集需按時間劃分。比如說我目前有 1-10 月的數據,那么 1-8 月作為訓練集,9-10月作為測試級。

  • 原因:假設我們有了這個模型以后,都是用歷史的數據,去預測未來的數據的,所以我們在訓練數據的時候也要符合這個模式。
3)流程:

借助這種劃分,可以對一個樣本集進行訓練,然后使用不同的樣本集測試模型。采用兩種分類以后,工作流程可能如下所示。

  • 缺點:相當于不斷的利用測試集(未來數據)去調整模型,類似數據窺探的效果會增大模型過擬合的風險。
4)優化后的流程:
  • 缺點:① 驗證集的缺點,10%數據很寶貴,拿去訓練模型可能會產生更好的效果。② 繁瑣
    通常采用第一種(測試集和訓練集),如果發現訓練模型過擬合,通過手段沒有降低的話,可以采用第二種模式。
四、交叉驗證(Cross Validation)
  • 交叉驗證的基本思想是把在某種意義下將原始數據進行分組,一部分作為訓練集(train set),另一部分作為驗證集(validation set or test set)。首先用訓練集對分類器進行訓練,再利用驗證集來測試訓練得到的模型(model),以此來作為評價分類器的性能指標。
  • 目的 : 用交叉驗證的目的是為了得到可靠穩定的模型。
  • 留出法(Holdout cross validation):上面提到的按照固定比例將數據集靜態的劃分為訓練集、驗證集、測試集的方法就是留出法。
  • 留一法(Leave one out cross validation ):每次的測試集都只有一個樣本,需要進行 n 次訓練和預測。這個方法用于訓練的數據只比僅整體數據集少了一個樣本,因此最接近原始樣本的分布。但是訓練復雜度增加了,因為模型的數量與原始數據樣本數量相同,一般在數據缺乏時使用。
  • K折交叉驗證(k-fold cross validation ):靜態的留出法對數據的劃分方式比較敏感,有可能不同的劃分方式得到了不同的模型。【K折交叉驗證】是一種動態的驗證方式,這種方式可以降低數據劃分帶來的影響,會得到一個更可靠的模型。具體步驟如下:
  • 五折交叉驗證法:

① 將所有的數據集均勻的分成五份
② 不重復的每次取出其中一份做測試集,用其他四份做訓練集訓練模型,之后計算該模型在測試集上的MSE
③ 將五次的MSE取平均得到的最后的MSE,作為評價模型的指標

五、泛化能力與過擬合
  • 泛化能力:對未知數據 (新數據) 的預測能力。
  • 過擬合: 指的是模型在訓練集上表現的很好,但是在交叉驗證集合和測試集上表現一般,也就是說模型對未知樣本的預測表現一般,泛化能力較差。
    舉例:比如下圖三個模型,綠色表示訓練集樣本,紅線表示模型的預測能力,藍色表示新樣本點。看模型三在訓練集表示很好,但是在新樣本表現一般,所以說泛化能力較差,出現過擬合。模型一在訓練集表現的也不好,新樣本預測也不好,稱之為欠擬合。最終我們選擇模型二,泛化能力越好,就是越好的模型。


    哪個模型的泛化能力較差?
為什么會產生過擬合?
  • ① 訓練數據集合訓練數據集樣本單一,樣本不足。如果訓練樣本只有負樣本,然后拿生成的模型去預測正樣本,這肯定預測不準,所以訓練樣本要盡可能的全面,覆蓋所有的數據類型。
  • ②訓練數據中噪聲干擾過大,噪聲指訓練數據中的干擾數據,過多的干擾會導致記錄了很多噪聲特征,忽略了真實輸入和輸出之間的關系。
  • ③ 模型過于復雜,模型太復雜,已經能夠死記硬背記下了訓練數據的信息,但是遇到沒有見過的數據的時候不能夠變通,泛化能力太差。我們希望模型對不同的模型都有穩定的輸出,模型太復雜是過擬合的重要因素。
如何降低過擬合?
  • ① 獲取和使用更多的數據(數據集增強)是解決過擬合的根本性方法。
  • ② 采用合適的模型,控制模型的復雜度。根據奧卡姆剃刀法則:在同樣能夠解釋已知觀測現象的假設中,我們應該挑選 "最簡單" 的那一個,對于模型的設計而言,我們應該選擇簡單合適的模型解決復雜的問題。


  • ③ 降低特征的數量。對于一些特征工程而言,可以降低特征的數量,刪除冗余特征,人工選擇保留哪些特征,這種方法也可以解決過擬合問題。
  • ④ 正則化,正則化就是在模型的代價函數里添加一個約束,使得可以減少模型參數的候選空間,使得模型更加簡潔,本質上是控制模型復雜度。
  • ⑤ dropout是在訓練網絡時用的一種技巧,相當于在隱藏單元增加了到噪聲。drop out指的是在訓練過程中,每次按一定的概率,比如50%,隨機的刪除一部分隱藏單元神經元。所謂的刪除不是真正意義上的刪除,其實就是將該部分神經元的激活函數設為零,激活函數的輸出為零,讓這些神經元不計算而已。
  • ⑥ 提前終止,對模型進行訓練的過程即是對模型的參數進行學習更新的過程。這個參數學習的過程往往會用到一些迭代方法,比如梯度下降Early stopping是一種迭代次數截斷的方法來阻止過擬合的方法。即在模型對訓練數據及迭代收斂之前停止迭代來防止過擬合。
所以,總的來說,一個好的模型,損失函數盡可能的小,泛化能力盡可能大。
六、模型類別
  • 監督學習
    監督學習是從<x,y標簽>這樣的事例中學習統計規律,然后對于新的 x 給出對應的 y 。通俗的講,就是根據已有的數據集知道輸入和輸出結果之間的關系,根據這種已知的關系,訓練得到一個最優模型。
    ① 分類模型:標簽為分類型數據,比如預測用戶是否流失(標簽 y 為【是否】)
    ② 回歸模型:標簽為數值數據,比如預測銷售額。
  • 監督學習常見模型
    K-近鄰(KNN)
    線性回歸(回歸模型)
    邏輯回歸(分類模型)
    支持向量機
    決策樹和隨機森林
    神經網絡
  • 無監督學習
    相比監督學習沒有標注數據,也就是 y。無監督學習是從一堆數據中學習其內在統計規律或內在結構。學習到的模型可以是類別,轉換或者概率,這些模型可以實現對數據的聚類、降維、可視化、概率估計和關聯規則學習。
  • 無監督學習常見模型
    a.聚類算法
    k-means算法(kmeans)
    密度聚類算法
    最大期望算法(EM)
    b.降維
    主成分分析(PCA)
    c.關聯規則學習
    Apriori
    d. 時間序列預測
  • 半監督學習
    半監督學習包含大量未標注數據和少量標注數據,主要是利用未標注中的信息輔助標注數據進行監督學習。大多數半監督學習算法是無監督式和監督式算法的結合。
七、模型評估

不同類型的模型評估方法不一。
先講一個常見誤區,大家是否覺得評估模型就用模型準確率 ?

  • 實際例子,小a是某運營商的一名數據分析師,老板最近和他說:"小a,最近我們這個 xx 流量產品每月流失用戶都挺多的,能不能幫忙想想辦法。",小a 思考了一下,覺得假設我們能預測出下個月流失用戶的名單,那我們是不是能提前對這批用戶發發優惠,或者引導他們升級變更其他流量產品去挽留他們呢?
  • 模型準確率9/10 = 90%
  • 記得我們的任務目標嗎,我們目標是不是想預測出哪些用戶流失了?那這個模型在預測流失用戶的表現如何,模型一個流失用戶都沒預測出來,盡管模型的準確率是90%這么高,但對于我們的業務來說,是無效模型。

分類評估指標

  • ① 一級指標(底層指標)
    混淆矩陣:混淆矩陣就是分別統計分類模型、歸錯類、歸對類的觀測值個數,然后把結果放在一個表里展示出來,這個表就是混淆矩陣。
  • 真實值是positive,模型認為是positive的數量(True Positive =TP),真陽性。
  • 真實值是positive,模型認為是negative的數量(False Negative = FN),這就是統計學上的第一類錯誤,棄真,假陰性。
  • 真實值是negative,模型認為是positive的數量(False Positive = FP),這就是統計學上的第二類錯誤,納偽,假陽性。
  • 真實值是negative,模型認為是negative的數量(True Negative = TN),真陰性。
  • 套上例子:
    實際為流失用戶,而模型預測也是流失用戶的數量,即為TP
    實際為流失用戶,而模型預測時非流失用戶的數量,即為FN
    實際為非流失用戶,而模型預測的是流失用戶的數量,即為FP
    實際為非流失用戶,而模型預測是非流失用戶的數量,即為TN

混淆矩陣怎么看?預測性分類模型肯定是希望越準越好,那么對應到混淆矩陣中,那肯定是希望TP和TN的數量大,而FP與FN的數量小。

② 二級指標
混淆矩陣里面統計的是個數,有時候面對大量的數據,光憑算個數很難衡量模型的優劣。因此混淆矩陣在基本的統計結果上又延伸了如下四個指標,我們稱它為二級指標。

  • accuracy (準確率):(TP + TN)/(TP + FN + FP + FN)
    意義:分類模型所有判斷正確的結果占總觀測值的比重,一般不用
  • precision(準確率):TP /(TP + FP)
    意義:表示預測為正的樣本數有多少是對的,可解釋性強,常用越高越好。
  • record (召回率、查全率,真正率TPR):TP / ( TP + FN)
    意義:表示樣本中的正例有多少被預測正確,可解釋強,常用越高越好。
  • FPR (假正率) :FP / (FP + FN)
    意義:表示當前被錯誤分到正樣本類別中真實的負樣本 所占所有負樣本總數 的比例,越低越好。
  • ③三級指標
  • ROC curve,這個曲線就是以下 TPR 和 FPR 為軸,取不同的閾值點畫的。
  • 模型去預測分類型任務的時候,本質上是預測分類型的概率的,比如計算流失的概率,如果這個概率大于閾值0.5的話,這即為流失,所以這里就有個閾值的存在。不同的閾值,會有不同的TP 、FP。

ROC_AUC:AUC就是曲線下面積,我們根據ROC曲線想一下,到底我們這個曲線漲什么樣的模型才算好呢?TR率是越高越好,FP率是越低越好,所以我們的曲線應該是越靠近Y軸越好。(粗魯)理解最終可抽象成,ROC曲線下面積越大越好,即AUC越大越好。

AUC評判標準 :
0.5-0.7 : 效果較低,但預測股票已經很不錯了。
0.7-0.85 : 效果一般
0.85-0.95 : 效果很好
0.95-1 : 效果非常好,但不太可能

f1值:(2*Precision * Recall/(Precision+Record)
意義:我們的模型想recall和precision都高,但魚與熊掌不可兼得,如果想要找到它們的平衡,那就用f1值。

  • 分類評估指標,如何選擇?
    選擇方針,根據你模型所解決的目的進行選擇,比如我想現在。訓練一個模型來識別出哪些是在逃罪犯?(寧可錯殺1000,也不放過一個)-- recall,因為recall為表示樣本中的正例有多少被預測正確,對于這個模型,就是所有的在逃罪犯為分母,模型預測為在逃罪犯為分子。假設recall為1,也就是所有的在逃罪犯模型都預測正確了。
  • 根據指標可解釋性去選擇。實際工作中常常要向不懂機器學習的人去解釋模型的效果,類似roc_auc和f1值,這種三級指標可解釋性較弱,所以我們一般是選擇recall和precision。

回歸評估指標

  • 平均絕對誤差MAE


  • 均方誤差 MSE



    相對MAE而言,MSE的數值更大。

  • 均方根誤差 RMSE


  • 中位絕對誤差


  • r^2決定系數(擬合優度)

回歸評估指標如何選擇?
  • 一般選擇MSE作為評估指標
  • MSE的誤差的量綱相對較大。若選看量綱接近業務水平的,用MSE和RMSE
  • 若擔心某個誤差較大會影響整體的評估指標,用MedAE
  • 如果模型希望的是找到能夠解釋目標y變動的因變量,則選用R Squared更合適。
機器學習的基礎概念介紹到這里,懂得了基礎概念,才能開始后續的學習。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,488評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,034評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,327評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,554評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,337評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,883評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,975評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,114評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,625評論 1 332
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,555評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,737評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,244評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,973評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,615評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,343評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,699評論 2 370

推薦閱讀更多精彩內容