- 在 Jupyter Notebook 中使用 Python 庫訓練機器學習模型
- 將經過訓練的機器學習模型合併到 Streamlit Web 應用中
使用機器學習模型
Jupyter Notebooks、Python 和 Streamlit 的另一個主要功能是能夠訓練機器學習模型並做出預測。
如果您是人工智慧的新手,您可能希望查看此課程中的 AI 課程以學習基礎知識,然後再進入此處涉及的更高級的編碼。您可以使用使用者友好的機器學習模型平臺(如 Teachable Machine)來製作模型,並將其合併到 Python Web 應用程式中。
如果你在人工智慧和使用 Jupyter Notebooks 處理數據集方面有一些經驗,那麼這對你來說是一個很好的下一步。
在本課中,您將瞭解一些 Python 機器學習庫,以及您可以使用 Python 創建的一些不同的機器學習模型。
回顧一下,要創建機器學習模型,有3個主要部分。
數據
使用學習演算法查找模式
預測!
數據集是模型的輸入。它可以包括文本、圖像、聲音或姿勢。我們在第 2 單元中使用 Jupyter Notebooks 處理文字和數值數據。在本課中,我們將繼續以電子錶格的形式處理文本數據。
Finding Patterns 本質上是使用數據集構建機器學習模型。Python 包含許多庫,這些庫將從數據構建 AI 模型。在本課程中,我們將使用 scikit-learn 包中的許多函數。除了它提供的庫外,該網站還包含許多關於機器學習和構建模型過程的優秀資訊。這是一個很好的資源,可以瞭解更多資訊!
創建模型后,可以使用該模型根據新資訊 預測 結果。再一次,Python 提供了實現此功能的庫。
預處理數據
在可以將數據集發送到用於構建模型的演算法之前,必須對其進行 預處理或“清理”,以便模型構建演算法可以使用它並盡可能生成最準確的模型。事實上,創建機器學習模型的大部分工作都在預處理中。您需要仔細查看數據,以確定哪些是重要的,哪些可以省略,哪些需要清理。
預處理涉及什麼?對於基於文本的數據集,這裡有一些事情需要處理。
Null 值
有時,數據集包含空白值或空值,尤其是當數據是調查數據時。有時,您將刪除任何具有 null 數據的行。
但是,如果樣本數量較少,您可能不想消除它們。另一種選擇是將 null 值替換為其他值。它可以是零,也可以是該字段的所有其他值的平均值。
異常
有時,數據包含一個或兩個樣本,這些樣本與其他數據非常不同。這可能會使模型出現偏差。您不希望異常值影響模型的創建方式,因此通常會從數據集中消除異常值。
例如,您可能有一個數據集,其中 95% 的樣本是 10-30 歲的人,但您有一些隨機樣本,其中的人超過 50 歲。由於絕大多數樣本都在 10-30 歲年齡組,您可以考慮從較老的年齡組中刪除樣本。
標準化
通常,大型數據集中的數位會有所不同,具體取決於所表示的特徵。例如,您的年齡可能從 0 到 70 不等,但您的薪水可能從 0 到 500,000 不等!尺度差異很大,因此一個特徵在模型中可能更重要。
為了解決這個問題,你可以對數據進行標準化,使其在一個單一的尺度上。scikit-learn 提供了一個 StandardScaler,它會更新每個特徵,使均值為 0,標準差為 1。
要考慮的另一件事是每個類別或標籤的樣本數量平衡。您需要確保數據集中每個類的數量大致相同。
編碼
人工智慧喜歡數位,不一定是文字。因此,將所有數據轉換為數位會有所説明。scikit-learn 提供編碼器函數,因此您可以輕鬆地將一系列可能的文本值轉換為一系列數位。
例如,活動水平,樣本值為久坐不動、輕度、中度、高。這些回應可以編碼為值 0、1、2 和 3,這對於模型構建演算法來說要容易得多。
拆分數據
預處理數據后,需要將其拆分為訓練集和測試集。訓練集將用於訓練和創建模型。然後,您將使用測試集測試您的模型,以查看其性能如何。
有一些標準的方法可以拆分它(通常 75% 用於訓練,25% 用於測試),但您可以根據需要拆分它。同樣,提供了功能,因此這一切都是自動化的。
創建模型
下一步是創建模型。要做出的一個重大決定是,我應該使用哪種演算法?有許多不同的監督學習演算法可供選擇,而且很難知道該使用哪一種。一個好的過程是嘗試幾種不同的演算法,然後看看哪一種能給你最好的準確性。
第一步是確定是需要 分類 演算法還是 回歸 演算法。這取決於你要預測什麼。
分類演算法 用於預測離散目標或類別。例如,將電子郵件分類為垃圾郵件或非垃圾郵件將是一個分類問題
回歸演算法 用於預測沿連續範圍的事物。一個例子是預測一個人將獲得多少薪水。預測是一個數位範圍,輸出可以是該範圍內的任何值。
以下是幾種流行的模型創建演算法類型。
分類
- 決策樹
- 隨機森林
- K-最近鄰
- 樸素貝葉斯
- 邏輯回歸
- 支援向量機
回歸
- 線性回歸
- 嶺回歸
- 套索回歸
- 多項式回歸
- 貝葉斯線性回歸
- 支援向量回歸
請注意,某些演算法屬於這兩種類型。例如,有一個決策樹分類器以及一個決策樹回歸器。支援向量機用於分類,支援向量回歸用於回歸。
那麼,你如何決定使用哪一個呢?你應該 進行研究 ,看看其他數據科學家在不同情況下使用什麼,看看你的模型可能有什麼用。您還應該使用您的數據 嘗試 一些不同的演算法,然後找到哪一種提供最佳準確性。您還可以調整特定演算法的參數,以查看它是否返回更準確的模型。
scitkit-learn 為所有這些演算法提供函數,因此創建模型非常簡單。
評估模型
你希望你的模型達到最佳狀態,因此你需要評估其性能。評估模型時的兩個常見變數是偏差和方差。
偏差 是模型的預測值與正確值之間的差值。
方差 是指當使用不同的數據時,預測值的變化程度。
您希望在偏差和方差之間實現良好的平衡。
高偏置 -> 欠擬合。
當模型太簡單而無法解釋訓練數據中的雜訊時,就會發生欠擬合。如果沒有足夠的數據或沒有足夠的特徵(列),或者數據中有太多的雜訊,則可能會發生這種情況。如果模型在訓練數據和測試數據上都表現不佳,則表明擬合不足。
高方差 -> 過擬合。
如果你在一組數據上訓練一個模型,並且它的表現非常好,但如果你再用新數據呈現它,它的表現就根本不好,就會發生過擬合。如果模型過於複雜,並且試圖與訓練數據過於擬合,則可能會發生這種情況。該模型可能在訓練數據上預測得非常好,但在測試數據上表現不佳。
檢查模型性能的一種技術是交叉驗證。
交叉驗證 意味著多次訓練模型,每次使用不同的訓練/測試數據分割。您的數據集被拆分為多個 摺疊或子集。然後,將一個摺疊作為驗證集或測試集,其餘摺疊用於訓練它。這將執行多次,因此每次訓練集和測試集都會更改。
sciikit-learn 還提供了一個 指標 庫,因此您可以輕鬆獲取模型的性能分數。
- 準確率分數 = 正確預測/總預測
- 精度 = 真陽性/(真陽性 + 假陽性)
- 召回率 = 真陽性/(真陽性 + 假陰性)
- F1 分數 = (2 x 精確率 x 召回率)/(精確率 + 召回率)
- 特異性 = 真陰性/(真陽性 + 假陰性)
- 混淆矩陣 – 顯示真陽性、真陰性、假陽性和假陰性計數
通過檢查來自各種演算法的指標,您可以選擇最佳模型。
預測!
一旦你有了一個你滿意的模型,你就想在你的應用中使用它。
通常的做法是在 Jupyter Notebooks 等環境中使用 Python 對模型進行預處理、創建和評估。從那裡,您可以將模型匯出為檔。
然後,在您的 Streamlit 應用程式中,您可以載入模型並使用它來進行預測。
在本課的活動中,您將使用卒中風險數據集完成整個過程。您將瞭解如何預處理數據,使用不同的演算法創建模型,然後在給定一些輸入特徵的情況下,在簡單的 Streamlit 應用程式中使用模型來預測中風風險。
挑戰
嘗試使用與 Jupyter Notebook 中的模型不同的模型。
- 在 scikit-learn 網站上搜索其他分類演算法,並在 Kaggle 上查看其他模型構建範例。
- 選擇一種演算法,並將代碼添加到筆記本中以創建模型。
- 使用 scikit-learn 指標檢查準確性。
您的模型表現如何?它是否比筆記本中的任何其他演算法都好?
活動 2:構建預測應用
在 Streamlit 應用程式中使用您的模型
挑戰
TECHNOVATION 靈感
以下是 Technovation 參與者的一些非常驚人的示例,他們使用 Python 和 Streamlit 構建包含機器學習模型的 Web 應用程式。
T.E.D.D.Y – 基於文本的青少年早期痛苦檢測 器,由 美國TEDDY團隊提供,幫助教師和輔導員及早發現學生的心理健康問題。TEDDY使用人工智慧來識別表達負面情緒的句子或顯示抑鬱症患者應有的語言模式。然後,學生可能會被推薦給輔導員尋求支援。
反射
您已經完成了預處理數據集、構建多個模型以及評估和選擇要在應用程式中使用的模型的整個過程。 這在一堂課中要學到很多東西!
關鍵術語的審查
- 預處理 – 獲取數據集並確保其中的數據適合用於訓練機器學習模型
- 分類演算法 – 一種用於訓練機器學習模型的演算法,該模型將對離散值進行分類或預測
- 回歸演算法 – 用於訓練機器學習模型以預測連續範圍內的值的演算法
- 偏差 – 由於錯誤的假設簡化了模型,模型的預測值與正確值之間的差異
- 方差 – 當模型在面對新數據時無法概括時,模型預測的變異性量
- 過擬合 – 當模型與訓練數據擬合得太好,以至於它無法很好地預測新數據時,這是由模型中的高方差引起的
- 欠擬合 – 當模型被簡化得太多並且由於模型中的高偏差或假設而在訓練或測試數據上表現不佳時
其他資源
機器學習
- Geeks for Geeks 機器學習教程 - 對一些機器學習過程和術語進行了很好的介紹和概述
- Simplilearn 的 Scikit-Learn 教程 – 通過葡萄酒質量數據集練習在 Jupyter Notebook 中使用 scikit-learn
- 使用 scikit-learn 進行機器學習 – Data School 的完整 Youtube 播放列表
流光
- 與 Patrick Loeber 一起從頭開始構建機器學習 Web 應用程式 – 另一個構建模型並在 Web 應用程式中從頭到尾使用它的範例
- 使用 Streamlit 的影像分類器(如果您的模型是在影像上訓練的)