一、什么是機器學習、數據挖掘?
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更合適。