機器學習與人工智能基礎:價值估算(第五章-特征)

特征
Features


前言叨B叨

都到第五章了, 可能有些同學開始覺得有些煩躁了, 怎么還不上真二八經的代碼? 事實上理解這些基本概念才是關鍵. 代碼真沒幾句話, 因為最復雜的部分已經由先人封裝好了, 我們只需要敲一兩句話, 再配幾個參數就妥妥的了.
今天主要講數據中特征值的處理, 上一章提到過, 特征值的處理對最后預測結果的準確性有著決定性的關系. 所以這張大家務必仔細理解.

1. 特征工程(Feature engineering)

當使用監督學習解決問題時,我們將特征輸入到機器學習算法中,該算法學習如何根據這些特征預測正確的輸出。這是一個簡單的想法,但是在實際的應用程序中,它需要大量的嘗試和錯誤處理來找出哪些特性對建模最有用。特征工程是利用我們對問題的認識和分析來選擇特征或創建新的特性,以此使機器學習算法更精確地工作。當您構建有監督的學習系統時,特性工程將消耗您的大部分時間。做好特征工程會大大改善模型的質量。

在訓練機器學習算法時,為了獲得最好的結果,我們要使算法盡可能簡單地建模。這意味著我們希望輸入的特征與輸出值緊密相關。事實上,無用的特征可能會損害我們系統的準確性。讓我們看一個例子。這里有張表格列出每個房子的大小,以及這些房子里盆栽植物的數量。

房子的面積很可能有助于確定房子的價值。我們知道,基于我們對房地產市場的了解。因此,這將是一個很好的特征,我們要把它包括在我們的模型中。但是我估計如果不是蘭花或是搖錢樹之類的盆栽植物,數量多少也不會影響房子的最終價值。
盆栽植物只是裝飾,它們便宜,而且很容易添加和去除。很少有人會根據房子里盆栽植物的數量來決定是否購買。在這種情況下,這個特征似乎會在模型中引入隨機噪聲,而不是告訴我們關于我們試圖預測的實際值的任何東西,我們應該從我們的模型中刪除這個特性。這就是特征工程的一個例子。

接下來讓我們來看一些特征工程的不同策略
到目前為止,我們已經討論了從模型中添加和刪除特性以提高精度的方法。

  • 從我們的模型中包含或排除哪些特性是特征工程最簡單的形式。
  • 我們還可以將多個特性組合成一個特性。

讓我們看一個例子。這里有一張表,
image.png

顯示每個房子的英尺和英寸的高度。高度可能是衡量房子價值的一個非常有用的度量標準,但是用不同單位去描述同一個特征會使模型更復雜。如果嗎這兩個值同時輸入模型,那么該算法必須計算出這兩組數字是相關的,是單個測量的一部分。如果我們預先處理我們的數據,只用一個單位的單個測量代替每一個高度測量就更好了。

工程策略的另一個特點是分級。分級是你做數值的測量和轉換成一個類。讓我們看一個例子。這里有一張表,

上面列有房子和游泳池的長度。泳池的確切大小與房子是否有游泳池幾乎沒有關系。有些買家想要有池的房子,有些不需要。所以在這種情況下,我們可以預處理數據,并用真/假特征替換數字特征池大小。這簡化了模型。

我們的最后一個特征工程策略是one-hot編碼方式(one-hot encoding)。

當我們的模型中有分類數據時,我們必須先處理然后才能使用它。one-hot編碼是之中讓機器學習模型可以理解的數據分類方法。讓我們看一個例子。

在我們的住房數據集中,一個分類數據的例子是社區的名字。我們不能直接將社區的名字輸入到我們的模型中,因為它是一串文本而不是數字。相反,我們需要一種方法來將每個社區表示為一個數字。最簡單的解決方案是給每個社區分配一個數字。但這并不適用于某些機器學習算法。
問題在于機器學習算法會認為這些數字的順序是有意義的。它會假設大一些的數字比小一些的數字更重要。但是社區ID 2并不是社區ID 1的兩倍。這些數字的順序實際上毫無意義。這里的解決方案是使用一個不同的表示,稱為one-hot 編碼方式。

讓我們再看看原來的房子清單。在所有的三間房子,有兩個不同的社區,normaltown Skid Row。在one-hot 編碼中,我們在數據集中為分類數據中的每個唯一類別創建一個新特性。在這里,我們已經創造了is_normaltown和is_skidrow兩個特征。

然后,我們將每一個設置為1或0,這取決于房子是否在那個社區。這被稱為one-hot 編碼。one-hot 編碼對用機器學習模型容易理解的簡單數值數據代替分類數據很有用。

2. 為房價預測選擇最合適的特征

讓我們看看這個房價預測項目的中的數據集,然后將我們所學到的關于特征工程的知識用起來。
讓我們打開view_data.py。運行起來后讓我們查看一下數據集中的每個特征,看看它是否需要修理修理,或者我們是否可以直接使用它。


首先看建造年份(year_built)。這項特征將告訴算法的每個房子的年齡,這似乎是一個重要的因素。這個特性是數字的,所以我們可以不用任何處理。接下來的幾個特點也是數字,包括房子的儲藏室數量,臥室的數目,全浴室的數目,半浴室,以及實用面積和總面積。
所以我們可以跳過它們。接下來我們有車庫類型(garage_type)。看起來有三種可能的車庫類型值: 沒有車庫, 獨立車庫, 非獨立車庫。車庫類型貌似有助于我們的房價模型,但要使用這些數據,我們需要預先用one-hot編碼方法處理它一下。
也就是說將單個特性更改為三個獨立的特性。沒有車庫,有獨立的車庫,還有附屬車庫。對于每一個房子,只有其中一個將被設置為true。接下來的兩個特點,車庫和車庫的尺寸大小和平方英尺平方英尺,我們應該能直接使用,無需任何額外的處理。好吧,讓我們滾動。接下來,我們有幾個true/false字段,有壁爐,有游泳池,有集中供暖,還有中央空調。true/false值在我們的模型中很好用。它們將被自動處理為1或0,所以不需要額外的處理工作。
接下來我們把每個房子的地址分成五個不同的字段。有門牌號碼,街道名稱,單元編號,郵政編碼。在我們的模型中門牌號不會有任何用處。不太可能有人買房子是因為門牌號。更高的街道數并不意味著房子更有價值,它只是一個隨機數。所以讓我們從我們的模型中刪除這個字段。單元數也一樣。房子的位置對價值有很大的影響,所以我們需要在我們的模型要包含一些信息。
但是,有些字段提供重復的信息,說的是同一個意思。例如,如果我們知道一個房子的郵政編碼,我們已經知道它在哪個城市,所以我們可能不需要在我們的模型中同時包含城市和郵政編碼。街道名稱是一個可以拿掉的特征。一條街道就是一個很小的區域,有時在某一條街上可能會增加房屋的價值,但在我們的模型中包括街道名稱會使我們的模型復雜得多,因為在我們應用一個one-hot編碼之后,我們將為數據集中的每一條街道提供一個新的特性。因此,讓我們先把這個城市留在我們的模型中,然后對它應用one-hot編碼。
現在我們不包含任何其他地址字段。這就是為什么特性工程是需要大量的嘗試和排錯。如果我們在模型中只包含城市名稱,并不能得到好的結果,我們可能想再次使用街道名或其他地址字段再試一次。除非我們兩種方法都試過,否則無法提前知道哪種方法會更好.

最后一點是房子的售價。這就是我們試圖用我們的模型預測的y值或目標值。現在我們已經單獨研究了每個字段,對于在模型中哪些特征需要修剪我們現在有了個基本概念。這將使我們的代碼更容易編寫。

3. 特征值用得越少越好:維度災難(curse of dimensionality)

在構建機器學習模型時,盡可能地包含模型中的許多特征似乎是個好主意。數據越多越好,對嗎?事實證明,然鵝并不總是這樣。當我們在數據集中討論更多數據時,我們可以指兩種不同的東西。首先,我們可以討論數據集中更多的數據行。對于我們的住房數據集,擁有更多的房屋記錄是件好事。但我們也可以在數據中擁有更多的特性或列。有更多的功能是有幫助的,直到某一個閾值。終撞到了一堵墻--更多的特征反而降低了準確性。

這個現象被稱為維度災難(curse of dimensionality)。維數災難意思是說,當我們為模型添加更多的特性時,建立一個好模型所需的訓練數據行數趨向指數增長。讓我們看一個例子。

假設我們的房價預測只使用了一個特征,房子的大小。在這里,我們繪制的是100條房價數據。有100個數據點,我們對圖的所有區域都有很好的覆蓋率。現在,讓我們為數據集添加另一個維度。假設我們的房價預測用的是房子的大小、平方英尺和臥室的數量。

我們仍然有和以前一樣的100個數據點,但是現在我們添加了另一個特征,或者維度,這100個數據點只覆蓋了圖中可能的總面積的一小部分。為了更好地覆蓋這個圖表中所有可能的區域,我們現在需要的數據是我們的一維房價預測的10倍。換句話說,當我們在機器學習系統中添加更多的特性時,我們需要一個指數級的數據行來覆蓋增加的空間。當我們開始獲取成百上千的特征時,數據量和訓練系統所需的時間可能是令人望而卻步的。
因此,在構建機器學習系統時,不能為了增加特征數量而增加特征。你的目標是加入對預測有用的特征,排除對預測無效或者破壞的特征。

結語

本章至此, 后面還有三章. 待我慢慢道來.
如有錯誤請高手指正.

你的 關注-收藏-轉發 是我繼續分享的動力!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,156評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,401評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,069評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,873評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,635評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,128評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,203評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,365評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,881評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,733評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,935評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,475評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,172評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,582評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,821評論 1 282
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,595評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,908評論 2 372

推薦閱讀更多精彩內容