現(xiàn)在我們已經(jīng)介紹了一些用于構(gòu)建和訓(xùn)練深度網(wǎng)絡(luò)并使用包括權(quán)重衰減和丟失在內(nèi)的技術(shù)對(duì)其進(jìn)行正則化的基本工具,我們準(zhǔn)備通過(guò)參加 Kaggle 競(jìng)賽將所有這些知識(shí)付諸實(shí)踐。房?jī)r(jià)預(yù)測(cè)競(jìng)賽是一個(gè)很好的起點(diǎn)。數(shù)據(jù)相當(dāng)通用,沒有表現(xiàn)出可能需要專門模型(如音頻或視頻可能)的奇異結(jié)構(gòu)。該數(shù)據(jù)集由 De Cock ( 2011 )收集,涵蓋 2006 年至 2010 年愛荷華州埃姆斯的房?jī)r(jià)。 它比Harrison 和 Rubinfeld (1978)著名的波士頓住房數(shù)據(jù)集大得多,擁有更多的例子和更多的特征。
在本節(jié)中,我們將帶您了解數(shù)據(jù)預(yù)處理、模型設(shè)計(jì)和超參數(shù)選擇的詳細(xì)信息。我們希望通過(guò)實(shí)踐方法,您將獲得一些直覺,這些直覺將指導(dǎo)您作為數(shù)據(jù)科學(xué)家的職業(yè)生涯。
%matplotlib inline import pandas as pd import torch from torch import nn from d2l import torch as d2l
%matplotlib inline import pandas as pd from mxnet import autograd, gluon, init, np, npx from mxnet.gluon import nn from d2l import mxnet as d2l npx.set_np()
%matplotlib inline import jax import numpy as np import pandas as pd from jax import numpy as jnp from d2l import jax as d2l
No GPU/TPU found, falling back to CPU. (Set TF_CPP_MIN_LOG_LEVEL=0 and rerun for more info.)
%matplotlib inline import pandas as pd import tensorflow as tf from d2l import tensorflow as d2l
5.7.1. 下載數(shù)據(jù)
在整本書中,我們將在各種下載的數(shù)據(jù)集上訓(xùn)練和測(cè)試模型。在這里,我們實(shí)現(xiàn)了兩個(gè)實(shí)用函數(shù)來(lái)下載文件和提取 zip 或 tar 文件。同樣,我們將它們的實(shí)現(xiàn)推遲到 第 23.7 節(jié)。
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是一個(gè)舉辦機(jī)器學(xué)習(xí)競(jìng)賽的流行平臺(tái)。每場(chǎng)比賽都以數(shù)據(jù)集為中心,許多比賽由利益相關(guān)者贊助,他們?yōu)楂@勝的解決方案提供獎(jiǎng)勵(lì)。該平臺(tái)幫助用戶通過(guò)論壇和共享代碼進(jìn)行交互,促進(jìn)協(xié)作和競(jìng)爭(zhēng)。雖然排行榜追逐經(jīng)常失控,研究人員短視地關(guān)注預(yù)處理步驟而不是提出基本問題,但平臺(tái)的客觀性也具有巨大價(jià)值,該平臺(tái)有助于競(jìng)爭(zhēng)方法之間的直接定量比較以及代碼共享,以便每個(gè)人都可以了解哪些有效,哪些無(wú)效。如果你想?yún)⒓?Kaggle 比賽,你首先需要注冊(cè)一個(gè)賬號(hào)(見圖 5.7.1)。
圖 5.7.1 Kaggle 網(wǎng)站。
在房?jī)r(jià)預(yù)測(cè)比賽頁(yè)面,如圖 5.7.2所示,可以找到數(shù)據(jù)集(在“數(shù)據(jù)”選項(xiàng)卡下),提交預(yù)測(cè),就可以看到你的排名,網(wǎng)址在這里:
https://www.kaggle.com/c/house-prices-advanced-regression-techniques
圖 5.7.2房?jī)r(jià)預(yù)測(cè)比賽頁(yè)面。
5.7.3. 訪問和讀取數(shù)據(jù)集
請(qǐng)注意,比賽數(shù)據(jù)分為訓(xùn)練集和測(cè)試集。每條記錄包括房屋的屬性值和街道類型、建造年份、屋頂類型、地下室狀況等屬性。特征由各種數(shù)據(jù)類型組成。例如,建造年份用整數(shù)表示,屋頂類型用離散的分類分配表示,其他特征用浮點(diǎn)數(shù)表示。這就是現(xiàn)實(shí)使事情復(fù)雜化的地方:例如,一些數(shù)據(jù)完全缺失,缺失值簡(jiǎn)單地標(biāo)記為“na”。每個(gè)房子的價(jià)格僅包含在訓(xùn)練集中(畢竟這是一場(chǎng)比賽)。我們希望對(duì)訓(xùn)練集進(jìn)行分區(qū)以創(chuàng)建驗(yàn)證集,但我們只能在將預(yù)測(cè)上傳到 Kaggle 后才能在官方測(cè)試集上評(píng)估我們的模型。圖 5.7.2有下載數(shù)據(jù)的鏈接。
首先,我們將pandas使用我們?cè)诘?2.2 節(jié)中介紹的方法讀入和處理數(shù)據(jù)。為了方便起見,我們可以下載并緩存 Kaggle 住房數(shù)據(jù)集。如果與此數(shù)據(jù)集對(duì)應(yīng)的文件已存在于緩存目錄中并且其 SHA-1 匹配sha1_hash,我們的代碼將使用緩存文件以避免因冗余下載而阻塞您的互聯(lián)網(wǎng)。
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'))
訓(xùn)練數(shù)據(jù)集包含 1460 個(gè)示例、80 個(gè)特征和 1 個(gè)標(biāo)簽,而驗(yàn)證數(shù)據(jù)包含 1459 個(gè)示例和 80 個(gè)特征。
data = KaggleHouse(batch_size=64) print(data.raw_train.shape) print(data.raw_val.shape)
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)
data = KaggleHouse(batch_size=64) print(data.raw_train.shape) print(data.raw_val.shape)
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)
data = KaggleHouse(batch_size=64) print(data.raw_train.shape) print(data.raw_val.shape)
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)
data = KaggleHouse(batch_size=64) print(data.raw_train.shape) print(data.raw_val.shape)
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. 數(shù)據(jù)預(yù)處理
我們來(lái)看看前四個(gè)和最后兩個(gè)特征以及前四個(gè)示例中的標(biāo)簽 (SalePrice)。
print(data.raw_train.iloc[:4, [0, 1, 2, 3, -3, -2, -1]])
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
print(data.raw_train.iloc[:4, [0, 1, 2, 3, -3, -2, -1]])
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
print(data.raw_train.iloc[:4, [0, 1, 2, 3, -3, -2, -1]])
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
print(data.raw_train.iloc[:4, [0, 1, 2, 3, -3, -2, -1]])
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
我們可以看到,在每個(gè)示例中,第一個(gè)特征是 ID。這有助于模型識(shí)別每個(gè)訓(xùn)練示例。雖然這很方便,但它不攜帶任何用于預(yù)測(cè)目的的信息。因此,我們將在將數(shù)據(jù)輸入模型之前將其從數(shù)據(jù)集中刪除。此外,鑒于數(shù)據(jù)類型多種多樣,我們需要在開始建模之前對(duì)數(shù)據(jù)進(jìn)行預(yù)處理。
讓我們從數(shù)字特征開始。首先,我們應(yīng)用啟發(fā)式方法,用相應(yīng)特征的平均值替換所有缺失值。然后,為了將所有特征放在一個(gè)共同的尺度上,我們通過(guò)將特征重新縮放為零均值和單位方差來(lái)標(biāo)準(zhǔn)化數(shù)據(jù):
(5.7.1)x←x?μσ,
在哪里μ和σ分別表示平均值和標(biāo)準(zhǔn)偏差。為了驗(yàn)證這確實(shí)改變了我們的特征(變量),使其具有零均值和單位方差,請(qǐng)注意 E[x?μσ]=μ?μσ=0然后 E[(x?μ)2]=(σ2+μ2)?2μ2+μ2=σ2. 直覺上,我們標(biāo)準(zhǔn)化數(shù)據(jù)有兩個(gè)原因。首先,證明它便于優(yōu)化。其次,因?yàn)槲覀兿闰?yàn)地不知道 哪些特征是相關(guān)的,所以我們不想懲罰分配給一個(gè)特征的系數(shù)比其他任何特征更多。
接下來(lái)我們處理離散值。這包括諸如“MSZoning”之類的功能。我們將它們替換為 one-hot 編碼,其方式與我們之前將多類標(biāo)簽轉(zhuǎn)換為向量的方式相同(請(qǐng)參閱 第 4.1.1 節(jié))。例如,“MSZoning”采用值“RL”和“RM”。刪除“MSZoning”特征,創(chuàng)建兩個(gè)新的指標(biāo)特征“MSZoning_RL”和“MSZoning_RM”,其值為0或1。根據(jù)one-hot編碼,如果“MSZoning”的原始值為“RL”,則“ MSZoning_RL” 為 1,“MSZoning_RM” 為 0。pandas包會(huì)自動(dòng)為我們完成此操作。
@d2l.add_to_class(KaggleHouse) def preprocess(self): # Remove the ID and label columns label = 'SalePrice' features = pd.concat( (self.raw_train.drop(columns=['Id', label]), self.raw_val.drop(columns=['Id']))) # Standardize numerical columns numeric_features = features.dtypes[features.dtypes!='object'].index features[numeric_features] = features[numeric_features].apply( lambda x: (x - x.mean()) / (x.std())) # Replace NAN numerical features by 0 features[numeric_features] = features[numeric_features].fillna(0) # Replace discrete features by one-hot encoding features = pd.get_dummies(features, dummy_na=True) # Save preprocessed features self.train = features[:self.raw_train.shape[0]].copy() self.train[label] = self.raw_train[label] self.val = features[self.raw_train.shape[0]:].copy()
您可以看到此轉(zhuǎn)換將特征數(shù)量從 79 增加到 331(不包括 ID 和標(biāo)簽列)。
data.preprocess() data.train.shape
(1460, 332)
data.preprocess() data.train.shape
(1460, 332)
data.preprocess() data.train.shape
(1460, 332)
data.preprocess() data.train.shape
(1460, 332)
5.7.5. 誤差測(cè)量
首先,我們將訓(xùn)練一個(gè)具有平方損失的線性模型。毫不奇怪,我們的線性模型不會(huì)導(dǎo)致提交競(jìng)賽獲勝,但它提供了完整性檢查以查看數(shù)據(jù)中是否存在有意義的信息。如果我們?cè)谶@里不能比隨機(jī)猜測(cè)做得更好,那么我們很可能遇到數(shù)據(jù)處理錯(cuò)誤。如果一切正常,線性模型將作為基線,讓我們直觀地了解簡(jiǎn)單模型與最佳報(bào)告模型的接近程度,讓我們了解我們應(yīng)該從更高級(jí)的模型中獲得多少收益。
對(duì)于房?jī)r(jià),就像股票價(jià)格一樣,我們更關(guān)心相對(duì)數(shù)量而不是絕對(duì)數(shù)量。因此我們更傾向于關(guān)心相對(duì)誤差y?y^y比關(guān)于絕對(duì)誤差y?y^. 例如,如果我們?cè)诠烙?jì)俄亥俄州農(nóng)村地區(qū)的房屋價(jià)格時(shí)預(yù)測(cè)偏離 100,000 美元,那里典型房屋的價(jià)值為 125,000 美元,那么我們可能做得很糟糕。另一方面,如果我們?cè)诩永D醽喼莸?Los Altos Hills 出現(xiàn)這個(gè)數(shù)額的錯(cuò)誤,這可能代表了一個(gè)驚人準(zhǔn)確的預(yù)測(cè)(那里的房?jī)r(jià)中位數(shù)超過(guò) 400 萬(wàn)美元)。
解決這個(gè)問題的一種方法是衡量?jī)r(jià)格估計(jì)的對(duì)數(shù)差異。事實(shí)上,這也是比賽用來(lái)評(píng)估提交質(zhì)量的官方誤差衡量標(biāo)準(zhǔn)。畢竟價(jià)值不高δ為了 |log?y?log?y^|≤δ翻譯成 e?δ≤y^y≤eδ. 這導(dǎo)致預(yù)測(cè)價(jià)格的對(duì)數(shù)與標(biāo)簽價(jià)格的對(duì)數(shù)之間存在以下均方根誤差:
(5.7.2)1n∑i=1n(log?yi?log?y^i)2.
@d2l.add_to_class(KaggleHouse) def get_dataloader(self, train): label = 'SalePrice' data = self.train if train else self.val if label not in data: return get_tensor = lambda x: torch.tensor(x.values, dtype=torch.float32) # Logarithm of prices tensors = (get_tensor(data.drop(columns=[label])), # X torch.log(get_tensor(data[label])).reshape((-1, 1))) # Y return self.get_tensorloader(tensors, train)
@d2l.add_to_class(KaggleHouse) def get_dataloader(self, train): label = 'SalePrice' data = self.train if train else self.val if label not in data: return get_tensor = lambda x: np.array(x.values, dtype=np.float32) # Logarithm of prices tensors = (get_tensor(data.drop(columns=[label])), # X np.log(get_tensor(data[label])).reshape((-1, 1))) # Y return self.get_tensorloader(tensors, train)
@d2l.add_to_class(KaggleHouse) def get_dataloader(self, train): label = 'SalePrice' data = self.train if train else self.val if label not in data: return get_tensor = lambda x: jnp.array(x.values, dtype=jnp.float32) # Logarithm of prices tensors = (get_tensor(data.drop(columns=[label])), # X jnp.log(get_tensor(data[label])).reshape((-1, 1))) # Y return self.get_tensorloader(tensors, train)
@d2l.add_to_class(KaggleHouse) def get_dataloader(self, train): label = 'SalePrice' data = self.train if train else self.val if label not in data: return get_tensor = lambda x: tf.constant(x.values, dtype=tf.float32) # Logarithm of prices tensors = (get_tensor(data.drop(columns=[label])), # X tf.reshape(tf.math.log(get_tensor(data[label])), (-1, 1))) # Y return self.get_tensorloader(tensors, train)
5.7.6.K-折疊交叉驗(yàn)證
您可能還記得我們?cè)诘?3.6.3 節(jié)中介紹了交叉驗(yàn)證 ,我們?cè)谀抢镉懻摿巳绾翁幚砟P瓦x擇。我們將充分利用它來(lái)選擇模型設(shè)計(jì)和調(diào)整超參數(shù)。我們首先需要一個(gè)返回ith將數(shù)據(jù)折疊成 K-折疊交叉驗(yàn)證程序。它通過(guò)切出ith段作為驗(yàn)證數(shù)據(jù)并將其余部分作為訓(xùn)練數(shù)據(jù)返回。請(qǐng)注意,這不是處理數(shù)據(jù)的最有效方式,如果我們的數(shù)據(jù)集相當(dāng)大,我們肯定會(huì)做一些更聰明的事情。但是這種增加的復(fù)雜性可能會(huì)不必要地混淆我們的代碼,因此由于問題的簡(jiǎn)單性,我們可以在這里安全地省略它。
def k_fold_data(data, k): rets = [] fold_size = data.train.shape[0] // k for j in range(k): idx = range(j * fold_size, (j+1) * fold_size) rets.append(KaggleHouse(data.batch_size, data.train.drop(index=idx), data.train.loc[idx])) return rets
我們訓(xùn)練時(shí)返回平均驗(yàn)證錯(cuò)誤K時(shí)間在K- 折疊交叉驗(yàn)證。
def k_fold(trainer, data, k, lr): val_loss, models = [], [] for i, data_fold in enumerate(k_fold_data(data, k)): model = d2l.LinearRegression(lr) model.board.yscale='log' if i != 0: model.board.display = False trainer.fit(model, data_fold) val_loss.append(float(model.board.data['val_loss'][-1].y)) models.append(model) print(f'average validation log mse = {sum(val_loss)/len(val_loss)}') return models
5.7.7. 選型
在這個(gè)例子中,我們選擇了一組未調(diào)整的超參數(shù),并留給讀者來(lái)改進(jìn)模型。找到一個(gè)好的選擇可能需要時(shí)間,具體取決于優(yōu)化了多少變量。有了足夠大的數(shù)據(jù)集和正常的超參數(shù),K-折疊交叉驗(yàn)證往往對(duì)多重測(cè)試具有合理的彈性。然而,如果我們嘗試了不合理的大量選項(xiàng),我們可能會(huì)幸運(yùn)地發(fā)現(xiàn)我們的驗(yàn)證性能不再代表真正的錯(cuò)誤。
trainer = d2l.Trainer(max_epochs=10) models = k_fold(trainer, data, k=5, lr=0.01)
average validation log mse = 0.17563143908977508
trainer = d2l.Trainer(max_epochs=10) models = k_fold(trainer, data, k=5, lr=0.01)
average validation log mse = 0.1256050333380699
trainer = d2l.Trainer(max_epochs=10) models = k_fold(trainer, data, k=5, lr=0.01)
average validation log mse = 0.1252850264310837
trainer = d2l.Trainer(max_epochs=10) models = k_fold(trainer, data, k=5, lr=0.01)
average validation log mse = 0.17464343845844268
請(qǐng)注意,有時(shí)一組超參數(shù)的訓(xùn)練錯(cuò)誤數(shù)量可能非常低,即使 K-折疊交叉驗(yàn)證要高得多。這表明我們過(guò)度擬合。在整個(gè)培訓(xùn)過(guò)程中,您需要監(jiān)控這兩個(gè)數(shù)字。較少的過(guò)度擬合可能表明我們的數(shù)據(jù)可以支持更強(qiáng)大的模型。大規(guī)模過(guò)度擬合可能表明我們可以通過(guò)結(jié)合正則化技術(shù)來(lái)獲益。
5.7.8. 在 Kaggle 上提交預(yù)測(cè)
現(xiàn)在我們知道應(yīng)該選擇什么樣的超參數(shù),我們可以計(jì)算所有超參數(shù)對(duì)測(cè)試集的平均預(yù)測(cè) K楷模。將預(yù)測(cè)保存在 csv 文件中將簡(jiǎn)化將結(jié)果上傳到 Kaggle 的過(guò)程。以下代碼將生成一個(gè)名為submission.csv.
preds = [model(torch.tensor(data.val.values, dtype=torch.float32)) for model in models] # Taking exponentiation of predictions in the logarithm scale ensemble_preds = torch.exp(torch.cat(preds, 1)).mean(1) submission = pd.DataFrame({'Id':data.raw_val.Id, 'SalePrice':ensemble_preds.detach().numpy()}) submission.to_csv('submission.csv', index=False)
preds = [model(np.array(data.val.values, dtype=np.float32)) for model in models] # Taking exponentiation of predictions in the logarithm scale ensemble_preds = np.exp(np.concatenate(preds, 1)).mean(1) submission = pd.DataFrame({'Id':data.raw_val.Id, 'SalePrice':ensemble_preds.asnumpy()}) submission.to_csv('submission.csv', index=False)
preds = [model.apply({'params': trainer.state.params}, jnp.array(data.val.values, dtype=jnp.float32)) for model in models] # Taking exponentiation of predictions in the logarithm scale ensemble_preds = jnp.exp(jnp.concatenate(preds, 1)).mean(1) submission = pd.DataFrame({'Id':data.raw_val.Id, 'SalePrice':np.asarray(ensemble_preds)}) submission.to_csv('submission.csv', index=False)
preds = [model(tf.constant(data.val.values, dtype=tf.float32)) for model in models] # Taking exponentiation of predictions in the logarithm scale ensemble_preds = tf.reduce_mean(tf.exp(tf.concat(preds, 1)), 1) submission = pd.DataFrame({'Id':data.raw_val.Id, 'SalePrice':ensemble_preds.numpy()}) submission.to_csv('submission.csv', index=False)
接下來(lái),如圖5.7.3所示,我們可以在 Kaggle 上提交我們的預(yù)測(cè),并查看它們?nèi)绾闻c測(cè)試集上的實(shí)際房?jī)r(jià)(標(biāo)簽)進(jìn)行比較。步驟很簡(jiǎn)單:
登錄Kaggle網(wǎng)站,訪問房?jī)r(jià)預(yù)測(cè)比賽頁(yè)面。
單擊“提交預(yù)測(cè)”或“延遲提交”按鈕(截至撰寫本文時(shí),該按鈕位于右側(cè))。
單擊頁(yè)面底部虛線框中的“上傳提交文件”按鈕,然后選擇您要上傳的預(yù)測(cè)文件。
單擊頁(yè)面底部的“提交”按鈕以查看結(jié)果。
圖 5.7.3向 Kaggle 提交數(shù)據(jù)
5.7.9. 概括
真實(shí)數(shù)據(jù)通常包含不同數(shù)據(jù)類型的混合,需要進(jìn)行預(yù)處理。將實(shí)值數(shù)據(jù)重新調(diào)整為零均值和單位方差是一個(gè)很好的默認(rèn)值。用平均值替換缺失值也是如此。此外,將分類特征轉(zhuǎn)換為指示特征允許我們將它們視為單熱向量。當(dāng)我們更關(guān)心相對(duì)誤差而不是絕對(duì)誤差時(shí),我們可以用預(yù)測(cè)的對(duì)數(shù)來(lái)衡量差異。要選擇模型并調(diào)整超參數(shù),我們可以使用K折疊交叉驗(yàn)證。
5.7.10。練習(xí)
將你對(duì)本節(jié)的預(yù)測(cè)提交給 Kaggle。你的預(yù)測(cè)有多好?
用平均值替換缺失值總是一個(gè)好主意嗎?提示:你能構(gòu)造一個(gè)值不隨機(jī)缺失的情況嗎?
通過(guò)調(diào)整超參數(shù)來(lái)提高 Kaggle 的分?jǐn)?shù) K- 折疊交叉驗(yàn)證。
通過(guò)改進(jìn)模型(例如,層數(shù)、權(quán)重衰減和丟失)來(lái)提高分?jǐn)?shù)。
如果我們不像本節(jié)所做的那樣對(duì)連續(xù)數(shù)值特征進(jìn)行標(biāo)準(zhǔn)化,會(huì)發(fā)生什么情況?
-
pytorch
+關(guān)注
關(guān)注
2文章
808瀏覽量
13380
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
[原創(chuàng)]房?jī)r(jià)整體上漲推力到底是什么!
15年,房?jī)r(jià)變向降了
基于onepanel使用kaggle api提交結(jié)果和下載數(shù)據(jù)集的步驟
kaggle泰坦尼克生存預(yù)測(cè)實(shí)施步驟
qiuzitao機(jī)器學(xué)習(xí):桑坦德銀行客戶交易預(yù)測(cè)項(xiàng)目
在Ubuntu 18.04 for Arm上運(yùn)行的TensorFlow和PyTorch的Docker映像
通過(guò)Cortex來(lái)非常方便的部署PyTorch模型
北京房?jī)r(jià)均降1萬(wàn)!中國(guó)房?jī)r(jià)稱霸全球,北京房?jī)r(jià)均降一萬(wàn)是皮毛!王健林的選擇是對(duì)是錯(cuò)?
如何很容易地將數(shù)據(jù)共享為Kaggle數(shù)據(jù)集
![如何很容易地將數(shù)據(jù)共享為<b class='flag-5'>Kaggle</b>數(shù)據(jù)集](https://file.elecfans.com/web1/M00/55/D2/o4YBAFs12sCALf5DAAAE0tLWc1c750.png)
這些年來(lái),我們的數(shù)據(jù)科學(xué)究竟發(fā)生了什么變化?
如何使用改進(jìn)GM模型進(jìn)行房?jī)r(jià)預(yù)測(cè)模型資料說(shuō)明
![如何使用改進(jìn)GM模型進(jìn)行<b class='flag-5'>房?jī)r(jià)</b><b class='flag-5'>預(yù)測(cè)</b>模型資料說(shuō)明](https://file.elecfans.com/web1/M00/7E/7A/o4YBAFwZ2y-ACvM1AAEoHn38PoI133.png)
PyTorch教程5.7之在Kaggle上預(yù)測(cè)房?jī)r(jià)
![<b class='flag-5'>PyTorch</b>教程<b class='flag-5'>5.7</b>之在<b class='flag-5'>Kaggle</b><b class='flag-5'>上</b><b class='flag-5'>預(yù)測(cè)</b><b class='flag-5'>房?jī)r(jià)</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
pytorch怎么在pycharm中運(yùn)行
使用PyTorch在英特爾獨(dú)立顯卡上訓(xùn)練模型
![使用<b class='flag-5'>PyTorch</b><b class='flag-5'>在</b>英特爾獨(dú)立顯卡<b class='flag-5'>上</b>訓(xùn)練模型](https://file1.elecfans.com/web2/M00/0B/8F/wKgaomckc96AFGydAAAsWk7tVJg485.png)
評(píng)論