13 KiB
使用 Python 和 Scikit-learn 開始迴歸模型之旅
手繪筆記由 Tomomi Imura 製作
課前小測
這堂課也有 R 語言版本!
介紹
在這四堂課中,你將學習如何建立迴歸模型。我們很快會討論這些模型的用途。但在做任何事之前,先確保你已經準備好合適的工具來開展流程!
在這堂課,你將學習如何:
- 配置你的電腦進行本地機器學習任務。
- 使用 Jupyter 筆記本。
- 使用 Scikit-learn,包括安裝步驟。
- 通過實作練習探索線性迴歸。
安裝與設定
🎥 點擊上方圖片觀看短片,學習如何配置電腦以進行 ML。
-
安裝 Python。確保你的電腦已安裝好 Python。Python 是許多數據科學及機器學習任務的重要工具。大多數系統已內建 Python。也有實用的 Python 編碼套件 可供部分用戶簡化設定。
然而部分 Python 的應用需要特定版本,因此使用 虛擬環境 是非常有用的。
-
安裝 Visual Studio Code。確保你的電腦已安裝 Visual Studio Code。遵循此說明安裝 Visual Studio Code完成基礎安裝。因為你會在這課程中使用 Python,所以建議熟悉如何為 Python 開發設定 Visual Studio Code。
透過一系列 Learn 模組熟悉 Python。
🎥 點擊上方圖片觀看如何在 VS Code 裡使用 Python 的教學影片。
-
安裝 Scikit-learn,請參考這些指示。因必須使用 Python 3,建議在虛擬環境中安裝。如果你在 M1 Mac 上安裝,請注意頁面上有特別說明。
-
安裝 Jupyter Notebook。你需要 安裝 Jupyter 軟件包。
你的機器學習開發環境
你將使用 筆記本 來編寫 Python 程式碼和建立機器學習模型。這類文件是數據科學家常用工具,可以透過副檔名 .ipynb 識別。
筆記本是互動環境,開發者可同時撰寫程式碼、添加註解與文件,非常適合實驗或研究型項目。
🎥 點擊上方圖片觀看此練習的教學短片。
練習 - 使用筆記本
在此資料夾中,你會找到 notebook.ipynb 檔案。
-
在 Visual Studio Code 中打開 notebook.ipynb。
Jupyter 服務會以 Python 3+ 启动。你會看到筆記本中可
執行的程式碼區塊。點擊類似播放按鈕的圖示即可執行區塊。 -
選擇
md圖標並添加一些 markdown,寫入以下文字 # 歡迎使用你的筆記本。接著,加入一些 Python 程式碼。
-
在程式碼區塊中輸入 print('hello notebook')。
-
點擊箭頭執行程式碼。
你應該會看到列印的訊息:
hello notebook
你可以在程式碼中夾帶註解,讓筆記本自我文件化。
✅ 花點時間想想,網頁開發者的工作環境與數據科學家的工作環境有多不同。
使用 Scikit-learn 快速起步
現在你的本地環境已安裝好 Python,且熟悉 Jupyter 筆記本,接下來讓我們來熟悉 Scikit-learn(發音為「sci」就像「science」中的發音)。Scikit-learn 提供了豐富的 API,幫助你執行機器學習任務。
根據他們的網站描述:「Scikit-learn 是一個開源機器學習函式庫,支援監督式及非監督式學習。它同時提供模型擬合、資料預處理、模型選擇與評估以及許多其他實用工具。」
在本課程中,你將使用 Scikit-learn 和其他工具,建立所謂「傳統機器學習」的模型。我們有意避開神經網絡與深度學習,這些會在即將推出的「初學者 AI」課程中深入介紹。
Scikit-learn 讓建立與評估模型變得簡單方便。它主要聚焦於使用數值資料,並內建多個現成數據集作學習範例,也包含已建好的模型供學生嘗試。讓我們先探索如何載入內建數據,使用 Scikit-learn 的預建估計器建立第一個機器學習模型,並分析簡單的數據。
練習 - 你的第一個 Scikit-learn 筆記本
本教程靈感來自 Scikit-learn 網站上的線性迴歸範例。
🎥 點擊上方圖片觀看此練習的教學短片。
在本課程附帶的 notebook.ipynb 檔案中,按下「垃圾桶」圖示清除所有儲存格。
這部分你將使用 Scikit-learn 內建一個關於糖尿病的小型數據集。假設你想測試某項糖尿病病患的治療方法。機器學習模型可幫助你依據變數組合判斷哪些病患的反應會較佳。即使是非常基礎的迴歸模型,當視覺化後,也可揭露變數間的信息,幫你規劃理論臨床試驗。
✅ 有許多類型的迴歸方法,不同方法適合解決不同問題。若你想預測特定年齡的身高,會用線性迴歸,因為你尋求的是數值結果;若你想判定一道菜是否屬於素食料理,則是分類問題,會用邏輯迴歸。稍後你將學習邏輯迴歸。花點時間思考可向資料提出的問題,以及哪種方法更合適。
現在開始著手這項任務。
引入程式庫
這項任務會用到以下一些程式庫:
- matplotlib。這是有用的繪圖工具,我們將用它來畫折線圖。
- numpy。numpy 是 Python 中處理數值資料的重要函式庫。
- sklearn。這是 Scikit-learn。
引入所需的程式庫協助完成任務。
-
輸入以下代碼以加入引用:
import matplotlib.pyplot as plt import numpy as np from sklearn import datasets, linear_model, model_selection你以上引用了
matplotlib、numpy,還從sklearn引入了datasets、linear_model和model_selection。model_selection用於將資料分成訓練組與測試組。
糖尿病數據集
內建的 糖尿病數據集包含 442 筆糖尿病相關資料,含 10 項特徵變數,其中包括:
- 年齡:years
- 體重指數 (bmi)
- 血壓平均值 (bp)
- s1 tc:T 細胞(一種白血球)
✅ 此資料集將「性別」視為一項重要特徵變數,醫學資料中常包含此類二元分類。思考一下這種分類方式可能導致部分族群因特徵被排除於療法之外。
現在載入資料矩陣 X 和目標 y。
🎓 請記得,這是監督式學習,需要一個命名為 y 的目標變量。
在新程式碼區塊中,透過呼叫 load_diabetes() 載入糖尿病資料集。參數 return_X_y=True 表示回傳的 X 是資料矩陣,y 是迴歸目標。
-
加入 print 指令以顯示資料矩陣形狀與第一筆資料:
X, y = datasets.load_diabetes(return_X_y=True) print(X.shape) print(X[0])回傳結果是一個元組。你是將元組的前兩個值分別賦值給
X和y。進一步了解 元組。你可以看到資料有 442 筆,且每筆資料包含 10 個元素:
(442, 10) [ 0.03807591 0.05068012 0.06169621 0.02187235 -0.0442235 -0.03482076 -0.04340085 -0.00259226 0.01990842 -0.01764613]✅ 想想資料與迴歸目標之間的關係。線性迴歸預測特徵 X 與目標變數 y 的關係。你能在說明文檔找到糖尿病資料集的目標是什麼嗎?這資料集想展示什麼?
-
接著選取此資料集中的一部份畫圖,方法是選取第 3 欄數據。你可以使用
:選擇所有列,再用索引 (2) 選擇第 3 欄。為符合繪圖需求,可以用reshape(n_rows, n_columns)將資料重新塑形。當一個參數為 -1 時,該維度大小會自動計算。X = X[:, 2] X = X.reshape((-1,1))✅ 需要時隨時列印資料檢查其形狀。
-
現在你有了可以繪圖的資料,接著可讓機器判斷資料分組的合理界線。為此,需要將資料 (X) 與目標 (y) 分割成測試集與訓練集。Scikit-learn 提供簡單方法指定分割點。
X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33) -
現在準備訓練模型!載入線性迴歸模型並用 X 與 y 訓練資料集執行
model.fit()進行訓練:model = linear_model.LinearRegression() model.fit(X_train, y_train)✅
model.fit()是許多 ML 函式庫(例如 TensorFlow)常見的訓練函式 -
使用測試資料透過
predict()函式創建預測,繪圖時將用這條預測線分隔資料群組y_pred = model.predict(X_test) -
現在是時候用圖形顯示資料。Matplotlib 是非常有用的工具。繪製所有 X 與 y 測試資料的散點圖,並利用預測結果畫出最合適的分界線,顯示模型資料分組。
plt.scatter(X_test, y_test, color='black') plt.plot(X_test, y_pred, color='blue', linewidth=3) plt.xlabel('Scaled BMIs') plt.ylabel('Disease Progression') plt.title('A Graph Plot Showing Diabetes Progression Against BMI') plt.show()✅ 想一想這裡發生了什麼。一條直線穿過許多小點資料,但它到底在做什麼?你能否看到如何利用這條線去預測一個新的、未見過的資料點應該在圖上的 y 軸上的位置?試著用文字描述這個模型的實際用途。
恭喜你,建立了你的第一個線性回歸模型,使用它做出一個預測,並將結果顯示在圖表中!
🚀挑戰
繪製這個資料集中的另一個變數。提示:編輯這行:X = X[:,2]。根據這個資料集的目標,你能發現糖尿病作為一種疾病的發展過程嗎?
課後小測驗
回顧與自學
在本教學中,你使用的是簡單線性回歸,而非單變量或多重線性回歸。閱讀一些關於這些方法差異的資料,或觀看這個影片
多閱讀關於回歸這個概念的內容,並思考這種技術能回答哪些類型的問題。參加這個教學來深化你的理解。
作業
免責聲明: 本文件由 AI 翻譯服務 Co-op Translator 翻譯而成。雖然我們致力於確保準確性,但請注意,機器自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於重要資訊,建議進行專業人工翻譯。我們不對因使用本翻譯而產生的任何誤解或誤釋承擔責任。






