現在我們已經介紹了一些用于構建和訓練深度網絡并使用包括權重衰減和丟失在內的技術對其進行正則化的基本工具,我們準備通過參加 Kaggle 競賽將所有這些知識付諸實踐。房價預測競賽是一個很好的起點。數據相當通用,沒有表現出可能需要專門模型(如音頻或視頻可能)的奇異結構。該數據集由 De Cock ( 2011 )收集,涵蓋 2006 年至 2010 年愛荷華州埃姆斯的房價。 它比Harrison 和 Rubinfeld (1978)著名的波士頓住房數據集大得多,擁有更多的例子和更多的特征。
在本節中,我們將帶您了解數據預處理、模型設計和超參數選擇的詳細信息。我們希望通過實踐方法,您將獲得一些直覺,這些直覺將指導您作為數據科學家的職業生涯。
5.7.1. 下載數據
在整本書中,我們將在各種下載的數據集上訓練和測試模型。在這里,我們實現了兩個實用函數來下載文件和提取 zip 或 tar 文件。同樣,我們將它們的實現推遲到 第 23.7 節。
def download(url, folder, sha1_hash=None):
"""Download a file to folder and return the local filepath."""
def extract(filename, folder):
"""Extract a zip/tar file into folder."""
5.7.2. 格格
Kaggle是一個舉辦機器學習競賽的流行平臺。每場比賽都以數據集為中心,許多比賽由利益相關者贊助,他們為獲勝的解決方案提供獎勵。該平臺幫助用戶通過論壇和共享代碼進行交互,促進協作和競爭。雖然排行榜追逐經常失控,研究人員短視地關注預處理步驟而不是提出基本問題,但平臺的客觀性也具有巨大價值,該平臺有助于競爭方法之間的直接定量比較以及代碼共享,以便每個人都可以了解哪些有效,哪些無效。如果你想參加 Kaggle 比賽,你首先需要注冊一個賬號(見圖 5.7.1)。
在房價預測比賽頁面,如圖 5.7.2所示,可以找到數據集(在“數據”選項卡下),提交預測,就可以看到你的排名,網址在這里:
5.7.3. 訪問和讀取數據集
請注意,比賽數據分為訓練集和測試集。每條記錄包括房屋的屬性值和街道類型、建造年份、屋頂類型、地下室狀況等屬性。特征由各種數據類型組成。例如,建造年份用整數表示,屋頂類型用離散的分類分配表示,其他特征用浮點數表示。這就是現實使事情復雜化的地方:例如,一些數據完全缺失,缺失值簡單地標記為“na”。每個房子的價格僅包含在訓練集中(畢竟這是一場比賽)。我們希望對訓練集進行分區以創建驗證集,但我們只能在將預測上傳到 Kaggle 后才能在官方測試集上評估我們的模型。圖 5.7.2有下載數據的鏈接。
首先,我們將pandas
使用我們在第 2.2 節中介紹的方法讀入和處理數據。為了方便起見,我們可以下載并緩存 Kaggle 住房數據集。如果與此數據集對應的文件已存在于緩存目錄中并且其 SHA-1 匹配sha1_hash
,我們的代碼將使用緩存文件以避免因冗余下載而阻塞您的互聯網。
class KaggleHouse(d2l.DataModule):
def __init__(self, batch_size, train=None, val=None):
super().__init__()
self.save_hyperparameters()
if self.train is None:
self.raw_train = pd.read_csv(d2l.download(
d2l.DATA_URL + 'kaggle_house_pred_train.csv', self.root,
sha1_hash='585e9cc93e70b39160e7921475f9bcd7d31219ce'))
self.raw_val = pd.read_csv(d2l.download(
d2l.DATA_URL + 'kaggle_house_pred_test.csv', self.root,
sha1_hash='fa19780a7b011d9b009e8bff8e99922a8ee2eb90'))
訓練數據集包含 1460 個示例、80 個特征和 1 個標簽,而驗證數據包含 1459 個示例和 80 個特征。
Downloading ../data/kaggle_house_pred_train.csv from http://d2l-data.s3-accelerate.amazonaws.com/kaggle_house_pred_train.csv...
Downloading ../data/kaggle_house_pred_test.csv from http://d2l-data.s3-accelerate.amazonaws.com/kaggle_house_pred_test.csv...
(1460, 81)
(1459, 80)
Downloading ../data/kaggle_house_pred_train.csv from http://d2l-data.s3-accelerate.amazonaws.com/kaggle_house_pred_train.csv...
Downloading ../data/kaggle_house_pred_test.csv from http://d2l-data.s3-accelerate.amazonaws.com/kaggle_house_pred_test.csv...
(1460, 81)
(1459, 80)
Downloading ../data/kaggle_house_pred_train.csv from http://d2l-data.s3-accelerate.amazonaws.com/kaggle_house_pred_train.csv...
Downloading ../data/kaggle_house_pred_test.csv from http://d2l-data.s3-accelerate.amazonaws.com/kaggle_house_pred_test.csv...
(1460, 81)
(1459, 80)
Downloading ../data/kaggle_house_pred_train.csv from http://d2l-data.s3-accelerate.amazonaws.com/kaggle_house_pred_train.csv...
Downloading ../data/kaggle_house_pred_test.csv from http://d2l-data.s3-accelerate.amazonaws.com/kaggle_house_pred_test.csv...
(1460, 81)
(1459, 80)
5.7.4. 數據預處理
我們來看看前四個和最后兩個特征以及前四個示例中的標簽 (SalePrice)。
Id MSSubClass MSZoning LotFrontage SaleType SaleCondition SalePrice
0 1 60 RL 65.0 WD Normal 208500
1 2 20 RL 80.0 WD Normal 181500
2 3 60 RL 68.0 WD Normal 223500
3 4 70 RL 60.0 WD Abnorml 140000
Id MSSubClass MSZoning LotFrontage SaleType SaleCondition SalePrice
0 1 60 RL 65.0 WD Normal 208500
1 2 20 RL 80.0 WD Normal 181500
2 3 60 RL 68.0 WD Normal 223500
3 4 70 RL 60.0 WD Abnorml 140000
評論