到目前為止,我們一直在處理以現成張量形式到達的合成數據。然而,要在野外應用深度學習,我們必須提取以任意格式存儲的雜亂數據,并對其進行預處理以滿足我們的需要。幸運的是,pandas 庫可以完成大部分繁重的工作。本節雖然不能替代適當的pandas 教程,但將為您提供一些最常見例程的速成課程。
2.2.1. 讀取數據集
逗號分隔值 (CSV) 文件普遍用于存儲表格(類似電子表格)數據。此處,每一行對應一個記錄并由多個(逗號分隔)字段組成,例如,“Albert Einstein,March 14 1879,Ulm,Federal polytechnic school,Accomplishments in the field of gravitational physics”。為了演示如何加載 CSV 文件pandas
,我們在下面創建了一個 CSV 文件 ../data/house_tiny.csv
。此文件表示房屋數據集,其中每一行對應一個不同的房屋,列對應房間數 ( NumRooms
)、屋頂類型 ( RoofType
) 和價格 ( Price
)。
現在讓我們導入pandas
并加載數據集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. 數據準備
在監督學習中,我們訓練模型在給定一組輸入值的情況下預測指定的目標值。我們處理數據集的第一步是分離出對應于輸入值和目標值的列。我們可以按名稱或通過基于整數位置的索引 ( ) 選擇列。iloc
您可能已經注意到,pandas
將所有 CSV 條目替換NA
為一個特殊的NaN
(不是數字)值。這也可能在條目為空時發生,例如“3,,,270000”。這些被稱為缺失值,它們是數據科學的“臭蟲”,是您在整個職業生涯中都會遇到的持續威脅。根據上下文,缺失值可以通過 插補或刪除來處理。插補用缺失值的估計值替換缺失值,而刪除只是丟棄那些包含缺失值的行或列。
以下是一些常見的插補啟發法。對于分類輸入字段,我們可以將其視為NaN
一個類別。由于該RoofType
列采用值Slate
和NaN
,pandas
可以將此列轉換為兩列RoofType_Slate
和RoofType_nan
。屋頂類型為的行將分別將和 Slate
的值設置為 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
對于缺失的數值,一種常見的啟發式方法是用 NaN
相應列的平均值替換條目。
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. 轉換為張量格式
inputs
現在 和中的所有條目targets
都是數字,我們可以將它們加載到張量中(回憶一下2.1 節)。
(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. 討論
您現在知道如何對數據列進行分區、估算缺失變量以及將pandas
數據加載到張量中。在第 5.7 節中,您將掌握更多數據處理技能。雖然這個速成課程讓事情變得簡單,但數據處理可能會變得棘手。例如,我們的數據集可能分布在從關系數據庫中提取的多個文件中,而不是到達單個 CSV 文件。例如,在電子商務應用程序中,客戶地址可能存在于一個表中,而購買數據則存在于另一個表中。此外,從業者還面臨著分類和數字以外的無數數據類型。其他數據類型包括文本字符串、圖像、音頻數據和點云。通常,需要先進的工具和高效的算法來防止數據處理成為機器學習管道中的最大瓶頸。當我們涉及計算機視覺和自然語言處理時,就會出現這些問題。最后,我們必須關注數據質量。現實世界的數據集經常受到異常值、傳感器錯誤測量和記錄錯誤的困擾,在將數據輸入任何模型之前必須解決這些問題。數據可視化工具,例如 seaborn、 Bokeh或 matplotlib可以幫助您手動檢查數據并形成關于您可能需要解決的問題的直覺。
2.2.5. 練習
-
嘗試從UCI 機器學習存儲庫加載數據集,例如 Abalone并檢查它們的屬性。其中有多少缺失值?變量的哪一部分是數字的、分類的或文本的?
-
您認為您可以通過這種方式加載多大的數據集?可能有什么限制?提示:考慮讀取數據的時間、表示、處理和內存占用。在筆記本電腦上試試這個。如果您在服務器上試用它會發生什么變化?
-
您將如何處理具有大量類別的數據?如果類別標簽都是唯一的怎么辦?你應該包括后者嗎?
-
你能想到什么 pandas 的替代品?如何從文件加載 NumPy 張量?查看Pillow,Python 圖像庫。
審核編輯:湯梓紅
-
python
+關注
關注
56文章
4782瀏覽量
84461 -
預處理
+關注
關注
0文章
33瀏覽量
10473 -
pytorch
+關注
關注
2文章
803瀏覽量
13150
發布評論請先 登錄
相關推薦
評論