From 0cf58c64fc697406501041763213c28948d965e1 Mon Sep 17 00:00:00 2001 From: Theodore Cooper <63190431+theodorecooper@users.noreply.github.com> Date: Tue, 7 Jun 2022 22:50:54 +0800 Subject: [PATCH 1/2] [Translations] Add traditional chinese translations (#601) * Add Traditional Chinese translation * Add Traditional Chinese translation * Add files via upload * Add Traditional Chinese translation * Add Traditional Chinese translation * Add files via upload * Add Traditional Chinese translation * Add Traditional Chinese translation * Add Traditional Chinese translation * Add files via upload --- .../1-Tools/translations/README.zh-tw.md | 208 +++++++++++ .../1-Tools/translations/assignment.zh-tw.md | 14 + .../2-Data/translations/README.zh-tw.md | 203 +++++++++++ .../2-Data/translations/assignment.zh-tw.md | 9 + .../3-Linear/translations/README.zh-tw.md | 342 ++++++++++++++++++ .../3-Linear/translations/assignment.zh-tw.md | 11 + .../4-Logistic/translations/README.zh-tw.md | 301 +++++++++++++++ .../translations/assignment.zh-tw.md | 11 + 2-Regression/translations/README.zh-tw.md | 36 ++ 9 files changed, 1135 insertions(+) create mode 100644 2-Regression/1-Tools/translations/README.zh-tw.md create mode 100644 2-Regression/1-Tools/translations/assignment.zh-tw.md create mode 100644 2-Regression/2-Data/translations/README.zh-tw.md create mode 100644 2-Regression/2-Data/translations/assignment.zh-tw.md create mode 100644 2-Regression/3-Linear/translations/README.zh-tw.md create mode 100644 2-Regression/3-Linear/translations/assignment.zh-tw.md create mode 100644 2-Regression/4-Logistic/translations/README.zh-tw.md create mode 100644 2-Regression/4-Logistic/translations/assignment.zh-tw.md create mode 100644 2-Regression/translations/README.zh-tw.md diff --git a/2-Regression/1-Tools/translations/README.zh-tw.md b/2-Regression/1-Tools/translations/README.zh-tw.md new file mode 100644 index 00000000..79b8aad1 --- /dev/null +++ b/2-Regression/1-Tools/translations/README.zh-tw.md @@ -0,0 +1,208 @@ +# 開始使用 Python 和 Scikit 學習回歸模型 + +![回歸](../../../sketchnotes/ml-regression.png) + +> 作者 [Tomomi Imura](https://www.twitter.com/girlie_mac) + +## [課前測](https://white-water-09ec41f0f.azurestaticapps.net/quiz/9/) + +## 介紹 + +在這四節課中,你將了解如何構建回歸模型。我們將很快討論這些是什麽。但在你做任何事情之前,請確保你有合適的工具來開始這個過程! + +在本課中,你將學習如何: + +- 為本地機器學習任務配置你的計算機。 +- 使用 Jupyter notebooks。 +- 使用 Scikit-learn,包括安裝。 +- 通過動手練習探索線性回歸。 + +## 安裝和配置 + +[![在 Visual Studio Code 中使用 Python](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "Setup Python with Visual Studio Code") + +> 🎥 單擊上圖觀看視頻:在 VS Code 中使用 Python。 + +1. **安裝 Python**。確保你的計算機上安裝了 [Python](https://www.python.org/downloads/)。你將在許多數據科學和機器學習任務中使用 Python。大多數計算機系統已經安裝了 Python。也有一些有用的 [Python 編碼包](https://code.visualstudio.com/learn/educations/installers?WT.mc_id=academic-15963-cxa) 可用於簡化某些用戶的設置。 + + 然而,Python 的某些用法需要一個版本的軟件,而其他用法則需要另一個不同的版本。 因此,在 [虛擬環境](https://docs.python.org/3/library/venv.html) 中工作很有用。 + +2. **安裝 Visual Studio Code**。確保你的計算機上安裝了 Visual Studio Code。按照這些說明 [安裝 Visual Studio Code](https://code.visualstudio.com/) 進行基本安裝。在本課程中,你將在 Visual Studio Code 中使用 Python,因此你可能想復習如何 [配置 Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-15963-cxa) 用於 Python 開發。 + + > 通過學習這一系列的 [學習模塊](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-15963-cxa) 熟悉 Python + +3. **按照 [這些說明](https://scikit-learn.org/stable/install.html) 安裝 Scikit learn**。由於你需要確保使用 Python3,因此建議你使用虛擬環境。註意,如果你是在 M1 Mac 上安裝這個庫,在上面鏈接的頁面上有特別的說明。 + +4. **安裝 Jupyter Notebook**。你需要 [安裝 Jupyter 包](https://pypi.org/project/jupyter/)。 + +## 你的 ML 工作環境 + +你將使用 **notebooks** 開發 Python 代碼並創建機器學習模型。這種類型的文件是數據科學家的常用工具,可以通過後綴或擴展名 `.ipynb` 來識別它們。 + +Notebooks 是一個交互式環境,允許開發人員編寫代碼並添加註釋並圍繞代碼編寫文檔,這對於實驗或面向研究的項目非常有幫助。 + +### 練習 - 使用 notebook + +1. 在 Visual Studio Code 中打開 _notebook.ipynb_。 + + Jupyter 服務器將以 python3+啟動。你會發現 notebook 可以「運行」的區域、代碼塊。你可以通過選擇看起來像播放按鈕的圖標來運行代碼塊。 + +2. 選擇 `md` 圖標並添加一點 markdown,輸入文字 **# Welcome to your notebook**。 + + 接下來,添加一些 Python 代碼。 + +1. 在代碼塊中輸入 **print("hello notebook")**。 + +2. 選擇箭頭運行代碼。 + + 你應該看到打印的語句: + + ```output + hello notebook + ``` + +![打開 notebook 的 VS Code](../images/notebook.jpg) + +你可以為你的代碼添加註釋,以便 notebook 可以自描述。 + +✅ 想一想 web 開發人員的工作環境與數據科學家的工作環境有多大的不同。 + +## 啟動並運行 Scikit-learn + +現在 Python 已在你的本地環境中設置好,並且你對 Jupyter notebook 感到滿意,讓我們同樣熟悉 Scikit-learn(在「science」中發音為「sci」)。 Scikit-learn 提供了 [大量的 API](https://scikit-learn.org/stable/modules/classes.html#api-ref) 來幫助你執行 ML 任務。 + +根據他們的 [網站](https://scikit-learn.org/stable/getting_started.html),「Scikit-learn 是一個開源機器學習庫,支持有監督和無監督學習。它還提供了各種模型擬合工具、數據預處理、模型選擇和評估以及許多其他實用程序。」 + +在本課程中,你將使用 Scikit-learn 和其他工具來構建機器學習模型,以執行我們所謂的「傳統機器學習」任務。我們特意避免了神經網絡和深度學習,因為它們在我們即將推出的「面向初學者的人工智能」課程中得到了更好的介紹。 + +Scikit-learn 使構建模型和評估它們的使用變得簡單。它主要側重於使用數字數據,並包含幾個現成的數據集用作學習工具。它還包括供學生嘗試的預建模型。讓我們探索加載預先打包的數據和使用內置的 estimator first ML 模型和 Scikit-learn 以及一些基本數據的過程。 + +## 練習 - 你的第一個 Scikit-learn notebook + +> 本教程的靈感來自 Scikit-learn 網站上的 [線性回歸示例](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py)。 + +在與本課程相關的 _notebook.ipynb_ 文件中,通過點擊「垃圾桶」圖標清除所有單元格。 + +在本節中,你將使用一個關於糖尿病的小數據集,該數據集內置於 Scikit-learn 中以用於學習目的。想象一下,你想為糖尿病患者測試一種治療方法。機器學習模型可能會幫助你根據變量組合確定哪些患者對治療反應更好。即使是非常基本的回歸模型,在可視化時,也可能會顯示有助於組織理論臨床試驗的變量信息。 + +✅ 回歸方法有很多種,你選擇哪一種取決於你正在尋找的答案。如果你想預測給定年齡的人的可能身高,你可以使用線性回歸,因為你正在尋找**數值**。如果你有興趣了解某種菜肴是否應被視為素食主義者,那麽你正在尋找**類別分配**,以便使用邏輯回歸。稍後你將了解有關邏輯回歸的更多信息。想一想你可以對數據提出的一些問題,以及這些方法中的哪一個更合適。 + +讓我們開始這項任務。 + +### 導入庫 + +對於此任務,我們將導入一些庫: + +- **matplotlib**。這是一個有用的 [繪圖工具](https://matplotlib.org/),我們將使用它來創建線圖。 +- **numpy**。 [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) 是一個有用的庫,用於在 Python 中處理數字數據。 +- **sklearn**。這是 Scikit-learn 庫。 + +導入一些庫來幫助你完成任務。 + +1. 通過輸入以下代碼添加導入: + + ```python + import matplotlib.pyplot as plt + import numpy as np + from sklearn import datasets, linear_model, model_selection + ``` + + 在上面的代碼中,你正在導入 `matplottlib`、`numpy`,你正在從 `sklearn` 導入 `datasets`、`linear_model` 和 `model_selection`。 `model_selection` 用於將數據拆分為訓練集和測試集。 + +### 糖尿病數據集 + +內置的 [糖尿病數據集](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) 包含 442 個圍繞糖尿病的數據樣本,具有 10 個特征變量,其中包括: + +- age:歲數 +- bmi:體重指數 +- bp:平均血壓 +- s1 tc:T 細胞(一種白細胞) + +✅ 該數據集包括「性別」的概念,作為對糖尿病研究很重要的特征變量。許多醫學數據集包括這種類型的二元分類。想一想諸如此類的分類如何將人群的某些部分排除在治療之外。 + +現在,加載 X 和 y 數據。 + +> 🎓 請記住,這是監督學習,我們需要一個命名為「y」的目標。 + +在新的代碼單元中,通過調用 `load_diabetes()` 加載糖尿病數據集。輸入 `return_X_y=True` 表示 `X` 將是一個數據矩陣,而`y`將是回歸目標。 + +1. 添加一些打印命令來顯示數據矩陣的形狀及其第一個元素: + + ```python + X, y = datasets.load_diabetes(return_X_y=True) + print(X.shape) + print(X[0]) + ``` + + 作為響應返回的是一個元組。你正在做的是將元組的前兩個值分別分配給 `X` 和 `y`。了解更多 [關於元組](https://wikipedia.org/wiki/Tuple)。 + + 你可以看到這個數據有 442 個項目,組成了 10 個元素的數組: + + ```text + (442, 10) + [ 0.03807591 0.05068012 0.06169621 0.02187235 -0.0442235 -0.03482076 + -0.04340085 -0.00259226 0.01990842 -0.01764613] + ``` + + ✅ 稍微思考一下數據和回歸目標之間的關系。線性回歸預測特征 X 和目標變量 y 之間的關系。你能在文檔中找到糖尿病數據集的 [目標](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) 嗎?鑒於該目標,該數據集展示了什麽? + +2. 接下來,通過使用 numpy 的 `newaxis` 函數將數據集的一部分排列到一個新數組中。我們將使用線性回歸根據它確定的模式在此數據中的值之間生成一條線。 + + ```python + X = X[:, np.newaxis, 2] + ``` + + ✅ 隨時打印數據以檢查其形狀。 + +3. 現在你已準備好繪製數據,你可以看到計算機是否可以幫助確定此數據集中數字之間的邏輯分割。為此你需要將數據 (X) 和目標 (y) 拆分為測試集和訓練集。Scikit-learn 有一個簡單的方法來做到這一點;你可以在給定點拆分測試數據。 + + ```python + X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33) + ``` + +4. 現在你已準備好訓練你的模型!加載線性回歸模型並使用 `model.fit()` 使用 X 和 y 訓練集對其進行訓練: + + ```python + model = linear_model.LinearRegression() + model.fit(X_train, y_train) + ``` + + ✅ `model.fit()` 是一個你會在許多機器學習庫(例如 TensorFlow)中看到的函數 + +5. 然後,使用函數 `predict()`,使用測試數據創建預測。這將用於繪製數據組之間的線 + + ```python + y_pred = model.predict(X_test) + ``` + +6. 現在是時候在圖中顯示數據了。Matplotlib 是完成此任務的非常有用的工具。創建所有 X 和 y 測試數據的散點圖,並使用預測在模型的數據分組之間最合適的位置畫一條線。 + + ```python + plt.scatter(X_test, y_test, color='black') + plt.plot(X_test, y_pred, color='blue', linewidth=3) + plt.show() + ``` + + ![顯示糖尿病周圍數據點的散點圖](../images/scatterplot.png) + + ✅ 想一想這裏發生了什麽。一條直線穿過許多小數據點,但它到底在做什麽?你能看到你應該如何使用這條線來預測一個新的、未見過的數據點對應的 y 軸值嗎?嘗試用語言描述該模型的實際用途。 + +恭喜,你構建了第一個線性回歸模型,使用它創建了預測,並將其顯示在繪圖中! + +--- + +## 🚀挑戰 + +從這個數據集中繪製一個不同的變量。提示:編輯這一行:`X = X[:, np.newaxis, 2]`。鑒於此數據集的目標,你能夠發現糖尿病作為一種疾病的進展情況嗎? + +## [課後測](https://white-water-09ec41f0f.azurestaticapps.net/quiz/10/) + +## 復習與自學 + +在本教程中,你使用了簡單線性回歸,而不是單變量或多元線性回歸。閱讀一些關於這些方法之間差異的信息,或查看 [此視頻](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef) + +閱讀有關回歸概念的更多信息,並思考這種技術可以回答哪些類型的問題。用這個 [教程](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-15963-cxa) 加深你的理解。 + +## 任務 + +[不同的數據集](./assignment.zh-tw.md) diff --git a/2-Regression/1-Tools/translations/assignment.zh-tw.md b/2-Regression/1-Tools/translations/assignment.zh-tw.md new file mode 100644 index 00000000..bd1d384c --- /dev/null +++ b/2-Regression/1-Tools/translations/assignment.zh-tw.md @@ -0,0 +1,14 @@ +# 用 Scikit-learn 實現一次回歸算法 + +## 說明 + +先看看 Scikit-learn 中的 [Linnerud 數據集](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_linnerud.html#sklearn.datasets.load_linnerud) +這個數據集中有多個[目標變量(target)](https://scikit-learn.org/stable/datasets/toy_dataset.html#linnerrud-dataset),其中包含了三種運動(訓練數據)和三個生理指標(目標變量)組成,這些數據都是從一個健身俱樂部中的 20 名中年男子收集到的。 + +之後用自己的方式,創建一個可以描述腰圍和完成仰臥起坐個數關系的回歸模型。用同樣的方式對這個數據集中的其它數據也建立一下模型探究一下其中的關系。 + +## 評判標準 + +| 標準 | 優秀 | 中規中矩 | 仍需努力 | +| ------------------------------ | ----------------------------------- | ----------------------------- | -------------------------- | +| 需要提交一段能描述數據集中關系的文字 | 很好的描述了數據集中的關系 | 只能描述少部分的關系 | 啥都沒有提交 | diff --git a/2-Regression/2-Data/translations/README.zh-tw.md b/2-Regression/2-Data/translations/README.zh-tw.md new file mode 100644 index 00000000..c3d92fde --- /dev/null +++ b/2-Regression/2-Data/translations/README.zh-tw.md @@ -0,0 +1,203 @@ +# 使用 Scikit-learn 構建回歸模型:準備和可視化數據 + +![數據可視化信息圖](../images/data-visualization.png) +> 作者 [Dasani Madipalli](https://twitter.com/dasani_decoded) + +## [課前測](https://white-water-09ec41f0f.azurestaticapps.net/quiz/11/) + +## 介紹 + +既然你已經設置了開始使用 Scikit-learn 處理機器學習模型構建所需的工具,你就可以開始對數據提出問題了。當你處理數據並應用ML解決方案時,了解如何提出正確的問題以正確釋放數據集的潛力非常重要。 + +在本課中,你將學習: + +- 如何為模型構建準備數據。 +- 如何使用 Matplotlib 進行數據可視化。 + +## 對你的數據提出正確的問題 + +你提出的問題將決定你將使用哪種類型的 ML 算法。你得到的答案的質量將在很大程度上取決於你的數據的性質。 + +查看為本課程提供的[數據](../data/US-pumpkins.csv)。你可以在 VS Code 中打開這個 .csv 文件。快速瀏覽一下就會發現有空格,還有字符串和數字數據的混合。還有一個奇怪的列叫做「Package」,其中的數據是「sacks」、「bins」和其他值的混合。事實上,數據有點亂。 + +事實上,得到一個完全準備好用於創建 ML 模型的開箱即用數據集並不是很常見。在本課中,你將學習如何使用標準 Python 庫準備原始數據集。你還將學習各種技術來可視化數據。 + +## 案例研究:「南瓜市場」 + +你將在 `data` 文件夾中找到一個名為 [US-pumpkins.csv](../data/US-pumpkins.csv) 的 .csv 文件,其中包含有關南瓜市場的 1757 行數據,已按城市排序分組。這是從美國農業部分發的[特種作物終端市場標準報告](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice)中提取的原始數據。 + +### 準備數據 + +這些數據屬於公共領域。它可以從美國農業部網站下載,每個城市有許多不同的文件。為了避免太多單獨的文件,我們將所有城市數據合並到一個電子表格中,因此我們已經準備了一些數據。接下來,讓我們仔細看看數據。 + +### 南瓜數據 - 早期結論 + +你對這些數據有什麽看法?你已經看到了無法理解的字符串、數字、空格和奇怪值的混合體。 + +你可以使用回歸技術對這些數據提出什麽問題?「預測給定月份內待售南瓜的價格」怎麽樣?再次查看數據,你需要進行一些更改才能創建任務所需的數據結構。 + +## 練習 - 分析南瓜數據 + +讓我們使用 [Pandas](https://pandas.pydata.org/),(「Python 數據分析」 Python Data Analysis 的意思)一個非常有用的工具,用於分析和準備南瓜數據。 + +### 首先,檢查遺漏的日期 + +你首先需要采取以下步驟來檢查缺少的日期: + +1. 將日期轉換為月份格式(這些是美國日期,因此格式為 `MM/DD/YYYY`)。 + +2. 將月份提取到新列。 + +在 Visual Studio Code 中打開 notebook.ipynb 文件,並將電子表格導入到新的 Pandas dataframe 中。 + +1. 使用 `head()` 函數查看前五行。 + + ```python + import pandas as pd + pumpkins = pd.read_csv('../../data/US-pumpkins.csv') + pumpkins.head() + ``` + + ✅ 使用什麽函數來查看最後五行? + +2. 檢查當前 dataframe 中是否缺少數據: + + ```python + pumpkins.isnull().sum() + ``` + + 有數據丟失,但可能對手頭的任務來說無關緊要。 + +3. 為了讓你的 dataframe 更容易使用,使用 `drop()` 刪除它的幾個列,只保留你需要的列: + + ```python + new_columns = ['Package', 'Month', 'Low Price', 'High Price', 'Date'] + pumpkins = pumpkins.drop([c for c in pumpkins.columns if c not in new_columns], axis=1) + ``` + +### 然後,確定南瓜的平均價格 + +考慮如何確定給定月份南瓜的平均價格。你會為此任務選擇哪些列?提示:你需要 3 列。 + +解決方案:取 `Low Price` 和 `High Price` 列的平均值來填充新的 Price 列,將 Date 列轉換成只顯示月份。幸運的是,根據上面的檢查,沒有丟失日期或價格的數據。 + +1. 要計算平均值,請添加以下代碼: + + ```python + price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2 + + month = pd.DatetimeIndex(pumpkins['Date']).month + + ``` + + ✅ 請隨意使用 `print(month)` 打印你想檢查的任何數據。 + +2. 現在,將轉換後的數據復製到新的 Pandas dataframe 中: + + ```python + 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 蒲式耳的尺寸出售,有的以 1/2 蒲式耳的尺寸出售,有的以每只南瓜出售,有的以每磅出售,有的以不同寬度的大盒子出售。 + +> 南瓜似乎很難統一稱重方式 + +深入研究原始數據,有趣的是,任何 `Unit of Sale` 等於「EACH」或「PER BIN」的東西也具有每英寸、每箱或「每個」的 `Package` 類型。南瓜似乎很難采用統一稱重方式,因此讓我們通過僅選擇 `Package` 列中帶有字符串「蒲式耳」的南瓜來過濾它們。 + +1. 在初始 .csv 導入下添加過濾器: + + ```python + pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)] + ``` + + 如果你現在打印數據,你可以看到你只獲得了 415 行左右包含按蒲式耳計算的南瓜的數據。 + +### 可是等等! 還有一件事要做 + +你是否註意到每行的蒲式耳數量不同?你需要對定價進行標準化,以便顯示每蒲式耳的定價,因此請進行一些數學計算以對其進行標準化。 + +1. 在創建 new_pumpkins dataframe 的代碼塊之後添加這些行: + + ```python + 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](https://www.thespruceeats.com/how-much-is-a-bushel-1389308),蒲式耳的重量取決於產品的類型,因為它是一種體積測量。「例如,一蒲式耳西紅柿應該重56 磅……葉子和蔬菜占據更多空間,重量更輕,所以一蒲式耳菠菜只有20磅。」 這一切都相當復雜!讓我們不要費心進行蒲式耳到磅的轉換,而是按蒲式耳定價。然而,所有這些對蒲式耳南瓜的研究表明,了解數據的性質是多麽重要! + +現在,你可以根據蒲式耳測量來分析每單位的定價。如果你再打印一次數據,你可以看到它是如何標準化的。 + +✅ 你有沒有註意到半蒲式耳賣的南瓜很貴?你能弄清楚為什麽嗎?提示:小南瓜比大南瓜貴得多,這可能是因為考慮到一個大的空心餡餅南瓜占用的未使用空間,每蒲式耳的南瓜要多得多。 + +## 可視化策略 + +數據科學家的部分職責是展示他們使用的數據的質量和性質。為此,他們通常會創建有趣的可視化或繪圖、圖形和圖表,以顯示數據的不同方面。通過這種方式,他們能夠直觀地展示難以發現的關系和差距。 + +可視化還可以幫助確定最適合數據的機器學習技術。例如,似乎沿著一條線的散點圖表明該數據是線性回歸練習的良好候選者。 + +一個在 Jupyter notebooks 中運行良好的數據可視化庫是 [Matplotlib](https://matplotlib.org/)(你在上一課中也看到過)。 + +> 在[這些教程](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-15963-cxa)中獲得更多數據可視化經驗。 + +## 練習 - 使用 Matplotlib 進行實驗 + +嘗試創建一些基本圖形來顯示你剛剛創建的新 dataframe。基本線圖會顯示什麽? + +1. 在文件頂部導入 Matplotlib: + + ```python + import matplotlib.pyplot as plt + ``` + +2. 重新刷新以運行整個 notebook。 + +3. 在 notebook 底部,添加一個單元格以繪製數據: + + ```python + price = new_pumpkins.Price + month = new_pumpkins.Month + plt.scatter(price, month) + plt.show() + ``` + + ![顯示價格與月份關系的散點圖](../images/scatterplot.png) + + 這是一個有用的圖嗎?有什麽讓你吃驚的嗎? + + 它並不是特別有用,因為它所做的只是在你的數據中顯示為給定月份的點數分布。 + +### 讓它有用 + +為了讓圖表顯示有用的數據,你通常需要以某種方式對數據進行分組。讓我們嘗試創建一個圖,其中 y 軸顯示月份,數據顯示數據的分布。 + +1. 添加單元格以創建分組柱狀圖: + + ```python + new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar') + plt.ylabel("Pumpkin Price") + ``` + + ![顯示價格與月份關系的柱狀圖](../images/barchart.png) + + 這是一個更有用的數據可視化!似乎表明南瓜的最高價格出現在 9 月和 10 月。這符合你的期望嗎?為什麽?為什麽不? + +--- + +## 🚀挑戰 + +探索 Matplotlib 提供的不同類型的可視化。哪種類型最適合回歸問題? + +## [課後測](https://white-water-09ec41f0f.azurestaticapps.net/quiz/12/) + +## 復習與自學 + +請看一下可視化數據的多種方法。列出各種可用的庫,並註意哪些庫最適合給定類型的任務,例如 2D 可視化與 3D 可視化。你發現了什麽? + +## 任務 + +[探索可視化](./assignment.zh-tw.md) diff --git a/2-Regression/2-Data/translations/assignment.zh-tw.md b/2-Regression/2-Data/translations/assignment.zh-tw.md new file mode 100644 index 00000000..7eb2e9a5 --- /dev/null +++ b/2-Regression/2-Data/translations/assignment.zh-tw.md @@ -0,0 +1,9 @@ +# 探索數據可視化 + +有好幾個庫都可以進行數據可視化。用 matplotlib 和 seaborn 對本課中涉及的 Pumpkin 數據集創建一些數據可視化的圖標。並思考哪個庫更容易使用? + +## 評判標準 + +| 標準 | 優秀 | 中規中矩 | 仍需努力 | +| -------- | --------- | -------- | ----------------- | +| | 提交了含有兩種探索可視化方法的 notebook 工程文件 | 提交了只包含有一種探索可視化方法的 notebook 工程文件 | 沒提交 notebook 工程文件 | diff --git a/2-Regression/3-Linear/translations/README.zh-tw.md b/2-Regression/3-Linear/translations/README.zh-tw.md new file mode 100644 index 00000000..a5a78ed4 --- /dev/null +++ b/2-Regression/3-Linear/translations/README.zh-tw.md @@ -0,0 +1,342 @@ +# 使用 Scikit-learn 構建回歸模型:兩種方式的回歸 + +![線性與多項式回歸信息圖](../images/linear-polynomial.png) + +> 作者 [Dasani Madipalli](https://twitter.com/dasani_decoded) + +## [課前測](https://white-water-09ec41f0f.azurestaticapps.net/quiz/13/) + +### 介紹 + +到目前為止,你已經通過從我們將在本課程中使用的南瓜定價數據集收集的樣本數據探索了什麽是回歸。你還使用 Matplotlib 對其進行了可視化。 + +現在你已準備好深入研究 ML 的回歸。 在本課中,你將詳細了解兩種類型的回歸:_基本線性回歸_ 和 _多項式回歸_,以及這些技術背後的一些數學知識。 + +> 在整個課程中,我們假設數學知識最少,並試圖讓來自其他領域的學生也能接觸到它,因此請使用筆記、🧮標註、圖表和其他學習工具以幫助理解。 + +### 前提 + +你現在應該熟悉我們正在檢查的南瓜數據的結構。你可以在本課的 _notebook.ipynb_ 文件中找到它。 在這個文件中,南瓜的價格顯示在一個新的 dataframe 中。確保可以在 Visual Studio Code 代碼的內核中運行這些 notebooks。 + +### 準備 + +提醒一下,你正在加載此數據以提出問題。 + +- 什麽時候買南瓜最好? +- 一箱微型南瓜的價格是多少? +- 我應該買半蒲式耳還是 1 1/9 蒲式耳? + +讓我們繼續深入研究這些數據。 + +在上一課中,你創建了一個 Pandas dataframe 並用原始數據集的一部分填充它,按蒲式耳標準化定價。但是,通過這樣做,你只能收集大約 400 個數據點,而且只能收集秋季月份的數據。 + +看看我們在本課隨附的 notebook 中預加載的數據。數據已預加載,並繪製了初始散點圖以顯示月份數據。也許我們可以通過更多地清理數據來獲得更多關於數據性質的細節。 + +## 線性回歸線 + +正如你在第 1 課中學到的,線性回歸練習的目標是能夠繪製一條線以便: + +- **顯示變量關系**。 顯示變量之間的關系 +- **作出預測**。 準確預測新數據點與該線的關系。 + +繪製這種類型的線是**最小二乘回歸**的典型做法。術語「最小二乘法」意味著將回歸線周圍的所有數據點平方,然後相加。理想情況下,最終和盡可能小,因為我們希望錯誤數量較少,或「最小二乘法」。 + +我們這樣做是因為我們想要對一條與所有數據點的累積距離最小的線進行建模。我們還在添加它們之前對這些項進行平方,因為我們關心的是它的大小而不是它的方向。 + +> **🧮 數學知識** +> +> 這條線稱為 _最佳擬合線_,可以用[一個等式](https://en.wikipedia.org/wiki/Simple_linear_regression)表示: +> +> ``` +> Y = a + bX +> ``` +> +> `X` 是「解釋變量」。`Y` 是「因變量」。直線的斜率是 `b`,`a` 是 y 軸截距,指的是 `X = 0` 時 `Y` 的值。 +> +>![計算斜率](../images/slope.png) +> +> 首先,計算斜率 `b`。作者 [Jen Looper](https://twitter.com/jenlooper) +> +> 換句話說,參考我們的南瓜數據的原始問題:「按月預測每蒲式耳南瓜的價格」,`X` 指的是價格,`Y` 指的是銷售月份。 +> +> ![完成等式](../images/calculation.png) +> +> 計算 Y 的值。如果你支付大約 4 美元,那一定是四月!作者 [Jen Looper](https://twitter.com/jenlooper) +> +> 計算直線的數學必須證明直線的斜率,這也取決於截距,或者當 `X = 0` 時 `Y` 所在的位置。 +> +> 你可以在 [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) 網站上觀察這些值的計算方法。另請訪問[這個最小二乘計算器](https://www.mathsisfun.com/data/least-squares-calculator.html)以觀察數字的值如何影響直線。 + +## 相關性 + +另一個需要理解的術語是給定 X 和 Y 變量之間的**相關系數**。使用散點圖,你可以快速可視化該系數。數據點散布在一條直線上的圖具有高相關性,但數據點散布在 X 和 Y 之間的圖具有低相關性。 + +一個好的線性回歸模型將是一個用最小二乘回歸法與直線回歸得到的高(更接近於 1)相關系數的模型。 + +✅ 運行本課隨附的 notebook 並查看 City to Price 散點圖。根據你對散點圖的視覺解釋,將南瓜銷售的城市與價格相關聯的數據似乎具有高相關性或低相關性? + +## 為回歸準備數據 + +現在你已經了解了本練習背後的數學原理,可以創建一個回歸模型,看看你是否可以預測哪個南瓜包裝的南瓜價格最優惠。為節日購買南瓜的人可能希望此信息能夠優化他們如何購買南瓜包裝。 + +由於你將使用 Scikit-learn,因此沒有理由手動執行此操作(盡管你可以!)。在課程 notebook 的主要數據處理塊中,從 Scikit-learn 添加一個庫以自動將所有字符串數據轉換為數字: + +```python +from sklearn.preprocessing import LabelEncoder + +new_pumpkins.iloc[:, 0:-1] = new_pumpkins.iloc[:, 0:-1].apply(LabelEncoder().fit_transform) +``` + +如果你現在查看 new_pumpkins dataframe,你會看到所有字符串現在都是數字。這讓你更難閱讀,但對 Scikit-learn 來說更容易理解! + +現在,你可以對最適合回歸的數據做出更有根據的決策(不僅僅是基於觀察散點圖)。 + +嘗試在數據的兩點之間找到良好的相關性,以構建良好的預測模型。事實證明,城市和價格之間只有微弱的相關性: + +```python +print(new_pumpkins['City'].corr(new_pumpkins['Price'])) +0.32363971816089226 +``` + +然而,包裝和它的價格之間有更好的相關性。這是有道理的,對吧?通常,農產品箱越大,價格越高。 + +```python +print(new_pumpkins['Package'].corr(new_pumpkins['Price'])) +0.6061712937226021 +``` + +對這些數據提出的一個很好的問題是:「我可以期望給定的南瓜包裝的價格是多少?」 + +讓我們建立這個回歸模型 + +## 建立線性模型 + +在構建模型之前,再對數據進行一次整理。刪除任何空數據並再次檢查數據的樣子。 + +```python +new_pumpkins.dropna(inplace=True) +new_pumpkins.info() +``` + +然後,從這個最小集合創建一個新的 dataframe 並將其打印出來: + +```python +new_columns = ['Package', 'Price'] +lin_pumpkins = new_pumpkins.drop([c for c in new_pumpkins.columns if c not in new_columns], axis='columns') + +lin_pumpkins +``` + +```output + Package Price +70 0 13.636364 +71 0 16.363636 +72 0 16.363636 +73 0 15.454545 +74 0 13.636364 +... ... ... +1738 2 30.000000 +1739 2 28.750000 +1740 2 25.750000 +1741 2 24.000000 +1742 2 24.000000 +415 rows × 2 columns +``` + +1. 現在你可以分配 X 和 y 坐標數據: + + ```python + X = lin_pumpkins.values[:, :1] + y = lin_pumpkins.values[:, 1:2] + ``` + +✅ 這裏發生了什麽?你正在使用 [Python slice notation](https://stackoverflow.com/questions/509211/understanding-slice-notation/509295#509295) 來創建數組來填充 `X` 和 `y`。 + +2. 接下來,開始回歸模型構建例程: + + ```python + from sklearn.linear_model import LinearRegression + from sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error + from sklearn.model_selection import train_test_split + + X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) + lin_reg = LinearRegression() + lin_reg.fit(X_train,y_train) + + pred = lin_reg.predict(X_test) + + accuracy_score = lin_reg.score(X_train,y_train) + print('Model Accuracy: ', accuracy_score) + ``` + + 因為相關性不是特別好,所以生成的模型不是非常準確。 + + ```output + Model Accuracy: 0.3315342327998987 + ``` + +3. 你可以將過程中繪製的線條可視化: + + ```python + plt.scatter(X_test, y_test, color='black') + plt.plot(X_test, pred, color='blue', linewidth=3) + + plt.xlabel('Package') + plt.ylabel('Price') + + plt.show() + ``` + + ![散點圖顯示包裝與價格的關系](../images/linear.png) + +4. 針對假設的品種測試模型: + + ```python + lin_reg.predict( np.array([ [2.75] ]) ) + ``` + + 這個神話般的品種的價格是: + + ```output + array([[33.15655975]]) + ``` + +如果回歸線的邏輯成立,這個數字是有意義的。 + +🎃 恭喜你,你剛剛創建了一個模型,可以幫助預測幾個南瓜品種的價格。你的節日南瓜地會很漂亮的。但是你可以創造一個更好的模型! + +## 多項式回歸 + +另一種線性回歸是多項式回歸。雖然有時變量之間存在線性關系——南瓜的體積越大,價格就越高——但有時這些關系不能繪製成平面或直線。 + +✅ 這裏有可以使用多項式回歸數據的[更多示例](https://online.stat.psu.edu/stat501/lesson/9/9.8) + +再看一下上圖中品種與價格之間的關系。這個散點圖看起來是否應該用一條直線來分析?也許不是。在這種情況下,你可以嘗試多項式回歸。 + +✅ 多項式是可能由一個或多個變量和系數組成的數學表達式 + +多項式回歸創建一條曲線以更好地擬合非線性數據。 + +1. 讓我們重新創建一個填充了原始南瓜數據片段的 dataframe: + + ```python + new_columns = ['Variety', 'Package', 'City', 'Month', 'Price'] + poly_pumpkins = new_pumpkins.drop([c for c in new_pumpkins.columns if c not in new_columns], axis='columns') + + poly_pumpkins + ``` + +可視化 dataframe 中數據之間相關性的一種好方法是將其顯示在「coolwarm」圖表中: + +2. 使用 `Background_gradient()` 方法和 `coolwarm` 作為其參數值: + + ```python + corr = poly_pumpkins.corr() + corr.style.background_gradient(cmap='coolwarm') + ``` + + 這段代碼創建了一個熱圖: + ![顯示數據相關性的熱圖](../images/heatmap.png) + +查看此圖表,你可以直觀地看到 Package 和 Price 之間的良好相關性。所以你應該能夠創建一個比上一個更好的模型。 + +### 創建管道 + +Scikit-learn 包含一個用於構建多項式回歸模型的有用 API - `make_pipeline` [API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline)。 創建了一個「管道」,它是一個估計器鏈。在這種情況下,管道包括多項式特征或形成非線性路徑的預測。 + +1. 構建 X 和 y 列: + + ```python + X=poly_pumpkins.iloc[:,3:4].values + y=poly_pumpkins.iloc[:,4:5].values + ``` + +2. 通過調用 `make_pipeline()` 方法創建管道: + + ```python + from sklearn.preprocessing import PolynomialFeatures + from sklearn.pipeline import make_pipeline + + pipeline = make_pipeline(PolynomialFeatures(4), LinearRegression()) + + X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) + + pipeline.fit(np.array(X_train), y_train) + + y_pred=pipeline.predict(X_test) + ``` + +### 創建序列 + +此時,你需要使用_排序好的_數據創建一個新的 dataframe ,以便管道可以創建序列。 + +添加以下代碼: + + ```python + df = pd.DataFrame({'x': X_test[:,0], 'y': y_pred[:,0]}) + df.sort_values(by='x',inplace = True) + points = pd.DataFrame(df).to_numpy() + + plt.plot(points[:, 0], points[:, 1],color="blue", linewidth=3) + plt.xlabel('Package') + plt.ylabel('Price') + plt.scatter(X,y, color="black") + plt.show() + ``` + +你通過調用 `pd.DataFrame` 創建了一個新的 dataframe。然後通過調用 `sort_values()` 對值進行排序。最後你創建了一個多項式圖: + +![顯示包裝與價格關系的多項式圖](../images/polynomial.png) + +你可以看到更適合你的數據的曲線。 + +讓我們檢查模型的準確性: + + ```python + accuracy_score = pipeline.score(X_train,y_train) + print('Model Accuracy: ', accuracy_score) + ``` + + 瞧! + + ```output + Model Accuracy: 0.8537946517073784 + ``` + +這樣好多了!試著預測一個價格: + +### 做個預測 + +我們可以輸入一個新值並得到一個預測嗎? + +調用 `predict()` 進行預測: + + ```python + pipeline.predict( np.array([ [2.75] ]) ) + ``` + + 你會得到這樣的預測: + + ```output + array([[46.34509342]]) + ``` + +參照圖像,這確實有道理!而且,如果這是一個比前一個更好的模型,看同樣的數據,你需要為這些更昂貴的南瓜做好預算! + +🏆 幹得不錯!你在一節課中創建了兩個回歸模型。在回歸的最後一節中,你將了解邏輯回歸以確定類別。 + +--- + +## 🚀挑戰 + +在此 notebook 中測試幾個不同的變量,以查看相關性與模型準確性的對應關系。 + +## [課後測](https://white-water-09ec41f0f.azurestaticapps.net/quiz/14/) + +## 復習與自學 + +在本課中,我們學習了線性回歸。還有其他重要的回歸類型。了解 Stepwise、Ridge、Lasso 和 Elasticnet 技術。學習更多信息的好課程是 [斯坦福統計學習課程](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning) + +## 任務 + +[構建模型](./assignment.zh-tw.md) diff --git a/2-Regression/3-Linear/translations/assignment.zh-tw.md b/2-Regression/3-Linear/translations/assignment.zh-tw.md new file mode 100644 index 00000000..dd6a9afc --- /dev/null +++ b/2-Regression/3-Linear/translations/assignment.zh-tw.md @@ -0,0 +1,11 @@ +# 創建自己的回歸模型 + +## 說明 + +在這節課中你學到了如何用線性回歸和多項式回歸建立一個模型。利用這些只是,找到一個你感興趣的數據集或者是 Scikit-learn 內置的數據集來建立一個全新的模型。用你的 notebook 來解釋為什麽用了這種技術來對這個數據集進行建模,並且證明出你的模型的準確度。如果它沒你想象中準確,請思考一下並解釋一下原因。 + +## 評判標準 + +| 標準 | 優秀 | 中規中矩 | 仍需努力 | +| -------- | ------------------------------------------------------------ | -------------------------- | ------------------------------- | +| | 提交了一個完整的 notebook 工程文件,其中包含了解集,並且可讀性良好 | 不完整的解集 | 解集是有缺陷或者有錯誤的 | diff --git a/2-Regression/4-Logistic/translations/README.zh-tw.md b/2-Regression/4-Logistic/translations/README.zh-tw.md new file mode 100644 index 00000000..b8789d35 --- /dev/null +++ b/2-Regression/4-Logistic/translations/README.zh-tw.md @@ -0,0 +1,301 @@ +# 邏輯回歸預測分類 + +![邏輯與線性回歸信息圖](../images/logistic-linear.png) + +> 作者 [Dasani Madipalli](https://twitter.com/dasani_decoded) + +## [課前測](https://white-water-09ec41f0f.azurestaticapps.net/quiz/15/) + +## 介紹 + +在關於回歸的最後一課中,我們將學習邏輯回歸,這是經典的基本技術之一。你可以使用此技術來發現預測二元分類的模式。這是不是巧克力糖?這種病會傳染嗎?這個顧客會選擇這個產品嗎? + +在本課中,你將學習: + +- 用於數據可視化的新庫 +- 邏輯回歸技術 + +✅ 在此[學習模塊](https://docs.microsoft.com/learn/modules/train-evaluate-classification-models?WT.mc_id=academic-15963-cxa) 中加深你對使用此類回歸的理解 + +## 前提 + +使用南瓜數據後,我們現在對它已經足夠熟悉了,可以意識到我們可以使用一個二元類別:`Color`。 + +讓我們建立一個邏輯回歸模型來預測,給定一些變量,_給定的南瓜可能是什麽顏色_(橙色🎃或白色👻)。 + +> 為什麽我們在關於回歸的課程分組中談論二元分類? 只是為了語言上的方便,因為邏輯回歸[真的是一種分類方法](https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression),盡管是基於線性的。我們將在在下一課組中了解對數據進行分類的其他方法。 + +## 定義問題 + +出於我們的目的,我們將其表示為二進製:「橙色」或「非橙色」。我們的數據集中還有一個「條紋」類別,但它的實例很少,所以我們不會使用它。無論如何,一旦我們從數據集中刪除空值,它就會消失。 + +> 🎃 有趣的是,我們有時稱白南瓜為鬼南瓜。他們不是很容易雕刻,所以它們不像橙色的那麽受歡迎,但它們看起來很酷! + +## 關於邏輯回歸 + +邏輯回歸在一些重要方面與你之前了解的線性回歸不同。 + +### 二元分類 + +邏輯回歸不提供與線性回歸相同的功能。前者提供關於二元類別(「橙色或非橙色」)的預測,而後者能夠預測連續值,例如,給定南瓜的起源和收獲時間,_其價格將上漲多少_。 + +![南瓜分類模型](../images/pumpkin-classifier.png) +> 作者 [Dasani Madipalli](https://twitter.com/dasani_decoded) + +### 其他分類 + +還有其他類型的邏輯回歸,包括多項和有序: + +- **多項**,涉及多個類別 - 「橙色、白色和條紋」。 +- **有序**,涉及有序類別,如果我們想對我們的結果進行邏輯排序非常有用,例如我們的南瓜按有限數量的大小(mini、sm、med、lg、xl、xxl)排序。 + +![多項式與有序回歸](../images/multinomial-ordinal.png) +> 作者 [Dasani Madipalli](https://twitter.com/dasani_decoded) + +### 仍然是線性的 + +盡管這種類型的回歸都是關於「類別預測」的,但當因變量(顏色)和其他自變量(數據集的其余部分,如城市名稱和大小)之間存在明顯的線性關系時,它仍然效果最好。最好了解一下這些變量是否存在線性劃分。 + +### 變量不必相關 + +還記得線性回歸如何更好地處理更多相關變量嗎?邏輯回歸是相反的——變量不必對齊。這適用於相關性較弱的數據。 + +### 你需要大量幹凈的數據 + +如果使用更多數據,邏輯回歸將給出更準確的結果;我們的小數據集對於這項任務不是最佳的,請記住這一點。 + +✅ 考慮適合邏輯回歸的數據類型 + +## 練習 - 整理數據 + +首先,稍微清理一下數據,刪除空值並僅選擇其中一些列: + +1. 添加以下代碼: + + ```python + from sklearn.preprocessing import LabelEncoder + + new_columns = ['Color','Origin','Item Size','Variety','City Name','Package'] + + new_pumpkins = pumpkins.drop([c for c in pumpkins.columns if c not in new_columns], axis=1) + + new_pumpkins.dropna(inplace=True) + + new_pumpkins = new_pumpkins.apply(LabelEncoder().fit_transform) + ``` + + 你可以隨時查看新的數據幀: + + ```python + new_pumpkins.info + ``` + +### 可視化 - 並列網格 + +到現在為止,你已經再次使用南瓜數據加載了 [starter notebook](./notebook.ipynb) 並對其進行了清理,以保留包含一些變量(包括 `Color`)的數據集。讓我們使用不同的庫來可視化 notebook 中的數據幀:[Seaborn](https://seaborn.pydata.org/index.html),它是基於我們之前使用的 Matplotlib 構建的。 + +Seaborn 提供了一些巧妙的方法來可視化你的數據。例如,你可以比較並列網格中每個點的數據分布。 + +1. 通過實例化一個 `PairGrid`,使用我們的南瓜數據 `new_pumpkins`,然後調用 `map()` 來創建這樣一個網格: + + ```python + import seaborn as sns + + g = sns.PairGrid(new_pumpkins) + g.map(sns.scatterplot) + ``` + + ![可視化數據網格](../images/grid.png) + + 通過並列觀察數據,你可以看到顏色數據與其他列的關系。 + + ✅ 鑒於此散點圖網格,你可以設想哪些有趣的探索? + +### 使用分類散點圖 + +由於顏色是一個二元類別(橙色或非橙色),它被稱為「分類數據」,需要一種更[專業的方法](https://seaborn.pydata.org/tutorial/categorical.html?highlight=bar)來可視化。還有其他方法可以可視化此類別與其他變量的關系。 + +你可以使用 Seaborn 圖並列可視化變量。 + +1. 嘗試使用「分類散點」圖來顯示值的分布: + + ```python + sns.swarmplot(x="Color", y="Item Size", data=new_pumpkins) + ``` + + ![分類散點圖可視化數據](../images/swarm.png) + +### 小提琴圖 + +「小提琴」類型的圖很有用,因為你可以輕松地可視化兩個類別中數據的分布方式。小提琴圖不適用於較小的數據集,因為分布顯示得更「平滑」。 + +1. 作為參數 `x=Color`、`kind="violin"` 並調用 `catplot()`: + + ```python + sns.catplot(x="Color", y="Item Size", + kind="violin", data=new_pumpkins) + ``` + + ![小提琴圖](../images/violin.png) + + ✅ 嘗試使用其他變量創建此圖和其他 Seaborn 圖。 + +現在我們已經了解了顏色的二元類別與更大的尺寸組之間的關系,讓我們探索邏輯回歸來確定給定南瓜的可能顏色。 + +> **🧮 數學知識** +> +> 還記得線性回歸如何經常使用普通最小二乘法來得出一個值嗎?邏輯回歸依賴於使用[sigmoid 函數](https://wikipedia.org/wiki/Sigmoid_function) 的「最大似然」概念。繪圖上的「Sigmoid 函數」看起來像「S」形。它接受一個值並將其映射到0和1之間的某個位置。它的曲線也稱為「邏輯曲線」。它的公式如下所示: +> +> ![邏輯函數](../images/sigmoid.png) +> +> 其中 sigmoid 的中點位於 x 的 0 點,L 是曲線的最大值,k 是曲線的陡度。如果函數的結果大於 0.5,則所討論的標簽將被賦予二進製選擇的類「1」。否則,它將被分類為「0」。 + +## 建立你的模型 + +在 Scikit-learn 中構建模型來查找這些二元分類非常簡單。 + +1. 選擇要在分類模型中使用的變量,並調用 `train_test_split()` 拆分訓練集和測試集: + + ```python + from sklearn.model_selection import train_test_split + + Selected_features = ['Origin','Item Size','Variety','City Name','Package'] + + X = new_pumpkins[Selected_features] + y = new_pumpkins['Color'] + + X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) + + ``` + +2. 現在你可以訓練你的模型,用你的訓練數據調用 `fit()`,並打印出它的結果: + + ```python + from sklearn.model_selection import train_test_split + from sklearn.metrics import accuracy_score, classification_report + from sklearn.linear_model import LogisticRegression + + model = LogisticRegression() + model.fit(X_train, y_train) + predictions = model.predict(X_test) + + print(classification_report(y_test, predictions)) + print('Predicted labels: ', predictions) + print('Accuracy: ', accuracy_score(y_test, predictions)) + ``` + + 看看你的模型的記分板。考慮到你只有大約 1000 行數據,這還不錯: + + ```output + precision recall f1-score support + + 0 0.85 0.95 0.90 166 + 1 0.38 0.15 0.22 33 + + accuracy 0.82 199 + macro avg 0.62 0.55 0.56 199 + weighted avg 0.77 0.82 0.78 199 + + Predicted labels: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 + 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 1 0 1 0 0 1 0 0 0 1 0] + ``` + +## 通過混淆矩陣更好地理解 + +雖然你可以通過獲得記分板報告[條目](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html?highlight=classification_report#sklearn.metrics.classification_report)把上面的項目打印出來,通過使用[混淆矩陣](https://scikit-learn.org/stable/modules/model_evaluation.html#confusion-matrix)可以更容易地理解你的模型,幫助我們了解模型的性能。 + +> 🎓 「[混淆矩陣](https://wikipedia.org/wiki/Confusion_matrix)」(或「誤差矩陣」)是一個表格,用於表示模型的真假陽性和假陰性,從而衡量預測的準確性。 + +1. 要使用混淆指標,請調用 `confusin_matrix()`: + + ```python + from sklearn.metrics import confusion_matrix + confusion_matrix(y_test, predictions) + ``` + + 看看你的模型的混淆矩陣: + + ```output + array([[162, 4], + [ 33, 0]]) + ``` + +這裏發生了什麽?假設我們的模型被要求對兩個二元類別之間的項目進行分類,即類別「南瓜」和類別「非南瓜」。 + +- 如果你的模型將某物預測為南瓜並且它實際上屬於「南瓜」類別,我們將其稱為真陽性,由左上角的數字顯示。 +- 如果你的模型預測某物不是南瓜,並且它實際上屬於「南瓜」類別,我們將其稱為假陽性,如右上角的數字所示。 +- 如果你的模型將某物預測為南瓜並且它實際上屬於「非南瓜」類別,我們將其稱為假陰性,由左下角的數字顯示。 +- 如果你的模型預測某物不是南瓜,並且它實際上屬於「非南瓜」類別,我們將其稱為真陰性,如右下角的數字所示。 + +正如你可能已經猜到的那樣,最好有更多的真陽性和真陰性以及較少的假陽性和假陰性,這意味著模型性能更好。 + +✅ Q:根據混淆矩陣,模型怎麽樣? A:還不錯;有很多真陽性,但也有一些假陰性。 + +讓我們借助混淆矩陣對TP/TN和FP/FN的映射,重新審視一下我們之前看到的術語: + +🎓 準確率:TP/(TP + FP) 檢索實例中相關實例的分數(例如,哪些標簽標記得很好) + +🎓 召回率: TP/(TP + FN) 檢索到的相關實例的比例,無論是否標記良好 + +🎓 F1分數: (2 * 準確率 * 召回率)/(準確率 + 召回率) 準確率和召回率的加權平均值,最好為1,最差為0 + +🎓 Support:檢索到的每個標簽的出現次數 + +🎓 準確度:(TP + TN)/(TP + TN + FP + FN) 為樣本準確預測的標簽百分比。 + +🎓 宏平均值: 計算每個標簽的未加權平均指標,不考慮標簽不平衡。 + +🎓 加權平均值:計算每個標簽的平均指標,通過按支持度(每個標簽的真實實例數)加權來考慮標簽不平衡。 + +✅ 如果你想讓你的模型減少假陰性的數量,你能想出應該關註哪個指標嗎? + +## 可視化該模型的 ROC 曲線 + +這不是一個糟糕的模型;它的準確率在 80% 範圍內,因此理想情況下,你可以使用它來預測給定一組變量的南瓜顏色。 + +讓我們再做一個可視化來查看所謂的「ROC」分數 + +```python +from sklearn.metrics import roc_curve, roc_auc_score + +y_scores = model.predict_proba(X_test) +# calculate ROC curve +fpr, tpr, thresholds = roc_curve(y_test, y_scores[:,1]) +sns.lineplot([0, 1], [0, 1]) +sns.lineplot(fpr, tpr) +``` + +再次使用 Seaborn,繪製模型的[接收操作特性](https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html?highlight=roc)或 ROC。 ROC 曲線通常用於根據分類器的真假陽性來了解分類器的輸出。「ROC 曲線通常具有 Y 軸上的真陽性率和 X 軸上的假陽性率。」 因此,曲線的陡度以及中點線與曲線之間的空間很重要:你需要一條快速向上並越過直線的曲線。在我們的例子中,一開始就有誤報,然後這條線正確地向上和重復: + +![ROC](../images/ROC.png) + +最後,使用 Scikit-learn 的[`roc_auc_score` API](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html?highlight=roc_auc#sklearn.metrics.roc_auc_score) 來計算實際「曲線下面積」(AUC): + +```python +auc = roc_auc_score(y_test,y_scores[:,1]) +print(auc) +``` + +結果是 `0.6976998904709748`。 鑒於 AUC 的範圍從 0 到 1,你需要一個高分,因為預測 100% 正確的模型的 AUC 為 1;在這種情況下,模型_相當不錯_。 + +在以後的分類課程中,你將學習如何叠代以提高模型的分數。但是現在,恭喜!你已經完成了這些回歸課程! + +--- + +## 🚀挑戰 + +關於邏輯回歸,還有很多東西需要解開!但最好的學習方法是實驗。找到適合此類分析的數據集並用它構建模型。你學到了什麽?小貼士:嘗試 [Kaggle](https://kaggle.com) 獲取有趣的數據集。 + +## [課後測](https://white-water-09ec41f0f.azurestaticapps.net/quiz/16/) + +## 復習與自學 + +閱讀[斯坦福大學的這篇論文](https://web.stanford.edu/~jurafsky/slp3/5.pdf)的前幾頁關於邏輯回歸的一些實際應用。想想那些更適合於我們目前所研究的一種或另一種類型的回歸任務的任務。什麽最有效? + +## 任務 + +[重試此回歸](./assignment.zh-tw.md) diff --git a/2-Regression/4-Logistic/translations/assignment.zh-tw.md b/2-Regression/4-Logistic/translations/assignment.zh-tw.md new file mode 100644 index 00000000..ce59d861 --- /dev/null +++ b/2-Regression/4-Logistic/translations/assignment.zh-tw.md @@ -0,0 +1,11 @@ +# 再探回歸模型 + +## 說明 + +在這節課中,你使用了 pumpkin 數據集的子集。現在,讓我們回到原始數據,並嘗試使用所有數據。經過了數據清理和標準化,建立一個邏輯回歸模型。 + +## 評判標準 + +| 標準 | 優秀 | 中規中矩 | 仍需努力 | +| -------- | ----------------------------------------------------------------------- | ------------------------------------------------------------ | ----------------------------------------------------------- | +| | 用 notebook 呈現了一個解釋性和性能良好的模型 | 用 notebook 呈現了一個性能一般的模型 | 用 notebook 呈現了一個性能差的模型或根本沒有模型 | diff --git a/2-Regression/translations/README.zh-tw.md b/2-Regression/translations/README.zh-tw.md new file mode 100644 index 00000000..5da4eb94 --- /dev/null +++ b/2-Regression/translations/README.zh-tw.md @@ -0,0 +1,36 @@ +# 機器學習中的回歸模型 + +## 本節主題: 北美南瓜價格的回歸模型 🎃 + +在北美,南瓜經常在萬聖節被刻上嚇人的鬼臉。讓我們來深入研究一下這種奇妙的蔬菜 + +![jack-o-lantern](../images/jack-o-lanterns.jpg) +> Foto oleh Beth Teutschmann di Unsplash + +## 你會學到什麽 + +這節的課程包括機器學習領域中的多種回歸模型。回歸模型可以明確多種變量間的_關系_。這種模型可以用來預測類似長度、溫度和年齡之類的值, 通過分析數據點來揭示變量之間的關系。 + +在本節的一系列課程中,你會學到線性回歸和邏輯回歸之間的區別,並且你將知道對於特定問題如何在這兩種模型中進行選擇 + +在這組課程中,你會準備好包括為管理筆記而設置VS Code、配置數據科學家常用的環境等機器學習的初始任務。你會開始上手Scikit-learn學習項目(一個機器學習的百科),並且你會以回歸模型為主構建起你的第一種機器學習模型 + +> 這裏有一些代碼難度較低但很有用的工具可以幫助你學習使用回歸模型。 試一下 [Azure ML for this task](https://docs.microsoft.com/learn/modules/create-regression-model-azure-machine-learning-designer/?WT.mc_id=academic-15963-cxa) + + +### Lessons + +1. [交易的工具](../1-Tools/translations/README.zh-tw.md) +2. [管理數據](../2-Data/translations/README.zh-tw.md) +3. [線性和多項式回歸](../3-Linear/translations/README.zh-tw.md) +4. [邏輯回歸](../4-Logistic/translations/README.zh-tw.md) + +--- + +### Credits + +"機器學習中的回歸" 由[Jen Looper](https://twitter.com/jenlooper)♥️ 撰寫 + +♥️ 測試的貢獻者: [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan) 和 [Ornella Altunyan](https://twitter.com/ornelladotcom) + +南瓜數據集受此啟發 [this project on Kaggle](https://www.kaggle.com/usda/a-year-of-pumpkin-prices) 並且其數據源自 [Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) 由美國農業部上傳分享。我們根據種類添加了圍繞顏色的一些數據點。這些數據處在公共的域名上。 From d757933495f8db4f9344845053a567ab989e6d5f Mon Sep 17 00:00:00 2001 From: AugusMeow <34206897+DrAugus@users.noreply.github.com> Date: Wed, 22 Jun 2022 18:12:53 +0800 Subject: [PATCH 2/2] fix: github pages links --- 2-Regression/2-Data/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/2-Regression/2-Data/README.md b/2-Regression/2-Data/README.md index 18faac8e..7c84166f 100644 --- a/2-Regression/2-Data/README.md +++ b/2-Regression/2-Data/README.md @@ -25,13 +25,13 @@ In this lesson, you will learn: The question you need answered will determine what type of ML algorithms you will leverage. And the quality of the answer you get back will be heavily dependent on the nature of your data. -Take a look at the [data](../data/US-pumpkins.csv) provided for this lesson. You can open this .csv file in VS Code. A quick skim immediately shows that there are blanks and a mix of strings and numeric data. There's also a strange column called 'Package' where the data is a mix between 'sacks', 'bins' and other values. The data, in fact, is a bit of a mess. +Take a look at the [data](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) provided for this lesson. You can open this .csv file in VS Code. A quick skim immediately shows that there are blanks and a mix of strings and numeric data. There's also a strange column called 'Package' where the data is a mix between 'sacks', 'bins' and other values. The data, in fact, is a bit of a mess. In fact, it is not very common to be gifted a dataset that is completely ready to use to create a ML model out of the box. In this lesson, you will learn how to prepare a raw dataset using standard Python libraries. You will also learn various techniques to visualize the data. ## Case study: 'the pumpkin market' -In this folder you will find a .csv file in the root `data` folder called [US-pumpkins.csv](../data/US-pumpkins.csv) which includes 1757 lines of data about the market for pumpkins, sorted into groupings by city. This is raw data extracted from the [Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) distributed by the United States Department of Agriculture. +In this folder you will find a .csv file in the root `data` folder called [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) which includes 1757 lines of data about the market for pumpkins, sorted into groupings by city. This is raw data extracted from the [Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) distributed by the United States Department of Agriculture. ### Preparing data