機器學習_學習筆記系列(12):多重特徵(Multi-Features)和讀熱編碼(One-Hot Encoding)

--

到目前為止,我們碰到的回歸和分類問題,都只有一兩個輸入值作為特徵,像是平面二元分類,只用到x1和x2資料,回歸問題只用到一個數入值x而已。那我們今天處理的是多重特徵(multi-features)呢?,像是在辨識動物一樣,我們可能要知道,這個動物的身長、腳長、頭的大小、和體型大小和有沒有翅膀之類的。

而且如果我們今天碰到的特徵只有文字表示怎麼分類呢?像是預測台北房價,我們拿到的資料,可能包括,信義區、大安區、中山區、中正區等等,這些東西該怎麼用數字來量化呢?而在解決這方面的問題,我們叫做

特徵工程(feature engineering)。

而今天我們要做的就是來「預測台北預售屋的房價!」我們希望我們能做到的就是輸入對應的資料,如區域、坪數大小、衛浴房間幾間等,我們的模型就能告訴我,這間房子的房價大概多少。

我們的資料來自政府資料開放平台的非本期發布之實價批次資料[1],裡面含各季實價登錄的資料,而我們的資料選用107年總共四季的資料。

而我們打開每筆資料後,我們可以看到解壓縮檔裡面有各縣市的檔案,而我們要取的是每個資料夾裡面檔名為「a_lvr_land_b」的csv檔,意思就是台北市預售屋的資料集。

接著我們拿到資料後對其做資料前處理,把我們不會用到的資料移除,並把四季的資料合併在一起。

接著我們先從比較好處理的開始,把裡面為數字的資料,像是土地移轉總面積、建物移轉總面積、房數、廳數、衛浴數、總價,做normalize。

接下來就是處理比較複雜的部份。就是針對我們文字的地方,如鄉鎮市區、使用分區、建材等資料進行量化,那這些文字到底要怎麼量化呢?這裡我們需要用到的就是「讀熱編碼(One-Hot Encoding)」

One-Hot Encoding

對於讀熱編碼法,我們以鄉鎮市區為例子,我們可以看到這個欄位有各種不同的區,如信義區、大同區、中山區等等,而我們的作法就是把每個區域,全部挑出來,分別成立一個欄位,然後像是第一個欄,為信義區,我們就把所有資料裡面出現過信義區的行數,在信義區這個欄位標示為1,其他標示為0,接著下一個區域為中山區,我們用一樣的方法,創造一個中山區的欄為,然後資料裡面出現過中山區的位置標示為1,其他保留為0。 依此類推。最後我們做出來的表格長這樣。

然後對於其他的欄位像是,「都市土地使用分區」、「建物型態」、「主要用途」,我們都用一樣的方法去進行資料處理。而對於「主要建材」和「隔間」,因為欄位項目只有兩種,所以我們創建一個欄位就好。最後我們將所有處理後的資料整合成一個表

接著就是進入我們模型分析的步驟,這裡我們運用線性回歸分析,最後出來的結果為

這裡我們以標準化過的真實房價為x軸,經過模型計算出的預測房價為y軸,我們可以看到,當房價比較偏向平均值時,我們的預測結果就比較接近真實結果,但是當房價變高後,我們可以看到其就開始偏離我們的模型。

而我們更進一步,把各欄位的權重化顯示出來。

我們可以看到權重比較大的欄位有,大安區、松山區、隔間、建物移轉面積。對於隔間和移轉面積這個不難理解,其的確會大大影響房價,而大安區和松山區也不難理解,這裡的房價真的在台北市是非常貴……。

Python Sample Code:

Github:

Reference:

[1] 非本期發布之實價批次資料 | 政府資料開放平臺 (data.gov.tw)

***本系列完全沒有開任何營利***

作者:劉智皓

linkedin: CHIH-HAO LIU

--

--

劉智皓 (Chih-Hao Liu)
劉智皓 (Chih-Hao Liu)

Written by 劉智皓 (Chih-Hao Liu)

豬屎屋AI RD,熱愛AI研究、LLM/SD模型、RAG應用、CUDA/HIP加速運算、訓練推論加速,同時也是5G技術愛好者,研讀過3GPP/ETSI/O-RAN Spec和O-RAN/ONAP/OAI開源軟體。

No responses yet