到目前為止,我們一直在處理以現(xiàn)成張量形式到達(dá)的合成數(shù)據(jù)。然而,要在野外應(yīng)用深度學(xué)習(xí),我們必須提取以任意格式存儲(chǔ)的雜亂數(shù)據(jù),并對(duì)其進(jìn)行預(yù)處理以滿(mǎn)足我們的需要。幸運(yùn)的是,pandas 庫(kù)可以完成大部分繁重的工作。本節(jié)雖然不能替代適當(dāng)?shù)?/font>pandas 教程,但將為您提供一些最常見(jiàn)例程的速成課程。
2.2.1. 讀取數(shù)據(jù)集
逗號(hào)分隔值 (CSV) 文件普遍用于存儲(chǔ)表格(類(lèi)似電子表格)數(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
)、屋頂類(lèi)型 ( RoofType
) 和價(jià)格 ( Price
)。
現(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)值的列。我們可以按名稱(chēng)或通過(guò)基于整數(shù)位置的索引 ( ) 選擇列。iloc
您可能已經(jīng)注意到,pandas
將所有 CSV 條目替換NA
為一個(gè)特殊的NaN
(不是數(shù)字)值。這也可能在條目為空時(shí)發(fā)生,例如“3,,,270000”。這些被稱(chēng)為缺失值,它們是數(shù)據(jù)科學(xué)的“臭蟲(chóng)”,是您在整個(gè)職業(yè)生涯中都會(huì)遇到的持續(xù)威脅。根據(jù)上下文,缺失值可以通過(guò) 插補(bǔ)或刪除來(lái)處理。插補(bǔ)用缺失值的估計(jì)值替換缺失值,而刪除只是丟棄那些包含缺失值的行或列。
以下是一些常見(jiàn)的插補(bǔ)啟發(fā)法。對(duì)于分類(lèi)輸入字段,我們可以將其視為NaN
一個(gè)類(lèi)別。由于該RoofType
列采用值Slate
和NaN
,pandas
可以將此列轉(zhuǎn)換為兩列RoofType_Slate
和RoofType_nan
。屋頂類(lèi)型為的行將分別將和 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ù)值,一種常見(jiàn)的啟發(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]))
(array([[3., 0., 1.], [2., 0., 1.], [4., 1., 0.], [3., 0., 1.]], dtype=float64), array([127500, 106000, 178100, 140000], dtype=int64))
(Array([[3., 0., 1.], [2., 0., 1.], [4., 1., 0.], [3., 0., 1.]], dtype=float32), Array([127500, 106000, 178100, 140000], dtype=int32))
(<tf.Tensor: shape=(4, 3), dtype=float64, numpy= array([[3., 0., 1.], [2., 0., 1.], [4., 1., 0.], [3., 0., 1.]])>, <tf.Tensor: shape=(4,), dtype=int64, numpy=array([127500, 106000, 178100, 140000])>)
2.2.4. 討論
您現(xiàn)在知道如何對(duì)數(shù)據(jù)列進(jìn)行分區(qū)、估算缺失變量以及將pandas
數(shù)據(jù)加載到張量中。在第 5.7 節(jié)中,您將掌握更多數(shù)據(jù)處理技能。雖然這個(gè)速成課程讓事情變得簡(jiǎn)單,但數(shù)據(jù)處理可能會(huì)變得棘手。例如,我們的數(shù)據(jù)集可能分布在從關(guān)系數(shù)據(jù)庫(kù)中提取的多個(gè)文件中,而不是到達(dá)單個(gè) CSV 文件。例如,在電子商務(wù)應(yīng)用程序中,客戶(hù)地址可能存在于一個(gè)表中,而購(gòu)買(mǎi)數(shù)據(jù)則存在于另一個(gè)表中。此外,從業(yè)者還面臨著分類(lèi)和數(shù)字以外的無(wú)數(shù)數(shù)據(jù)類(lèi)型。其他數(shù)據(jù)類(lèi)型包括文本字符串、圖像、音頻數(shù)據(jù)和點(diǎn)云。通常,需要先進(jìn)的工具和高效的算法來(lái)防止數(shù)據(jù)處理成為機(jī)器學(xué)習(xí)管道中的最大瓶頸。當(dāng)我們涉及計(jì)算機(jī)視覺(jué)和自然語(yǔ)言處理時(shí),就會(huì)出現(xiàn)這些問(wèn)題。最后,我們必須關(guān)注數(shù)據(jù)質(zhì)量。現(xiàn)實(shí)世界的數(shù)據(jù)集經(jīng)常受到異常值、傳感器錯(cuò)誤測(cè)量和記錄錯(cuò)誤的困擾,在將數(shù)據(jù)輸入任何模型之前必須解決這些問(wèn)題。數(shù)據(jù)可視化工具,例如 seaborn、 Bokeh或 matplotlib可以幫助您手動(dòng)檢查數(shù)據(jù)并形成關(guān)于您可能需要解決的問(wèn)題的直覺(jué)。
2.2.5. 練習(xí)
-
嘗試從UCI 機(jī)器學(xué)習(xí)存儲(chǔ)庫(kù)加載數(shù)據(jù)集,例如 Abalone并檢查它們的屬性。其中有多少缺失值?變量的哪一部分是數(shù)字的、分類(lèi)的或文本的?
-
嘗試按名稱(chēng)而不是按列號(hào)索引和選擇數(shù)據(jù)列。有關(guān)索引的 Pandas 文檔 包含有關(guān)如何執(zhí)行此操作的更多詳細(xì)信息。
-
您認(rèn)為您可以通過(guò)這種方式加載多大的數(shù)據(jù)集?可能有什么限制?提示:考慮讀取數(shù)據(jù)的時(shí)間、表示、處理和內(nèi)存占用。在筆記本電腦上試試這個(gè)。如果您在服務(wù)器上試用它會(huì)發(fā)生什么變化?
-
您將如何處理具有大量類(lèi)別的數(shù)據(jù)?如果類(lèi)別標(biāo)簽都是唯一的怎么辦?你應(yīng)該包括后者嗎?
-
你能想到什么 pandas 的替代品?如何從文件加載 NumPy 張量?查看Pillow,Python 圖像庫(kù)。
審核編輯:湯梓紅
-
python
+關(guān)注
關(guān)注
56文章
4848瀏覽量
88923 -
預(yù)處理
+關(guān)注
關(guān)注
0文章
33瀏覽量
10736 -
pytorch
+關(guān)注
關(guān)注
2文章
812瀏覽量
14424
發(fā)布評(píng)論請(qǐng)先 登錄
機(jī)器學(xué)習(xí)為什么需要數(shù)據(jù)預(yù)處理

請(qǐng)教大家一下關(guān)于數(shù)據(jù)預(yù)處理
Pytorch模型訓(xùn)練實(shí)用PDF教程【中文】
Python數(shù)據(jù)預(yù)處理方法
數(shù)據(jù)探索與數(shù)據(jù)預(yù)處理
基于DSP CCS2.2實(shí)現(xiàn)指紋識(shí)別預(yù)處理系統(tǒng)

利用Python和PyTorch處理面向?qū)ο蟮?b class='flag-5'>數(shù)據(jù)集(1)
什么是大數(shù)據(jù)采集和預(yù)處理
那些年在pytorch上踩過(guò)的坑

那些年在pytorch上過(guò)的當(dāng)

PyTorch教程之數(shù)據(jù)預(yù)處理

評(píng)論