寫給人類的機器學習 2.3 監(jiān)督學習 III

2.3 監(jiān)督學習 III

原文:Machine Learning for Humans, Part 2.3: Supervised Learning III

作者:Vishal Maini

譯者:飛龍

協(xié)議:CC BY-NC-SA 4.0

非參數(shù)化模型:KNN婶熬、決策樹和隨機森林褐隆。包含交叉驗證秀又、超參數(shù)調(diào)優(yōu)和集成模型灭美。

非參數(shù)學習器

事情變得有點...奇怪了。

我們目前為止涉及的方法,線性回歸被辑,對率回歸和 SVM 制恍,它們的模型形式是預定義的。與之相反宽菜,非參數(shù)學習器事先沒有特定的模型結構谣膳。在訓練模型之前,我們不會推測我們嘗試習得的函數(shù)f的形式铅乡,就像之前的線性回歸那樣继谚。反之,模型結構純粹由數(shù)據(jù)定義阵幸。

這些模型對于訓練數(shù)據(jù)的形狀更加靈活花履,但是有時會有可解釋性的代價。不久你就會更理解它挚赊。讓我們繼續(xù)吧诡壁。

K 最近鄰(KNN)

你是你的最親密的 K 個朋友的均值。

KNN 看起來圖樣圖森破荠割,不像是機器學習算法妹卿。它的思路是,通過尋找 K 個最近的數(shù)據(jù)點的標簽涨共,來標記測試數(shù)據(jù)點x纽帖。

看一看下面的圖像。讓我們假設举反,你想知道懊直,迷之綠色圓圈是紅色三角還是藍色方塊。你怎么做呢火鼻?

你可以嘗試提出一個迷之方程室囊,它查看綠色圓圈在坐標平面的哪里雕崩,并作出相應的預測∪谧玻或者盼铁,你可以僅僅查看三個最近的鄰居,并猜測綠色圓圈可能是個紅色三角尝偎。你也可以進一步擴展圓圈饶火,并查看五個最近鄰焚碌,并這樣作出預測(五個最近鄰里面涌哲,有三個藍色方塊,所以我們猜測黎棠,k=5時迷之綠色圓圈是藍色方塊抖僵。

KNN 的演示鲤看,其中k=1, 3, 5。為了劃分上面的迷之綠色圓圈(x)耍群,查看它的單個最近鄰义桂,是個“紅色三角”。所以我們猜測?為“紅色三角”蹈垢。k=3時慷吊,查看三個最近鄰:這里的眾數(shù)仍然是“紅色三角”,所以?為“紅色三角”耘婚。k=5時罢浇,我們選取五個最近鄰的眾數(shù),要注意?變?yōu)榱恕八{色方塊”沐祷。圖片來自維基百科嚷闭。

就是這樣。這就是 KNN赖临。你查看了 K 個最近的數(shù)據(jù)點胞锰,如果變量是連續(xù)的(例如房價),取它們的均值兢榨;如果變量是離散的(例如貓或者狗)嗅榕,取它們的眾數(shù)。

如果你打算猜測未知房價吵聪,你可以選取一些地理上鄰近的房子凌那,然后取平均,你就會得到一些很棒的猜測吟逝。這可能甚至優(yōu)于參數(shù)化回歸模型帽蝶,一些經(jīng)濟學家構建了它們來估計臥室/浴室、鄰近的學校块攒、公共交通的距離励稳,以及其它的數(shù)量的參數(shù)佃乘。

如何使用 KNN 來預測房價:

  1. 儲存訓練集。X是特征驹尼,例如郵政編碼趣避、鄰居、臥室數(shù)量新翎、面積程帕、公共交通的距離,以及其它地啰。Y是對應的售價骆捧。
  1. 將你的訓練集排序,按照與測試集中的房子的相似性髓绽,基于X中的特征。我們下面會定義“相似性”妆绞。
  1. 計算 K 個最鄰近的房子的均值顺呕。這就是你對售價(也就是?)的猜測。

KNN 不需要預定義的參數(shù)化函數(shù)f(X)括饶,它用于將YX相關聯(lián)株茶。這使得它更適合關系過于復雜,不能用簡單的線性模型表示的情況图焰。

距離度量:定義和計算“鄰近性”

在尋找“最近鄰”的時候启盛,你如何計算問題中的數(shù)據(jù)點的距離呢?你如何在數(shù)學上判斷技羔,示例中的哪個藍色方塊和紅色三角更接近綠色圓圈僵闯?尤其是,如果你無法畫出一幅漂亮的二維圖像藤滥,用眼睛觀測它鳖粟?

最直接的度量是歐氏(幾何)距離(“像烏鴉飛過”的一條直線)。另一個是曼哈頓(街區(qū))距離拙绊,就像在城市塊中行走向图。你可以想象,在涉及到 Uber 司機的費用計算的模型中标沪,曼哈頓距離更加實用榄攀。

綠色直線為歐氏距離。藍色直線為曼哈頓距離金句。來源:維基百科

還記得用于尋找直角三角形斜邊長度的畢達哥拉斯(勾股)定理嘛檩赢?

c為斜邊(上面的綠色直線),ab是兩個直角邊(上面的紅色直線)趴梢。

通過計算ab長度的平方和的平方根漠畜,我們就解出了c币他,求出了斜邊長度。這里ab是三角形的直角(正交)邊(也就是憔狞,它們互為 90 度角蝴悉,在空間中垂直)。

給定兩個正交方向的向量的情況下瘾敢,求解斜邊長度的思路拍冠,可以推廣到多維。這就是 N 維空間的點pq的歐氏距離d(p,q)的推導方式:

歐氏距離的公式簇抵,由勾股定理推出庆杜。

使用這個公式,你可以計算所有訓練數(shù)據(jù)點碟摆,到你嘗試標注的數(shù)據(jù)點的鄰近度晃财,并選取 K 個最近鄰的均值或眾數(shù),來做出你的預測典蜕。

通常你不需要手動計算任何距離断盛,用搜索引擎簡單搜索一下,你就能在 NumPy 或者 SciPy 找到預構建的函數(shù)愉舔,會為你做這個事情钢猛,例如,euclidean_dist = numpy.linalg.norm(p-q)轩缤。但是看到八年級的集合概念如何有助于構建當今的 ML 模型命迈,這很有趣。

選取k:使用交叉驗證調(diào)優(yōu)超參數(shù)

為了決定我們使用哪個k火的,你可以測試不同的 KNN 模型壶愤,使用交叉驗證以及k的不同值。

  • 將你的訓練集分成兩部分卫玖,在一部分上訓練模型公你,將保留的部分用作測試集。

  • 通過將模型的預測(?)假瞬,與測試數(shù)據(jù)的真實值(y)相比陕靠,看看你的模型表現(xiàn)如何。

  • 在所有迭代中脱茉,通常選取誤差最小的模型剪芥。

交叉驗證的演示。分塊和迭代的數(shù)量可以修改琴许。

K 的較高值防止過擬合

K 的較高值能防止過擬合税肪,但是如果 K 太高的話,你的模型會有很大偏差,并且不靈活益兄。選取一個極端的示例:如果k=N(數(shù)據(jù)點的總數(shù))锻梳,模型就失效了,將所有測試數(shù)據(jù)分類為訓練數(shù)據(jù)的均值或者眾數(shù)净捅。

如果動物數(shù)據(jù)集中的單個最常見的動物是蘇格蘭折耳貓疑枯,k=N(訓練觀測值數(shù)量)的 KNN 會將實際上的每個其它動物預測成它。在 Vishal 看來蛔六,這個很棒荆永,但 Samer 不同意。

完全沒有來由的蘇格蘭折耳貓.gif国章。我們可以休息一下具钥。

真實世界中使用 KNN 的地方

一些你可以使用 KNN 的地方:

  • 分類:詐騙檢測。模型可以使用新的訓練樣本馬上更新液兽,因為你僅僅是存儲新的數(shù)據(jù)點骂删,這允許你快速適應新的詐騙方法。

  • 回歸:預測房價四啰。在房價預測中桃漾,字面上的“最近鄰”實際上很好暗示了價格上的相似。KNN 在物理相似性很重要的領域很實用拟逮。

  • 填充缺失的訓練數(shù)據(jù)。如果你的.csv中的一列有大量缺失值适滓,你可以通過選取均值或者眾數(shù)填充數(shù)據(jù)敦迄。KNN 可能會給你每個缺失值的更加準確的猜測。

決策樹和隨機森林

制作一顆好的決策樹就像玩“20個問題”的游戲凭迹。

右邊的決策樹描述了泰坦尼克號的生還者規(guī)律罚屋。

決策樹根節(jié)點的第一次分割,就像是 20 個問題中的第一個問題:你打算盡可能干凈地分隔數(shù)據(jù)嗅绸,所以這個分割的信息增益應該最大脾猛。

如果你的朋友說,“我正在想一個名詞鱼鸠,問我 20 個是或不是的問題來猜猜它”猛拴,并且你的第一個問題是“它是土豆嘛?”蚀狰,你就太蠢了愉昆。因為如果它們說“不是”,你沒有獲得任何信息麻蹋。除非你知道你的朋友整天都在想土豆跛溉,或者剛剛在想它,那么你就猜對了。

反之芳室,類似“這是一個物體嘛专肪?”的問題可能更有意義。

這有點類似醫(yī)院分類病人堪侯,或者做出不同的診斷的方式嚎尤。它們先問一些問題,并檢查一些重要的指標來判斷你是否馬上就要掛了抖格,還是不是诺苹。當你進門的時候,它們不會一開始就做切片檢查雹拄,或者檢查你是否得了胰腺癌收奔。

有幾種方式來量化信息增益,以便你能根本上求解訓練集的每個可能的分割滓玖,以及每個分割的信息增益坪哄。你可以用這個方式,盡可能高效地預測每個標簽或值势篡。

現(xiàn)在翩肌,讓我們查看一個特定的數(shù)據(jù)集,并討論我們?nèi)绾芜x擇分割禁悠。

泰坦尼克數(shù)據(jù)集

Kaggle 的泰坦尼克數(shù)據(jù)集大量用于機器學習入門念祭。當泰坦尼克沉沒時,2224 個乘客和乘員中有 1502 個死亡碍侦。雖然包含一些運氣成分粱坤,女人、孩子和頭等艙更有可能生還瓷产。如果你回去看看上面的決策樹站玄,你會看到,它某些程度上反映了性別濒旦、年齡和艙位的變化株旷。

選擇決策樹中的分割

熵是集合中的無序的總數(shù),由基尼系數(shù)交叉熵度量尔邓。如果值相當混雜晾剖,熵就很大;如果你能干凈地分割數(shù)據(jù)梯嗽,就沒有熵钞瀑。對于父節(jié)點的每個分割,你需要讓子節(jié)點盡可能純粹慷荔,也就是熵最小雕什。例如缠俺,在泰坦尼克中,性別是生還者的重要決定因素贷岸,所以將這個特征用于第一次分割十分有意義壹士,并且它是擁有最大信息增益的特征。

讓我們看一看泰坦尼克的變量:

來源:Kaggle

我們通過選取這些變量之一偿警,以及根據(jù)它分割數(shù)據(jù)集躏救,來構建決策樹。

第一次分割將我們的數(shù)據(jù)集分為男性和女性螟蒸。之后女性分支又按照年齡分割(使熵最小的分割)盒使。與之類似,男性分支按照艙位分割七嫌。通過對新的乘客遍歷這棵樹少办,你可以使用它來猜測它們是否掛了。

泰坦尼克的示例解決了分類問題(生存或者死亡)诵原。如果我們將決策樹用于回歸英妓,例如預測房價,我們可以分割決定房價的最重要的特征绍赛。面積:大于或小于 xxx蔓纠?臥室或者浴室數(shù)量:大于或小于 xxx?

之后吗蚌,在測試期間腿倚,你需要用特定的房子遍歷所有分割,并取葉子節(jié)點的所有房價的均值(最底下的節(jié)點)蚯妇,這些房子就會成為你的售價預測猴誊。

決策樹是高效的,因為它們易于解讀侮措,即使對凌亂的數(shù)據(jù)也很強大,并且一旦訓練完成乖杠,部署的開銷很小分扎。決策樹也擅長于處理混合數(shù)據(jù)(數(shù)值或類別)。

也就是說胧洒,決策樹的訓練開銷很大畏吓,過擬合的風險很大,并且容易找到局部最優(yōu)卫漫,因為它們在分割之后就不能回溯了菲饼。為了解決這些缺陷,我們轉向了一種方式列赎,它演示了將多個決策樹整合為一個模型的力量宏悦。

隨機森林:決策樹的集成

由多個模型整合的模型叫做集成模型,這通常是一個制勝策略。

單個決策樹可能做出很多錯誤判斷饼煞,因為它有很多非黑即白的判斷源葫。隨機森林是個元估計其,它繼承了多個決策樹砖瞧,并擁有一些可觀的改進:

  • 每個節(jié)點上分割的特征數(shù)量限制為總體的一定百分比(這是個可以調(diào)整的超參數(shù)息堂,詳見 scikit-learn 的文檔)。這確保了繼承模型不會過度依賴單個特征块促,并且公平地利用所有潛在的預測性特征荣堰。

  • 每棵樹從原始數(shù)據(jù)集抽取隨機樣本,來生成自己的分割竭翠,這添加了進一步的隨機元素來防止過擬合振坚。

這些改進也防止了樹的高度相關。如果沒有上面的第一條和第二條逃片,每棵樹都是相同的屡拨,因為遞歸的二元分割時決定性的。

為了演示褥实,看看下面的九個決策樹分類器:

來源:http://xenon.stanford.edu/~jianzh/ml/

這些決策樹分類器可以集成到隨機森林中呀狼,它整合了這些輸入。將橫軸和縱軸看做特征x1x2损离。對于每個特征的特定值哥艇,決策樹輸出“藍色”、“綠色”和“紅色”的分類僻澎。

這些結果通過眾數(shù)(分類)或者均值(回歸)整合為單個集成模型貌踏,它優(yōu)于單個決策樹的輸出。

隨機森林是建模過程的一個非常不錯的起始點窟勃,因為它們對于不整潔的數(shù)據(jù)擁有高容忍度的強大表現(xiàn)祖乳。并且,對于在眾多特征中找到最重要的特征非常實用秉氧。

也有很多機智的繼承模型眷昆,它組合了決策樹并產(chǎn)生非常棒的表現(xiàn)。請查看 XGBoost(eXtreme Gradient Boosting)的示例汁咏。

之后亚斋,我們就完成了監(jiān)督學習的學習

非常不錯。這一節(jié)中我們涉及了:

  • 兩個非參數(shù)監(jiān)督學習算法:KNN 和決策樹
  • 距離和信息增益的度量
  • 隨機森林攘滩,它是集成模型的示例
  • 交叉驗證和超參數(shù)調(diào)優(yōu)

我希望帅刊,你現(xiàn)在有了一些可靠的直覺,對于在給定訓練集的情況下漂问,我們?nèi)绾瘟暤?code>f赖瞒,以及使用它和測試數(shù)據(jù)做出預測女揭。

在“第三部分:無監(jiān)督學習”中,我們討論當我們擁有不帶標簽的訓練集時冒黑,如何解決問題田绑。

練習材料和擴展閱讀

2.3a 實現(xiàn) KNN

嘗試這個攻略,在 Python 中從零開始實現(xiàn) KNN抡爹。你可能也打算看一看 scikit-learn 的文檔掩驱,來體驗預構建的實現(xiàn)的工作方式。

2.3b 決策樹

嘗試《An Introduction to Statistical Learning》中的第八章的決策樹實驗冬竟。你可以使用泰坦尼克訓練集來玩玩欧穴,并且查看這個教程,它涵蓋了與上面相同的概念和代碼泵殴。這里是隨機森林的 scikit-learn 實現(xiàn)涮帘,可以在數(shù)據(jù)集上開箱即用。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末笑诅,一起剝皮案震驚了整個濱河市调缨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌吆你,老刑警劉巖弦叶,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異妇多,居然都是意外死亡伤哺,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門者祖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來立莉,“玉大人,你說我怎么就攤上這事七问◎殉埽” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵械巡,是天一觀的道長刹淌。 經(jīng)常有香客問我,道長坟比,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任嚷往,我火速辦了婚禮葛账,結果婚禮上,老公的妹妹穿的比我還像新娘皮仁。我一直安慰自己籍琳,他們只是感情好菲宴,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著趋急,像睡著了一般喝峦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上呜达,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天谣蠢,我揣著相機與錄音,去河邊找鬼查近。 笑死眉踱,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的霜威。 我是一名探鬼主播谈喳,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼戈泼!你這毒婦竟也來了婿禽?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤大猛,失蹤者是張志新(化名)和其女友劉穎扭倾,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體胎署,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡吆录,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了琼牧。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恢筝。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖巨坊,靈堂內(nèi)的尸體忽然破棺而出撬槽,到底是詐尸還是另有隱情,我是刑警寧澤趾撵,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布侄柔,位于F島的核電站,受9級特大地震影響占调,放射性物質發(fā)生泄漏暂题。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一究珊、第九天 我趴在偏房一處隱蔽的房頂上張望薪者。 院中可真熱鬧,春花似錦剿涮、人聲如沸言津。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽悬槽。三九已至怀吻,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間初婆,已是汗流浹背蓬坡。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留烟逊,地道東北人渣窜。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像宪躯,于是被迫代替她去往敵國和親乔宿。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容