特征
Features
前言叨B叨
都到第五章了, 可能有些同學(xué)開始覺得有些煩躁了, 怎么還不上真二八經(jīng)的代碼? 事實(shí)上理解這些基本概念才是關(guān)鍵. 代碼真沒幾句話, 因?yàn)樽顝?fù)雜的部分已經(jīng)由先人封裝好了, 我們只需要敲一兩句話, 再配幾個(gè)參數(shù)就妥妥的了.
今天主要講數(shù)據(jù)中特征值的處理, 上一章提到過, 特征值的處理對(duì)最后預(yù)測(cè)結(jié)果的準(zhǔn)確性有著決定性的關(guān)系. 所以這張大家務(wù)必仔細(xì)理解.
1. 特征工程(Feature engineering)
當(dāng)使用監(jiān)督學(xué)習(xí)解決問題時(shí)腰懂,我們將特征輸入到機(jī)器學(xué)習(xí)算法中蜈缤,該算法學(xué)習(xí)如何根據(jù)這些特征預(yù)測(cè)正確的輸出。這是一個(gè)簡(jiǎn)單的想法座柱,但是在實(shí)際的應(yīng)用程序中魁巩,它需要大量的嘗試和錯(cuò)誤處理來找出哪些特性對(duì)建模最有用锁孟。特征工程是利用我們對(duì)問題的認(rèn)識(shí)和分析來選擇特征或創(chuàng)建新的特性斤寂,以此使機(jī)器學(xué)習(xí)算法更精確地工作林螃。當(dāng)您構(gòu)建有監(jiān)督的學(xué)習(xí)系統(tǒng)時(shí)允耿,特性工程將消耗您的大部分時(shí)間借笙。做好特征工程會(huì)大大改善模型的質(zhì)量。
在訓(xùn)練機(jī)器學(xué)習(xí)算法時(shí)较锡,為了獲得最好的結(jié)果业稼,我們要使算法盡可能簡(jiǎn)單地建模。這意味著我們希望輸入的特征與輸出值緊密相關(guān)蚂蕴。事實(shí)上低散,無用的特征可能會(huì)損害我們系統(tǒng)的準(zhǔn)確性。讓我們看一個(gè)例子骡楼。這里有張表格列出每個(gè)房子的大小熔号,以及這些房子里盆栽植物的數(shù)量。房子的面積很可能有助于確定房子的價(jià)值鸟整。我們知道引镊,基于我們對(duì)房地產(chǎn)市場(chǎng)的了解。因此篮条,這將是一個(gè)很好的特征弟头,我們要把它包括在我們的模型中。但是我估計(jì)如果不是蘭花或是搖錢樹之類的盆栽植物,數(shù)量多少也不會(huì)影響房子的最終價(jià)值涉茧。
盆栽植物只是裝飾赴恨,它們便宜,而且很容易添加和去除伴栓。很少有人會(huì)根據(jù)房子里盆栽植物的數(shù)量來決定是否購(gòu)買塞关。在這種情況下蒜焊,這個(gè)特征似乎會(huì)在模型中引入隨機(jī)噪聲,而不是告訴我們關(guān)于我們?cè)噲D預(yù)測(cè)的實(shí)際值的任何東西,我們應(yīng)該從我們的模型中刪除這個(gè)特性竞帽。這就是特征工程的一個(gè)例子。
接下來讓我們來看一些特征工程的不同策略酬荞。
到目前為止刻像,我們已經(jīng)討論了從模型中添加和刪除特性以提高精度的方法。
- 從我們的模型中包含或排除哪些特性是特征工程最簡(jiǎn)單的形式短荐。
- 我們還可以將多個(gè)特性組合成一個(gè)特性倚舀。
顯示每個(gè)房子的英尺和英寸的高度痕貌。高度可能是衡量房子價(jià)值的一個(gè)非常有用的度量標(biāo)準(zhǔn),但是用不同單位去描述同一個(gè)特征會(huì)使模型更復(fù)雜糠排。如果嗎這兩個(gè)值同時(shí)輸入模型舵稠,那么該算法必須計(jì)算出這兩組數(shù)字是相關(guān)的,是單個(gè)測(cè)量的一部分入宦。如果我們預(yù)先處理我們的數(shù)據(jù)哺徊,只用一個(gè)單位的單個(gè)測(cè)量代替每一個(gè)高度測(cè)量就更好了。
工程策略的另一個(gè)特點(diǎn)是分級(jí)乾闰。分級(jí)是你做數(shù)值的測(cè)量和轉(zhuǎn)換成一個(gè)類落追。讓我們看一個(gè)例子。這里有一張表涯肩,我們的最后一個(gè)特征工程策略是one-hot編碼方式(one-hot encoding)阵幸。
在我們的住房數(shù)據(jù)集中,一個(gè)分類數(shù)據(jù)的例子是社區(qū)的名字荠割。我們不能直接將社區(qū)的名字輸入到我們的模型中妹卿,因?yàn)樗且淮谋径皇菙?shù)字旺矾。相反,我們需要一種方法來將每個(gè)社區(qū)表示為一個(gè)數(shù)字夺克。最簡(jiǎn)單的解決方案是給每個(gè)社區(qū)分配一個(gè)數(shù)字箕宙。但這并不適用于某些機(jī)器學(xué)習(xí)算法。
問題在于機(jī)器學(xué)習(xí)算法會(huì)認(rèn)為這些數(shù)字的順序是有意義的铺纽。它會(huì)假設(shè)大一些的數(shù)字比小一些的數(shù)字更重要柬帕。但是社區(qū)ID 2并不是社區(qū)ID 1的兩倍。這些數(shù)字的順序?qū)嶋H上毫無意義狡门。這里的解決方案是使用一個(gè)不同的表示陷寝,稱為one-hot 編碼方式。
然后,我們將每一個(gè)設(shè)置為1或0抖僵,這取決于房子是否在那個(gè)社區(qū)鲤看。這被稱為one-hot 編碼。one-hot 編碼對(duì)用機(jī)器學(xué)習(xí)模型容易理解的簡(jiǎn)單數(shù)值數(shù)據(jù)代替分類數(shù)據(jù)很有用耍群。
2. 為房?jī)r(jià)預(yù)測(cè)選擇最合適的特征
讓我們看看這個(gè)房?jī)r(jià)預(yù)測(cè)項(xiàng)目的中的數(shù)據(jù)集义桂,然后將我們所學(xué)到的關(guān)于特征工程的知識(shí)用起來。
讓我們打開view_data.py蹈垢。運(yùn)行起來后讓我們查看一下數(shù)據(jù)集中的每個(gè)特征慷吊,看看它是否需要修理修理,或者我們是否可以直接使用它曹抬。
首先看建造年份(year_built)溉瓶。這項(xiàng)特征將告訴算法的每個(gè)房子的年齡,這似乎是一個(gè)重要的因素谤民。這個(gè)特性是數(shù)字的堰酿,所以我們可以不用任何處理。接下來的幾個(gè)特點(diǎn)也是數(shù)字张足,包括房子的儲(chǔ)藏室數(shù)量触创,臥室的數(shù)目,全浴室的數(shù)目为牍,半浴室哼绑,以及實(shí)用面積和總面積岩馍。
所以我們可以跳過它們。接下來我們有車庫類型(garage_type)抖韩≈鳎看起來有三種可能的車庫類型值: 沒有車庫, 獨(dú)立車庫, 非獨(dú)立車庫。車庫類型貌似有助于我們的房?jī)r(jià)模型帽蝶,但要使用這些數(shù)據(jù)赦肋,我們需要預(yù)先用one-hot編碼方法處理它一下。
也就是說將單個(gè)特性更改為三個(gè)獨(dú)立的特性励稳。沒有車庫,有獨(dú)立的車庫囱井,還有附屬車庫驹尼。對(duì)于每一個(gè)房子,只有其中一個(gè)將被設(shè)置為true庞呕。接下來的兩個(gè)特點(diǎn)新翎,車庫和車庫的尺寸大小和平方英尺平方英尺,我們應(yīng)該能直接使用住练,無需任何額外的處理地啰。好吧,讓我們滾動(dòng)讲逛。接下來亏吝,我們有幾個(gè)true/false字段,有壁爐盏混,有游泳池蔚鸥,有集中供暖,還有中央空調(diào)许赃。true/false值在我們的模型中很好用止喷。它們將被自動(dòng)處理為1或0,所以不需要額外的處理工作混聊。
接下來我們把每個(gè)房子的地址分成五個(gè)不同的字段弹谁。有門牌號(hào)碼,街道名稱句喜,單元編號(hào)预愤,郵政編碼。在我們的模型中門牌號(hào)不會(huì)有任何用處藤滥。不太可能有人買房子是因?yàn)殚T牌號(hào)鳖粟。更高的街道數(shù)并不意味著房子更有價(jià)值,它只是一個(gè)隨機(jī)數(shù)拙绊。所以讓我們從我們的模型中刪除這個(gè)字段向图。單元數(shù)也一樣泳秀。房子的位置對(duì)價(jià)值有很大的影響,所以我們需要在我們的模型要包含一些信息榄攀。
但是嗜傅,有些字段提供重復(fù)的信息,說的是同一個(gè)意思。例如檩赢,如果我們知道一個(gè)房子的郵政編碼吕嘀,我們已經(jīng)知道它在哪個(gè)城市,所以我們可能不需要在我們的模型中同時(shí)包含城市和郵政編碼贞瞒。街道名稱是一個(gè)可以拿掉的特征偶房。一條街道就是一個(gè)很小的區(qū)域,有時(shí)在某一條街上可能會(huì)增加房屋的價(jià)值,但在我們的模型中包括街道名稱會(huì)使我們的模型復(fù)雜得多军浆,因?yàn)樵谖覀儜?yīng)用一個(gè)one-hot編碼之后棕洋,我們將為數(shù)據(jù)集中的每一條街道提供一個(gè)新的特性。因此乒融,讓我們先把這個(gè)城市留在我們的模型中掰盘,然后對(duì)它應(yīng)用one-hot編碼。
現(xiàn)在我們不包含任何其他地址字段赞季。這就是為什么特性工程是需要大量的嘗試和排錯(cuò)愧捕。如果我們?cè)谀P椭兄话鞘忻Q,并不能得到好的結(jié)果申钩,我們可能想再次使用街道名或其他地址字段再試一次次绘。除非我們兩種方法都試過,否則無法提前知道哪種方法會(huì)更好.
最后一點(diǎn)是房子的售價(jià)典蜕。這就是我們?cè)噲D用我們的模型預(yù)測(cè)的y值或目標(biāo)值《鲜ⅲ現(xiàn)在我們已經(jīng)單獨(dú)研究了每個(gè)字段,對(duì)于在模型中哪些特征需要修剪我們現(xiàn)在有了個(gè)基本概念愉舔。這將使我們的代碼更容易編寫钢猛。
3. 特征值用得越少越好:維度災(zāi)難(curse of dimensionality)
在構(gòu)建機(jī)器學(xué)習(xí)模型時(shí),盡可能地包含模型中的許多特征似乎是個(gè)好主意轩缤。數(shù)據(jù)越多越好命迈,對(duì)嗎?事實(shí)證明火的,然鵝并不總是這樣壶愤。當(dāng)我們?cè)跀?shù)據(jù)集中討論更多數(shù)據(jù)時(shí),我們可以指兩種不同的東西馏鹤。首先征椒,我們可以討論數(shù)據(jù)集中更多的數(shù)據(jù)行。對(duì)于我們的住房數(shù)據(jù)集湃累,擁有更多的房屋記錄是件好事勃救。但我們也可以在數(shù)據(jù)中擁有更多的特性或列碍讨。有更多的功能是有幫助的,直到某一個(gè)閾值蒙秒。終撞到了一堵墻--更多的特征反而降低了準(zhǔn)確性勃黍。
我們?nèi)匀挥泻鸵郧耙粯拥?00個(gè)數(shù)據(jù)點(diǎn)豆村,但是現(xiàn)在我們添加了另一個(gè)特征液兽,或者維度,這100個(gè)數(shù)據(jù)點(diǎn)只覆蓋了圖中可能的總面積的一小部分掌动。為了更好地覆蓋這個(gè)圖表中所有可能的區(qū)域四啰,我們現(xiàn)在需要的數(shù)據(jù)是我們的一維房?jī)r(jià)預(yù)測(cè)的10倍。換句話說粗恢,當(dāng)我們?cè)跈C(jī)器學(xué)習(xí)系統(tǒng)中添加更多的特性時(shí)柑晒,我們需要一個(gè)指數(shù)級(jí)的數(shù)據(jù)行來覆蓋增加的空間。當(dāng)我們開始獲取成百上千的特征時(shí)眷射,數(shù)據(jù)量和訓(xùn)練系統(tǒng)所需的時(shí)間可能是令人望而卻步的匙赞。
因此,在構(gòu)建機(jī)器學(xué)習(xí)系統(tǒng)時(shí)妖碉,不能為了增加特征數(shù)量而增加特征涌庭。你的目標(biāo)是加入對(duì)預(yù)測(cè)有用的特征,排除對(duì)預(yù)測(cè)無效或者破壞的特征欧宜。
結(jié)語
本章至此, 后面還有三章. 待我慢慢道來.
如有錯(cuò)誤請(qǐng)高手指正.
你的 關(guān)注-收藏-轉(zhuǎn)發(fā) 是我繼續(xù)分享的動(dòng)力!