關(guān)于預(yù)測的兩類核心算法
- 函數(shù)逼近/預(yù)測分析問題(分類問題、回歸問題)
解決方法:懲罰線性回歸征绸、集成方法
當數(shù)據(jù)含有大量的特征,但是沒有足夠多的數(shù)據(jù)或時間來訓練更復(fù)雜的集成方法模型時,懲罰回歸方法將優(yōu)于其他算法。
而且這些算法使用十分簡單嗓袱,可調(diào)參數(shù)不多,都有定義良好习绢、結(jié)構(gòu)良好的輸入數(shù)據(jù)類 型渠抹。當面臨一個新問題的時候,在 1 ~ 2 小時內(nèi)完成輸 入數(shù)據(jù)的處理闪萄、訓練模型逼肯、輸出預(yù)測結(jié)果是司空見慣的。
這些算法的一個最重要特性就是可以明確地指出哪個輸入變量(特征)對預(yù)測結(jié)果最重要桃煎。這已經(jīng)成為機器學習算法一個無比重要的特性篮幢。在預(yù)測模型構(gòu)建過程中,最消耗時間的一步就是特征提任酢(feature selection)或者叫作特征工程(feature engineering)三椿。就是 數(shù)據(jù)科學家選擇哪些變量用于預(yù)測結(jié)果的過程。根據(jù)對預(yù)測結(jié)果的貢獻程度對特征打分葫辐。
懲罰線性回歸
產(chǎn)生原因
*最小二乘法:過擬合問題
自由度
確定一條直線需要2個獨立的參數(shù)(如x軸交點坐標搜锰,斜率)
數(shù)據(jù)條數(shù)》自由度
懲罰線性回歸可以減少自由度使之與數(shù)據(jù)規(guī)模、問題的復(fù)雜度相匹配耿战。對于具有大量自由度的問題蛋叼,懲罰線性回歸方法獲得了廣泛的應(yīng)用。在下列問題中更是得到了偏愛剂陡,基因問題狈涮,通常其自由度(也就是基因的數(shù)目)是數(shù)以萬計的;文本分類問題鸭栖,其自由度可 以超過百萬歌馍。
集成方法(ensemble methods)
集成方法的基本思想是構(gòu) 建多個不同的預(yù)測模型,然后將其輸出做某種組合作為最終的輸出晕鹊,如取平均值或采用多 數(shù)人的意見(投票)松却。單個預(yù)測模型叫作基學習器(base learners)暴浦。計算學習理論(computation learning theory)的研究結(jié)果證明只要基學習器比隨機猜測稍微好些(如果獨立預(yù)測模型 的數(shù)目足夠多),那么集成方法就可以達到相當好的效果晓锻。
產(chǎn)生原因:
某些機器學習算法輸出結(jié)果不穩(wěn)定歌焦,這一問題導致了集成方法的提出。例如砚哆,在現(xiàn)有數(shù)據(jù)集基礎(chǔ)上增加新的數(shù)據(jù)會導致最終的預(yù)測模型或性能突變独撇。二元決策樹 和傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)就有這種不穩(wěn)定性。這種不穩(wěn) 定性會導致預(yù)測模型性能的高方差窟社,取多個模型 的平均值可以看作是一種減少方差的方法券勺。技巧 在于如何產(chǎn)生大量的獨立預(yù)測模型,特別是當它們都采用同樣的基學習器時
一個有用的技巧就是在開發(fā)的早期階段灿里,如特征工程階段关炼,利用懲罰線性模型進行訓練。這給數(shù)據(jù)科學家提供一個基本的判斷:哪些變量(特征)是有用的匣吊、重要的儒拂,同時提供了一個后續(xù)與其他算法性能比較上的基線。
數(shù)據(jù)科學家的任務(wù)就是如何平衡問題的復(fù)雜度色鸳、預(yù)測模型的復(fù)雜度和數(shù)據(jù)集規(guī)模社痛,以獲得一個最佳的可部署模型。基本思想是如果問題不是很復(fù)雜命雀,而且不能獲得足夠多的數(shù)據(jù)蒜哀,則線性方法比更加復(fù)雜的集成方法可能會獲得全面更優(yōu)的性能±羯埃基因組數(shù)據(jù)就是此類問題的典型代表
數(shù)據(jù)集規(guī)模通常需要是自由度的倍數(shù)關(guān)系撵儿。因為數(shù)據(jù)集的規(guī)模是固定的,所以需要調(diào)整模型的自由度狐血。懲罰線性回歸的相關(guān)章節(jié)將介紹懲罰線性回歸如何支持這種調(diào)整以及依此如何達到最優(yōu)的性能
疑點
第 3 章將更詳細地討論為什么一個算法或者另一個算法是一個問題的更好選擇淀歇。這與問題的復(fù)雜度、算法內(nèi)在固有的自由度有關(guān)匈织。線性模型傾向于訓練速度快浪默,并且經(jīng)常能夠提供與非線性集成方法相當?shù)男阅埽貏e是當能獲取的數(shù)據(jù)受限時缀匕。因為它們訓練時間短纳决,
在早期特征選取階段訓練線性模型是很方便的,然后可以據(jù)此大致估計針對特定問題可以達到的性能弦追。線性模型可以提供關(guān)于特征對預(yù)測的相關(guān)信息岳链,可以輔助特征選取階段的工作。在有充足數(shù)據(jù)的情況下劲件,集成方法通常能提供更好的性能掸哑,也可以提供相對間接的關(guān)
于結(jié)果的貢獻的評估。
使用機器學習需要幾項不同的技能零远。
1 一項就是編程技能苗分,
2 獲得合適的模型進行訓練和部署
步驟:
對問題用數(shù)學語言進行重敘,
需要瀏覽可獲得的數(shù)據(jù)牵辣,確定哪類數(shù)據(jù)可能用于預(yù)測摔癣。“瀏覽”的意思是對數(shù)據(jù)進行各種統(tǒng)計意義上的檢測分析
假設(shè)通過某種方法纬向,選擇了一組特征择浊,開始訓練機器學習算法。這將產(chǎn)生一個訓練好的模型逾条,然后是估計它的性能琢岩。下一步,可能會考慮對特征集進行調(diào)整师脂,包括增加新的特征担孔,刪除已證明沒什么幫助的特征,或者選擇另外一種類型的訓練目標(也叫作目標函數(shù))吃警,通過上述調(diào)整看看能否提高性能糕篇。可以反復(fù)調(diào)整設(shè)計決策來提高性能酌心“柘可能會把導致性能比較差的數(shù)據(jù)單獨提出來,然后嘗試是否可以從中發(fā)現(xiàn)背后的規(guī)律安券。這可以導致添加新的特征到預(yù)測模型中墩崩,也可以把數(shù)據(jù)集分成不同的部分分別考慮,分別建立不同的預(yù)測模型完疫。
當重述問題泰鸡、提取特征、訓練算法壳鹤、評估算法時盛龄,需要熟悉不同算法所要求的輸入數(shù)據(jù)結(jié)構(gòu)。
此過程通常包括如下步驟芳誓。
(1)提取或組合預(yù)測所需的特征余舶。
(2)設(shè)定訓練目標。
(3)訓練模型锹淌。
(4)評估模型在測試數(shù)據(jù)上的性能表現(xiàn)
特征工程就是對特征進行整理組合匿值,以達到更富有信息量的過程。建立一個證劵交易系統(tǒng)包括特征提取和特征工程赂摆。特征提取將決定哪些特征可以用來預(yù)測價格挟憔。過往的價格钟些、相關(guān)證劵的價格再沧、利率鳖敷、從最近發(fā)布的新聞提取的特征都是現(xiàn)有公開討論的各種交
易系統(tǒng)的輸入數(shù)據(jù)。而且證劵的價格還有一系列的工程化特征牛哺,包括:指數(shù)平滑異同移動平均線(moving average convergence and divergence达传, MACD)篙耗、相對強弱指數(shù)(relative strength index, RSI)等宪赶。這些特征都是過往價格的函數(shù)宗弯,它們的發(fā)明者都認為這些特征對于證劵交易是非常有用的。
模型的訓練也是一個過程搂妻,每次開始都是先選擇作為基線的特征集合蒙保。作為一個現(xiàn)代機器學習算法(如本書描述的算法),通常訓練 100 ~ 5000 個不同的模型叽讳,然后從中精選出一個模型進行部署追他。產(chǎn)生如此之多的模型的原因是提供不同復(fù)雜度的模型,這樣可以挑選出一個與問題岛蚤、數(shù)據(jù)集最匹配的模型邑狸。如果不想模型太簡單又不想放棄性能,不想模型太復(fù)雜又不想出現(xiàn)過擬合問題涤妒,那么需要從不同復(fù)雜度的模型中選擇一個最合適的单雾。
通過理解數(shù)據(jù)來了解問題
構(gòu)建預(yù)測模型的過程叫作訓練。具體的方法依賴于算法她紫,基本上采用迭代的方式硅堆。算法假定屬性和標簽之間存在可預(yù)測的關(guān)系,觀察出錯的情況贿讹,做出修正渐逃,然后重復(fù)此過程直到獲得一個相對滿意的模型
屬性和標簽的不同類型決定模型的選擇
很多機器學習算法只能處理數(shù)值變量,不能處理類別變量或因素變
量(factor variable)民褂。例如茄菊,懲罰回歸算法只能處理數(shù)值變量, SVM赊堪、核方法面殖、 K 最近鄰也是同樣。第 4 章將介紹將類別變量轉(zhuǎn)換為數(shù)值變量的方法哭廉。這些變量的特性將會影響算法的選擇以及開發(fā)一個預(yù)測模型的努力的方向脊僚,因此這也是當面臨一個新問題時,需要考
慮的因素之一遵绰。
當標簽是數(shù)值的辽幌,就叫作回歸問題增淹。當標簽是類別的,就叫作分類問題舶衬。如果分類結(jié)果只取 2 個值埠通,就叫作二元分類問題赎离。如果取多個值逛犹,就是多類別分類問題
很多情況下,問題的類型是由設(shè)計者選擇的梁剔。剛剛的例子就是如何把一個回歸問題轉(zhuǎn)換為二元分類問題虽画,只需要對標簽做簡單的變換。這實際上是面臨一個問題時所做的一種權(quán)衡荣病。例如码撰,分類目標可以更好地支持 2 種行為選擇的決策問題。
分類問題也可能比回歸問題簡單个盆。例如考慮 2 個地形圖的復(fù)雜度差異脖岛,一個地形圖只有一個等高線(如 30.5 米的等高線),而另一個地形圖每隔 3.05 米就有一個等高線颊亮。只有一個等高線的地形圖將地圖分成高于 30.5 米的區(qū)域和低于 30.5 米的區(qū)域柴梆,因此相比另一個地形圖含有更少的信息。一個分類器就相當于只算出一個等高線终惑,而不再考慮與這條分界線的遠近距離之類的問題绍在,而回歸的方法就相當于要繪制一個完整的地形圖
新數(shù)據(jù)集的注意事項
- 數(shù)據(jù)規(guī)模(行數(shù)、列數(shù))
- 類別變量的數(shù)目雹有、類別的取值范圍
- 缺失的值(缺失的行數(shù)+具體缺失的項數(shù))
- 屬性和標簽的統(tǒng)計特性以及關(guān)系 (模糊:平行坐標圖 具體:相關(guān)性)
數(shù)據(jù)集屬性的可視化
平行坐標圖
基于標簽對折線標示不同的顏色偿渡,更有利于觀測到屬性值與標簽之間的關(guān)系。這些觀察將有助于解釋和確認某些預(yù)測的結(jié)果霸奕。
屬性和標簽的關(guān)系可視化
屬性與標簽的交會圖(cross-plots)
兩個屬性(或一個屬性溜宽、一個標簽)的相關(guān)程度可以由皮爾遜相關(guān)系數(shù)
用熱圖(heat map)展示屬性和標簽的相關(guān)性
多個屬性間的相關(guān)性很高(相關(guān)系數(shù) >0.7),即多重共線性(multicollinearity)质帅,往往會導致預(yù)測結(jié)果不穩(wěn)定适揉。
如果屬性和標簽相關(guān),則通常意味著兩者之間具有可預(yù)測的關(guān)系
*分類問題*
import pandas as pd
from pandas import DataFrame
import matplotlib.pyplot as plot
target_url = ("https://archive.ics.uci.edu/ml/machine-learning-"
"databases/undocumented/connectionist-bench/sonar/sonar.all-data")
#read rocks versus mines data into pandas data frame
rocksVMines = pd.read_csv(target_url,header=None, prefix="V")
for i in range(208):
#assign color based on color based on "M" or "R" labels
if rocksVMines.iat[i,60] == "M":
pcolor = "red"
else:
pcolor = "blue"
#plot rows of data as if they were series data
dataRow = rocksVMines.iloc[i,0:60]
dataRow.plot(color=pcolor, alpha=0.5)
plot.xlabel("Attribute Index")
plot.ylabel(("Attribute Values"))
plot.show()
*回歸問題的平行坐標圖*
#數(shù)值標簽映射
回歸問題临梗,應(yīng)該用不同的顏色來對應(yīng)標簽值的高低涡扼。也就是實現(xiàn)由標簽的實數(shù)值到顏
色值的映射,需要將標簽的實數(shù)值壓縮到 [0.0,1.0] 區(qū)間
from math import exp
target_url = ("http://archive.ics.uci.edu/ml/machine-"
"learning-databases/abalone/abalone.data")
#read abalone data
abalone = pd.read_csv(target_url,header=None, prefix="V")
abalone.columns = ['Sex', 'Length', 'Diameter', 'Height',
'Whole Wt', 'Shucked Wt',
'Viscera Wt', 'Shell Wt', 'Rings']
summary = abalone.describe()
minRings = summary.iloc[3,7]
maxRings = summary.iloc[7,7]
nrows = len(abalone.index)
for i in range(nrows):
#plot rows of data as if they were series data
dataRow = abalone.iloc[i,1:8]
labelColor = (abalone.iloc[i,8] - minRings) / (maxRings - minRings)
dataRow.plot(color=plot.cm.RdYlBu(labelColor), alpha=0.5)
plot.xlabel("Attribute Index")
plot.ylabel(("Attribute Values"))
plot.show()
改變顏色映射關(guān)系可以從不同的層面來可視化屬性與目標之間的關(guān)系
1 歸一化
2 對數(shù)轉(zhuǎn)換
針對巖石 vs. 水雷問題盟庞,平行坐標圖的線用 2 種顏色代表了 2 種目標類別吃沪。在回歸問題(紅酒口感評分、鮑魚預(yù)測年齡)什猖,標簽(目標類別)取實數(shù)值票彪,平行坐標圖的線取一系列不同的顏色红淡。在多類別分類問題中,每種顏色代表一種類別降铸,共有 6 種類別在旱, 6 種顏色。標簽是 1 ~ 7推掸,沒有 4桶蝎。顏色的選擇與回歸問題中的方式類似:將目標類別(標簽)除以其最大值,然后再基于此數(shù)值選擇顏色谅畅。
第一部分是R標簽的(巖石)登渣,第二部分是M標簽的(水雷)。在分析數(shù)據(jù)時首先要注意到此類信息毡泻。在后續(xù)章節(jié)中會看到胜茧,確定模型的優(yōu)劣有時需要對數(shù)據(jù)進行取樣。那么取樣就需要考慮到數(shù)據(jù)的存儲結(jié)構(gòu)
邊緣點很可能就是分析模型預(yù)測錯誤的一個重要來源
小結(jié)
本章介紹了用于探究新數(shù)據(jù)集的一些工具仇味,這些工具從簡單地獲取數(shù)據(jù)集的規(guī)模開始呻顽,包括確定數(shù)據(jù)集屬性和目標的類型等。這些關(guān)于數(shù)據(jù)集的基本情況會對數(shù)據(jù)集的預(yù)處理丹墨、預(yù)測模型的訓練提供幫助廊遍。
這些概念包括:簡單的統(tǒng)計信息(均值、標準差带到、分位數(shù))昧碉、二
階統(tǒng)計信息,如屬性間的相關(guān)性揽惹、屬性與目標間的相關(guān)性被饿。當目標是二值時,計算屬性與目標相關(guān)性的方法與目標是實數(shù)(回歸問題)時有所不同搪搏。本章也介紹了可視化技巧:利用分位數(shù)圖來顯示異常點狭握;利用平行坐標圖來顯示屬性和目標之間的相關(guān)性。上述方法和技巧都可以應(yīng)用到本書后續(xù)的內(nèi)容疯溺,用來驗證算法以及算法之間的對比论颅。
預(yù)測模型的構(gòu)建:平衡性能、復(fù)雜性以及大數(shù)據(jù)
- 使用訓練數(shù)據(jù)
- 評估模型性能
好的性能意味著使用屬性 x i 來生成一個接近真實 y i 的預(yù)測囱嫩,這種“接近”對不同問
題含義不同恃疯。
對于回歸問題,y i 是一個實數(shù)墨闲,性能使用均方誤差(MSE)或者平均絕對誤差(MAE)來度量今妄。
如果問題是一個分類問題,那么需要使用不同的性能指標。最常用的性能指標是誤分類率盾鳞,即計算 pred() 函數(shù)預(yù)測錯誤的樣本比例
影響算法選擇及性能的因素——復(fù)雜度以及數(shù)據(jù)
有幾個因素影響預(yù)測算法的整體性能犬性。這些因素包括問題的復(fù)雜度、模型復(fù)雜度以及
可用的訓練數(shù)據(jù)量腾仅。下面將介紹這些因素是如何一起來影響預(yù)測性能的乒裆。
應(yīng)用數(shù)據(jù)科學家需要對算法性能進行評估,從而為客戶提供合理的期望并且對算法進行比較推励。對模型進行評估的最佳經(jīng)驗是從訓練數(shù)據(jù)集中預(yù)留部分數(shù)據(jù)鹤耍。樣本外誤差
只有在新樣本上計算得到的性能才能算是模型的性能。
- 簡單問題 復(fù)雜問題(邊界)
數(shù)據(jù)有限的復(fù)雜問題選簡單模型 - 簡單模型 復(fù)雜模型
現(xiàn)代機器學習算法往往生成模型族吹艇,不只是單個模型
最好的辦法是用復(fù)雜模型解決復(fù)雜問題惰蜜,用簡單模型解決簡單問題,但是必須考慮問題的另一維度受神;即,必須考慮數(shù)據(jù)規(guī)模格侯。
- 數(shù)據(jù)的分布形狀也很重要
數(shù)據(jù)集長寬比
對于列比行多的數(shù)據(jù)集或者相對簡單的問題鼻听,傾向于使用線性模型。對于行比列多很多的復(fù)雜問題联四,傾向于使用非線性模型撑碴。另一個考慮因素是訓練時間。線性方法要比非線性方法訓練時間短
度量預(yù)測模型性能
- 回歸問題
MSE MAE RMSE
代碼清單最后是方差的計算(與均值的均方誤差)以及標準差計算(方差的開方)朝墩。這些量與預(yù)測錯誤指標 MSE 以及 RMSE 進行比較非常有意義醉拓。例如,如果預(yù)測錯誤的 MSE 同目標方差幾乎相等(或者 RMSE 與目標標準差幾乎相等)收苏,這說明預(yù)測算法效果并不好亿卤,通過簡單對目標值求平均來替換預(yù)測算法就能達到幾乎相同的效果。
除了計算錯誤的摘要統(tǒng)計量以外鹿霸,查看錯誤的分布直方圖排吴、長尾分布(使用分位數(shù)或
者等分邊界)以及正態(tài)分布程度等對于分析錯誤原因以及錯誤程度也非常有用。有時這些探索會對定位錯誤原因以及提升潛在性能帶來啟發(fā)懦鼠。
*分類問題
概率 閾值
混淆矩陣
最佳決策閾值應(yīng)該是能夠最小化誤分類率的值钻哩。然而,不同類錯誤對應(yīng)的代價可能是
不同的肛冶。
一些用于估算2分類問題性能的方法同樣適用于多分類問題街氢。誤分類錯誤仍然有意義,混淆矩陣也同樣適用睦袖。有許多將 ROC 曲線以及 AUC 指標推廣到多分類應(yīng)用的工作 - 30%測試集(均勻采樣)
- n折交叉驗證
- 分層抽樣(分別從欺詐樣本以及合法樣本)
樣本外測試已經(jīng)可以給出預(yù)測錯誤的期望結(jié)果珊肃。如果能在更多數(shù)據(jù)上進行訓練,模型效果會更好,泛化能力也更好近范。真正要部署的模型應(yīng)該在所有數(shù)據(jù)上進行訓練嘶摊。
最小二乘法OLS
過擬合,列太多 最佳子集回歸
使用前向逐步回歸來控制過擬合
最佳子集選擇以及前向逐步回歸過程基本類似评矩。它們訓練一系列的模型(列數(shù)為 1 訓
練幾個叶堆,列數(shù)為 2 訓練幾個,等等)斥杜。這種方法產(chǎn)生了參數(shù)化的模型族(所有線性回歸以列數(shù)作為參數(shù))虱颗。這些模型在復(fù)雜度上存在差異,最后的模型通過在預(yù)留樣本上計算錯誤進行選擇蔗喂。
屬性已經(jīng)根據(jù)其對預(yù)測的重要性進行了排序
第一個元素是第一個選擇的屬性忘渔,第二個元素是第二個選擇的屬性,
以此類推缰儿。用到的屬性按順序排列畦粮。這是機器學習任務(wù)中一個很重要并且必需的特征。早期機器學習任務(wù)大部分都包括尋找(或者構(gòu)建)用于構(gòu)建預(yù)測的最佳屬性集乖阵。而能夠?qū)傩赃M行排序的算法對于上述任務(wù)非常有幫助宣赔。
通過懲罰回歸系數(shù)來控制過擬合——嶺回歸
最佳子集回歸以及前向逐步回歸通過限制使用的屬性個數(shù)來控制回歸的復(fù)雜度。另外一種方法稱作懲罰系數(shù)回歸瞪浸。懲罰系數(shù)回歸是使系數(shù)變小儒将,而不是將其中一些系數(shù)設(shè)為 0。一種懲罰線性回歸的方法被稱作嶺回歸对蒲。
前向逐步回歸算法生成了一系列不同的模型钩蚊,第一個模型只包含一個屬性,第
二個模型包含兩個屬性蹈矮,等等砰逻,直到最后的模型包含所有屬性。嶺回歸代碼也包含一系列的模型含滴。嶺回歸通過不同的 α 值來控制模型數(shù)量诱渤,而不是通過屬性個數(shù)來控制。α 參數(shù)決定了對β的懲罰力度谈况。
小結(jié)
本章首先給出了圍繞問題復(fù)雜性以及模型復(fù)雜性的可視化示例勺美,討論了這些因素以及數(shù)據(jù)集大小如何影響給定問題的分類性能。接著討論了針對不同問題(回歸碑韵、分類以及多分類)度量預(yù)測性能的多個評價指標赡茸,這些指標也是函數(shù)逼近問題的一部分。介紹了用于在新數(shù)據(jù)上評估性能的 2 種方法(在測試集上評估以及 n 折交叉驗證)祝闻、機器學習生成一族參數(shù)化模型的框架占卧,以及如何基于測試集的性能來選擇實際應(yīng)用的模型