到目前為止,我們一直在處理以現(xiàn)成張量形式到達(dá)的合成數(shù)據(jù)。然而,要在野外應(yīng)用深度學(xué)習(xí),我們必須提取以任意格式存儲(chǔ)的雜亂數(shù)據(jù),并對(duì)其進(jìn)行預(yù)處理以滿足我們的需要。幸運(yùn)的是,pandas 庫(kù)可以完成大部分繁重的工作。本節(jié)雖然不能替代適當(dāng)?shù)?/font>pandas 教程,但將為您提供一些最常見例程的速成課程。
2.2.1. 讀取數(shù)據(jù)集
逗號(hào)分隔值 (CSV) 文件普遍用于存儲(chǔ)表格(類似電子表格)數(shù)據(jù)。此處,每一行對(duì)應(yīng)一個(gè)記錄并由多個(gè)(逗號(hào)分隔)字段組成,例如,“Albert Einstein,March 14 1879,Ulm,Federal polytechnic school,Accomplishments in the field of gravitational physics”。為了演示如何加載 CSV 文件pandas
,我們?cè)谙旅鎰?chuàng)建了一個(gè) CSV 文件 ../data/house_tiny.csv
。此文件表示房屋數(shù)據(jù)集,其中每一行對(duì)應(yīng)一個(gè)不同的房屋,列對(duì)應(yīng)房間數(shù) ( NumRooms
)、屋頂類型 ( RoofType
) 和價(jià)格 ( Price
)。
import os
os.makedirs(os.path.join('..', 'data'), exist_ok=True)
data_file = os.path.join('..', 'data', 'house_tiny.csv')
with open(data_file, 'w') as f:
f.write('''NumRooms,RoofType,Price
NA,NA,127500
2,NA,106000
4,Slate,178100
NA,NA,140000''')
現(xiàn)在讓我們導(dǎo)入pandas
并加載數(shù)據(jù)集read_csv
。
NumRooms RoofType Price
0 NaN NaN 127500
1 2.0 NaN 106000
2 4.0 Slate 178100
3 NaN NaN 140000
NumRooms RoofType Price
0 NaN NaN 127500
1 2.0 NaN 106000
2 4.0 Slate 178100
3 NaN NaN 140000
NumRooms RoofType Price
0 NaN NaN 127500
1 2.0 NaN 106000
2 4.0 Slate 178100
3 NaN NaN 140000
2.2.2. 數(shù)據(jù)準(zhǔn)備
在監(jiān)督學(xué)習(xí)中,我們訓(xùn)練模型在給定一組輸入值的情況下預(yù)測(cè)指定的目標(biāo)值。我們處理數(shù)據(jù)集的第一步是分離出對(duì)應(yīng)于輸入值和目標(biāo)值的列。我們可以按名稱或通過基于整數(shù)位置的索引 ( ) 選擇列。iloc
您可能已經(jīng)注意到,pandas
將所有 CSV 條目替換NA
為一個(gè)特殊的NaN
(不是數(shù)字)值。這也可能在條目為空時(shí)發(fā)生,例如“3,,,270000”。這些被稱為缺失值,它們是數(shù)據(jù)科學(xué)的“臭蟲”,是您在整個(gè)職業(yè)生涯中都會(huì)遇到的持續(xù)威脅。根據(jù)上下文,缺失值可以通過 插補(bǔ)或刪除來處理。插補(bǔ)用缺失值的估計(jì)值替換缺失值,而刪除只是丟棄那些包含缺失值的行或列。
以下是一些常見的插補(bǔ)啟發(fā)法。對(duì)于分類輸入字段,我們可以將其視為NaN
一個(gè)類別。由于該RoofType
列采用值Slate
和NaN
,pandas
可以將此列轉(zhuǎn)換為兩列RoofType_Slate
和RoofType_nan
。屋頂類型為的行將分別將和 Slate
的值設(shè)置為 1 和 0。相反的情況適用于具有缺失值的行。RoofType_Slate
RoofType_nan
RoofType
NumRooms RoofType_Slate RoofType_nan
0 NaN 0 1
1 2.0 0 1
2 4.0 1 0
3 NaN 0 1
NumRooms RoofType_Slate RoofType_nan
0 NaN 0 1
1 2.0 0 1
2 4.0 1 0
3 NaN 0 1
NumRooms RoofType_Slate RoofType_nan
0 NaN 0 1
1 2.0 0 1
2 4.0 1 0
3 NaN 0 1
對(duì)于缺失的數(shù)值,一種常見的啟發(fā)式方法是用 NaN
相應(yīng)列的平均值替換條目。
NumRooms RoofType_Slate RoofType_nan
0 3.0 0 1
1 2.0 0 1
2 4.0 1 0
3 3.0 0 1
NumRooms RoofType_Slate RoofType_nan
0 3.0 0 1
1 2.0 0 1
2 4.0 1 0
3 3.0 0 1
NumRooms RoofType_Slate RoofType_nan
0 3.0 0 1
1 2.0 0 1
2 4.0 1 0
3 3.0 0 1
2.2.3. 轉(zhuǎn)換為張量格式
inputs
現(xiàn)在 和中的所有條目targets
都是數(shù)字,我們可以將它們加載到張量中(回憶一下2.1 節(jié))。
(tensor([[3., 0., 1.],
[2., 0., 1.],
[4., 1., 0.],
[3., 0., 1.]], dtype=torch.float64),
tensor([127500, 106000, 178100, 140000]))
評(píng)論
查看更多