# 機器學習技術 建立、使用以及維護機器學習模型及其所使用的數據的過程,與許多其他開發工作流程有很大的不同。在本課程中,我們將揭開這個過程的神秘面紗,並概述您需要了解的主要技術。您將會: - 高層次理解支撐機器學習的過程。 - 探索基本概念,比如「模型」、「預測」和「訓練數據」。 ## [課前小測驗](https://ff-quizzes.netlify.app/en/ml/) [![ML for beginners - Techniques of Machine Learning](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "ML for beginners - Techniques of Machine Learning") > 🎥 點擊上方圖片觀看一個關於本課程的短影片。 ## 簡介 在高層次上,創建機器學習(ML)流程的工作包含多個步驟: 1. 決定問題。多數的機器學習流程從提出一個無法用簡單條件式程式碼或基於規則引擎回答的問題開始。這些問題通常圍繞基於大量數據的預測。 2. 收集與準備數據。為了能回答您的問題,您需要數據。數據的品質,有時候還有數量,將決定您能多好地回答最初的問題。視覺化數據是此階段的重要方面。這個階段還包括將數據拆分為訓練集和測試集來建構模型。 3. 選擇訓練方法。根據您的問題和數據的性質,您需要選擇如何訓練模型,才能最佳反映數據並做出準確預測。這是您的機器學習流程中需要專業知識且常常需要大量實驗的部分。 4. 訓練模型。利用訓練數據,您將使用各種演算法訓練模型,以識別數據中的模式。模型可能會利用可調整的內部權重,讓模型更偏重數據中的某些部份,以建造更佳的模型。 5. 評估模型。您使用以前未見過的數據(測試數據)來檢驗模型的表現。 6. 參數調整。根據模型的表現,您可以使用不同的參數或變數重新執行流程,以調控用來訓練模型演算法的行為。 7. 預測。使用新輸入資料測試模型的準確性。 ## 該問什麼問題 電腦特別擅長從數據中發掘隱藏的模式。這項功能對於研究者很有幫助,尤其是在許多問題無法輕易透過條件式規則引擎回答的領域。例如,在保險精算工作中,資料科學家或許能針對吸菸者和非吸菸者的死亡率訂定人工規則。 然而,當多個變數加入考量時,機器學習模型可能會更有效率地根據過去健康紀錄預測未來的死亡率。另一個較為愉快的例子是,根據包含緯度、經度、氣候變遷、近海距離、噴射氣流模式等數據,預測某地四月份的天氣。 ✅ 這份 [關於天氣模型的簡報檔](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) 提供了應用機器學習進行天氣分析的歷史觀點。 ## 建模前的準備工作 在開始建構模型之前,有幾項工作您需要完成。為了測試您的問題並根據模型預測形成假設,您需要識別並配置幾個元素。 ### 數據 為了能有一定信心回答您的問題,您需要大量並且類型正確的數據。此時您需要進行兩件事情: - 收集數據。回想上一課關於數據分析公正性的部分,請謹慎收集數據。注意數據來源、可能存在的偏見,並記錄其來源。 - 準備數據。數據準備的過程包含數個步驟。如果數據來自不同來源,您需要整合並正規化數據。您也能透過將字串轉為數字(如我們在[分群](../../5-Clustering/1-Visualize/README.md)課程所示)等方法改善數據的品質與數量。您可能還會基於原始數據產生新數據(如在[分類](../../4-Classification/1-Introduction/README.md)中示範)。將數據清理及編輯(如我們在[Web App](../../3-Web-App/README.md)課程前所做)也是重要步驟。最後,根據您的訓練技巧,可能還需要對數據做隨機化和打亂。 ✅ 收集及處理數據後,請確認其形態是否足以解決您要提問的問題。就在我們的[分群](../../5-Clustering/1-Visualize/README.md)課程中,我們會發現有時數據在任務中的表現不佳。 ### 特徵與目標 [特徵](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) 是數據中的可衡量屬性。在許多資料集中,它以欄位標題表達,如「日期」、「尺寸」或「顏色」。您的特徵變數通常用代碼中的 `X` 表示,代表用來訓練模型的輸入變數。 目標是您嘗試預測的事物。目標變數通常代碼中為 `y`,代表您嘗試問數據的問題答案:十二月,哪種 顏色 的南瓜最便宜?在舊金山,哪些社區的房地產 價格 最佳?有時候目標也被稱為標籤屬性。 ### 選擇特徵變數 🎓 特徵選擇與特徵提取:建構模型時,您如何知道該選擇哪個變數?您可能會透過特徵選擇或特徵提取過程選出最能提升模型效能的變數。然而兩者不同:「特徵提取是從原始特徵的函數中創造新特徵,而特徵選擇則是從原特徵中選出子集。」([來源](https://wikipedia.org/wiki/Feature_selection)) ### 視覺化數據 資料科學家工具箱的重要一環是利用優秀的庫,例如 Seaborn 或 MatPlotLib,將數據視覺化。視覺化數據可能讓您發現潛藏的相關性,加以利用。您的視覺化也可能幫助發現偏見或數據不平衡(如[分類](../../4-Classification/2-Classifiers-1/README.md)課程所示)。 ### 拆分資料集 在訓練之前,您需要將資料集拆分為兩個或以上不等大小的部分,且仍能良好代表數據。 - 訓練集。這部分資料用來擬合模型並訓練,佔原始資料集大多數。 - 測試集。測試資料集是獨立的資料,通常從原始資料中取得,用以驗證建立的模型效能。 - 驗證集。驗證集是較小且獨立的樣本組,用來調整模型的超參數(或架構),以改善模型表現。根據資料大小和問題,您可能不需要建立此第三個資料集(如[時間序列預測](../../7-TimeSeries/1-Introduction/README.md)課程中所說)。 ## 建立模型 利用您的訓練資料,目標是使用各種演算法去訓練模型,或對數據建立統計表示。訓練模型的過程是讓模型接觸數據並對所發現、驗證且接受或拒絕的模式做出假設。 ### 決定訓練方法 根據您的問題與數據性質,您會選擇一種訓練方法。瀏覽 [Scikit-learn 的文件](https://scikit-learn.org/stable/user_guide.html) — 這門課程採用的工具 — 您能探索許多訓練模型的方式。依經驗不同,您可能需要嘗試數種方法以建構最佳模型。資料科學家通常會透過讓模型分析未見過的數據,檢查準確性、偏見與其他降低品質的問題,然後選擇最適合此任務的訓練方法。 ### 模型訓練 帶著訓練資料,您已準備好使用模型的 `fit` 方法擬合數據。您會注意到許多 ML 函式庫中有 `model.fit` 的程式碼 - 這時您會傳入特徵變數(通常為 `X` 的陣列)和目標變數(通常為 `y`)。 ### 評估模型 完成訓練過程後(大型模型可能需許多迭代或「epochs」),您能利用測試資料評估模型品質。測試資料是原始資料中模型之前未分析過的一部分。您可以列印出關於模型品質的評估指標表。 🎓 模型擬合 在機器學習中,模型擬合指的是模型基底函數用以嘗試分析未曾接觸數據時的精確度。 🎓 欠擬合過擬合 是常見問題,會降低模型品質;欠擬合是模型擬合不夠好,無法準確分析訓練資料或新資料;過擬合則是模型過度擬合訓練資料的細節與噪音,導致對訓練資料預測太精準。 過擬合模型與訓練資料太過貼合,欠擬合模型則不夠準確。 ![overfitting model](../../../../translated_images/zh-TW/overfitting.1c132d92bfd93cb6.webp) > 資料圖由 [Jen Looper](https://twitter.com/jenlooper) 製作 ## 參數調整 完成初步訓練後,觀察模型品質,並考慮透過調整「超參數」來改進。關於這個過程的更多內容,請參考[文件說明](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott)。 ## 預測 這是您可使用全新數據來測試模型準確性的時刻。在「應用」機器學習場域,您可能會建置網頁資產以在生產環境使用模型,此時流程可能包含收集使用者輸入(例如按鈕點擊),將變數送入模型進行推論或評估。 在這些課程中,您將發現如何利用這些步驟準備、建構、測試、評估與預測 — 這些都是資料科學家的基本動作,並且更多,助您向「全端」機器學習工程師的旅程邁進。 --- ## 🚀挑戰 繪製一張反映機器學習從業人員步驟的流程圖。您認為自己目前處於哪個環節?您預測將會遇到哪裡的困難?哪個部分您覺得比較容易? ## [課後小測驗](https://ff-quizzes.netlify.app/en/ml/) ## 複習與自學 在線上搜尋資料科學家的訪談,了解他們的日常工作。這裡有[一則訪談](https://www.youtube.com/watch?v=Z3IjgbbCEfs)。 ## 作業 [訪談一位資料科學家](assignment.md) --- **免責聲明**: 本文件係使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 所翻譯。雖然我們致力於準確性,但請注意自動翻譯可能包含錯誤或不準確之處。原始文件之母語版本應視為權威之來源。對於重要資訊,建議請專業人工翻譯。我們不對因使用本翻譯所引起之任何誤解或誤釋承擔責任。