11 KiB
使用 Scikit-learn 建立回歸模型:準備並視覺化數據
資訊圖表由 Dasani Madipalli 製作
課前測驗
本課程也提供 R 版本!
簡介
現在您已經準備好使用 Scikit-learn 開始建立機器學習模型,您可以開始向數據提出問題了。在處理數據並應用機器學習解決方案時,了解如何提出正確的問題以充分發揮數據的潛力是非常重要的。
在本課程中,您將學到:
- 如何為模型建立準備數據。
- 如何使用 Matplotlib 進行數據視覺化。
向數據提出正確的問題
您需要回答的問題將決定您使用哪種類型的機器學習算法。而您得到答案的質量將在很大程度上取決於數據的性質。
看看本課程提供的數據。您可以在 VS Code 中打開這個 .csv 文件。快速瀏覽後,您會發現其中有空白值,並且混合了字符串和數字數據。此外,還有一個名為 "Package" 的奇怪列,其中的數據混合了 "sacks"、"bins" 和其他值。事實上,這些數據有些混亂。
🎥 點擊上方圖片觀看一段短片,了解如何準備本課程的數據。
事實上,很少能直接獲得完全準備好的數據集來建立機器學習模型。在本課程中,您將學習如何使用標準 Python 庫準備原始數據集。您還將學習各種視覺化數據的技術。
案例研究:'南瓜市場'
在此文件夾中,您會在根目錄的 data
文件夾中找到一個名為 US-pumpkins.csv 的 .csv 文件,其中包含 1757 行有關南瓜市場的數據,按城市分組。這是從美國農業部發布的特殊作物終端市場標準報告中提取的原始數據。
準備數據
這些數據屬於公共領域。它可以從 USDA 網站下載,按城市分成多個文件。為了避免過多的文件,我們已將所有城市數據合併到一個電子表格中,因此我們已經對數據進行了一些_準備_。接下來,讓我們仔細看看這些數據。
南瓜數據 - 初步結論
您對這些數據有什麼看法?您可能已經注意到其中混合了字符串、數字、空白值和一些奇怪的值,這些都需要進一步理解。
使用回歸技術,您可以向這些數據提出什麼問題?例如:"預測某個月份出售的南瓜價格"。再次查看數據,您需要進行一些更改以創建適合此任務的數據結構。
練習 - 分析南瓜數據
讓我們使用 Pandas(名稱代表 Python Data Analysis
),這是一個非常有用的工具,用於整理數據,來分析和準備這些南瓜數據。
首先,檢查是否有缺失日期
您需要首先檢查是否有缺失日期:
- 將日期轉換為月份格式(這些是美國日期,格式為
MM/DD/YYYY
)。 - 提取月份到新列。
在 Visual Studio Code 中打開 notebook.ipynb 文件,並將電子表格導入到新的 Pandas dataframe 中。
-
使用
head()
函數查看前五行。import pandas as pd pumpkins = pd.read_csv('../data/US-pumpkins.csv') pumpkins.head()
✅ 您會使用什麼函數來查看最後五行?
-
檢查當前 dataframe 中是否有缺失數據:
pumpkins.isnull().sum()
有缺失數據,但可能對當前任務影響不大。
-
為了使 dataframe 更易於操作,使用
loc
函數選擇您需要的列。loc
函數從原始 dataframe 中提取一組行(作為第一個參數)和列(作為第二個參數)。以下表達式中的:
表示 "所有行"。columns_to_select = ['Package', 'Low Price', 'High Price', 'Date'] pumpkins = pumpkins.loc[:, columns_to_select]
其次,確定南瓜的平均價格
思考如何確定某個月份南瓜的平均價格。您會選擇哪些列來完成此任務?提示:您需要 3 列。
解決方案:取 Low Price
和 High Price
列的平均值來填充新的 Price 列,並將 Date 列轉換為僅顯示月份。幸運的是,根據上述檢查,日期和價格沒有缺失數據。
-
要計算平均值,添加以下代碼:
price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2 month = pd.DatetimeIndex(pumpkins['Date']).month
✅ 隨時使用
print(month)
打印任何您想檢查的數據。 -
現在,將轉換後的數據複製到新的 Pandas dataframe 中:
new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price})
打印出您的 dataframe,您將看到一個乾淨整潔的數據集,您可以基於此建立新的回歸模型。
等等!這裡有些奇怪的地方
如果您查看 Package
列,南瓜以多種不同的配置出售。有些以 "1 1/9 bushel" 測量,有些以 "1/2 bushel" 測量,有些按南瓜個數出售,有些按磅出售,還有些以不同寬度的大箱出售。
南瓜似乎很難一致地稱重
深入研究原始數據,發現 Unit of Sale
為 "EACH" 或 "PER BIN" 的項目,其 Package
類型也為每英寸、每箱或 "each"。南瓜似乎很難一致地稱重,因此讓我們通過選擇 Package
列中包含 "bushel" 字符串的南瓜來進行篩選。
-
在文件頂部的初始 .csv 導入下添加篩選器:
pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)]
如果您現在打印數據,您會看到只有大約 415 行數據包含以 bushel 為單位的南瓜。
等等!還有一件事需要做
您是否注意到每行的 bushel 數量不同?您需要標準化定價,以顯示每 bushel 的價格,因此需要進行一些數學運算來標準化。
-
在創建 new_pumpkins dataframe 的代碼塊後添加以下行:
new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/(1 + 1/9) new_pumpkins.loc[new_pumpkins['Package'].str.contains('1/2'), 'Price'] = price/(1/2)
✅ 根據 The Spruce Eats,bushel 的重量取決於農產品的類型,因為它是一種體積測量。"例如,一 bushel 的番茄應該重 56 磅... 葉子和綠色蔬菜佔用更多空間但重量較輕,因此一 bushel 的菠菜僅重 20 磅。" 這一切都相當複雜!我們不需要進行 bushel 到磅的轉換,而是直接按 bushel 定價。然而,所有這些對南瓜 bushel 的研究表明,了解數據的性質是多麼重要!
現在,您可以根據 bushel 測量分析每單位的定價。如果您再次打印數據,您可以看到它已被標準化。
✅ 您是否注意到按半 bushel 出售的南瓜非常昂貴?您能找出原因嗎?提示:小南瓜比大南瓜更昂貴,可能是因為每 bushel 中有更多的小南瓜,而大南瓜的空心部分佔用了更多空間。
視覺化策略
數據科學家的部分職責是展示他們正在處理的數據的質量和性質。為此,他們通常會創建有趣的視覺化,例如圖表、折線圖和柱狀圖,展示數據的不同方面。通過這種方式,他們能夠直觀地展示數據中難以察覺的關係和差距。
🎥 點擊上方圖片觀看一段短片,了解如何視覺化本課程的數據。
視覺化還可以幫助確定最適合數據的機器學習技術。例如,似乎遵循一條線的散點圖表明該數據非常適合線性回歸練習。
一個在 Jupyter notebook 中效果良好的數據視覺化庫是 Matplotlib(您在上一課中也見過)。
在這些教程中獲得更多數據視覺化的經驗。
練習 - 嘗試使用 Matplotlib
嘗試創建一些基本圖表來顯示您剛剛創建的新 dataframe。基本折線圖會顯示什麼?
-
在文件頂部的 Pandas 導入下導入 Matplotlib:
import matplotlib.pyplot as plt
-
重新運行整個 notebook 以刷新。
-
在 notebook 底部添加一個單元格,將數據繪製為框圖:
price = new_pumpkins.Price month = new_pumpkins.Month plt.scatter(price, month) plt.show()
這是一個有用的圖表嗎?有什麼讓您感到驚訝嗎?
它並不是特別有用,因為它僅僅顯示了某個月份的數據分佈。
使其更有用
要使圖表顯示有用的數據,通常需要以某種方式對數據進行分組。讓我們嘗試創建一個圖表,其中 y 軸顯示月份,數據展示數據的分佈。
-
添加一個單元格以創建分組柱狀圖:
new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar') plt.ylabel("Pumpkin Price")
這是一個更有用的數據視覺化!它似乎表明南瓜的最高價格出現在九月和十月。這符合您的預期嗎?為什麼?
🚀挑戰
探索 Matplotlib 提供的不同類型的視覺化。哪些類型最適合回歸問題?
課後測驗
回顧與自學
看看數據視覺化的多種方式。列出可用的各種庫,並記錄哪些庫最適合特定類型的任務,例如 2D 視覺化與 3D 視覺化。您發現了什麼?
作業
免責聲明:
本文件已使用 AI 翻譯服務 Co-op Translator 進行翻譯。儘管我們努力確保翻譯的準確性,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。