端到端機器學習項目的最佳方法 [2022]
已發表: 2021-01-01機器學習正在加快步伐,並且在很長一段時間內一直是爭論的焦點。 該領域的一些非常出色的算法和架構使得機器學習的概念可以應用於實際和生活世界。
它不再只是一個研究概念,並且已經深入到有用的應用領域。 今天,比以往任何時候都更需要掌握機器學習項目的端到端管道藝術。
許多人對機器學習的興趣與日俱增,並且有大量可用資源可以幫助您了解 ML 和 AI 的基礎知識。 許多課程帶您從學習一些基本概念到最終構建一些最先進的模型。
但就是這樣嗎? 我們真的學會瞭如何訪問數據嗎?我們真的知道如何清理數據以便我們的機器學習模型可以從中提取有用的特徵嗎? 那麼部署部分呢? 在我們完成這些課程和課程後,有很多類似的問題在我們的腦海中仍未得到解答。
由於對任何項目的完整端到端機器學習管道缺乏了解,就會出現此問題。 在本文中,我們將通過一個這樣的管道來了解究竟需要做什麼才能在任何 ML 項目的實際場景中獲得更好的結果。
最能說明這一點的一本書是 Aurelien Geron 的 Hands-on Machine Learning with Scikit-Learn、Keras 和 TensorFlow。

為了更好地理解,這個端到端管道可以分為幾個步驟,它們是:
- 理解問題陳述
- 獲取所需數據
- 了解數據
- 清理數據
- 選擇最佳模型進行訓練
- 微調超參數
- 展示結果
- 部署和維護系統
為了更好地理解任何現實生活中的機器學習項目的流程,我們將使用加利福尼亞房價預測問題的流行示例。 我們將討論與此問題陳述相關的所有上述要點。 不同的項目可能會有一些細微的變化,但總體目標保持不變。
目錄
理解問題陳述
為了構建一個好的解決方案,需要非常清楚地理解問題陳述。 您很可能最終會構建和訓練機器學習模型,但現實生活中的應用領域需要的不僅僅是模型。 模型的輸出應該與最終用戶的確切需求相匹配。
對於這個特定的示例,我們獲得了一個包含加利福尼亞州所有指標的數據集,例如人口、收入、房價等。 模型所需的輸出是它應該能夠根據其他屬性(如位置、人口、收入等)預測房屋的定價。
這一步的重要原因是要準確了解需要做什麼以及需要什麼樣的解決方案。 這是關於如何處理問題陳述的主要頭腦風暴部分。
閱讀:面向初學者的機器學習項目創意
獲取所需數據
一旦您清楚地理解了問題陳述並決定使用機器學習方法來解決問題,您應該開始搜索相關數據。 數據是任何機器學習項目中最重要的組成部分,因此您必須仔細查找並僅選擇質量數據。 ML 模型的最終性能取決於訓練時使用的數據。
有各種來源可以找到數據,這些數據也可以幫助理解現實示例中的數據分佈。 對於我們的示例,我們可以從 Kaggle 獲取加利福尼亞房價預測數據集。 此數據為 CSV 格式,因此我們將使用 Pandas 庫加載數據集。
了解數據
能夠理解您正在使用的數據是 ML 解決方案的一個非常重要的方面。 這使我們能夠選擇更適合項目的算法或模型架構。 在開始詳細查看數據之前,最好先將數據集拆分為訓練集和測試集。 這使測試集保持不變,從而減少了過度擬合測試集的機會。 通過這樣做,您可以消除模型中的數據窺探偏差。
有多種方法可以將數據集拆分為這些訓練集和測試集。 其中之一是用硬編碼的百分比值拆分它。 在大多數情況下,90% 的訓練和 10% 的測試是一個常見的值。
拆分後,您必須深入可視化訓練集以了解數據。 當前數據集包括緯度和經度點,因此,使用散點圖根據位置查看密度非常有幫助。
查找數據集中兩個屬性之間的相關性有助於了解哪些屬性與所需屬性的相關性更高。 在這種情況下,我們需要找出數據集中哪個屬性與房價相關性更高。 這可以通過使用 corr() 方法在 Scikit-Learn 中輕鬆完成。 它為每個屬性相對於另一個屬性返回一個值。 因此,如果您需要查看與房價的關係,您可以這樣做:
corr_matrix[“median_house_value”].sort_values(ascending=False)
中位數房屋價值 1.000000收入中位數 0.687170total_rooms 0.135231Housing_median_age 0.114220家庭 0.064702總臥室 0.047865人口 -0.026699經度 -0.047279緯度-0.142826
在這裡,可以看出median_income與房價直接相關,而緯度值與房價間接相關。
最後,你也可以嘗試通過將一些屬性組合在一起來做一些特徵工程。 例如,total rooms_per_household可以比單獨的total_rooms或家庭值提供更多信息。
清理數據
在此步驟中,您將為機器學習項目準備數據。 這是整個管道中最耗時和最重要的一步。 模型的性能主要取決於您準備數據的程度。 通常,為此目的編寫函數是一個好習慣,因為它允許您在需要時使用這些函數,並且可以在生產線中使用相同的函數來準備新數據以進行預測。
真實數據中最常遇到的問題之一是數據集中一些條目的缺失值。 有幾種處理方法。 您可以直接刪除整個屬性,但這對模型不是很好。 您可以刪除具有一個缺失值的行。 最常用的另一種方法是將缺失值設置為其他值,例如零或整列的算術平均值(如果它是數值)。

對於分類值,最好用數字表示它們並將它們編碼為 one-hot 編碼,以便模型更容易處理它。 Scikit-Learn 還提供了 OneHotEncoder 類,以便我們可以輕鬆地將分類值轉換為 one-hot 向量。
您必須注意的另一件事是特徵縮放。 可能有一些屬性的值範圍非常大。 因此最好將它們縮放到標準比例,以便模型可以輕鬆地使用這些值並表現更好。
另請閱讀:印度機器學習工程師的薪水
選擇最佳模型進行訓練
在完成所有的數據清洗和特徵工程之後,下一步就變得相當容易了。 現在,您所要做的就是在數據上訓練一些有前途的模型,並找出能夠提供最佳預測的模型。 有幾種方法可以幫助我們選擇最佳模型。
我們的加利福尼亞房價預測示例是一個回歸問題。 這意味著我們必須從一系列數字中預測一個值,在這種情況下,就是房價。
這裡的第一步是訓練幾個模型並在驗證集上測試它們。 您不應該在這裡使用測試集,因為它會導致對測試集的過度擬合,最終模型將具有非常低的正則化。 從這些模型中,大部分時間應該選擇具有良好訓練準確度和驗證準確度的模型。 它也可能取決於用例,因為某些任務需要與其他任務不同的配置。
由於我們已經清理了數據並且預處理功能已準備就緒,因此使用 Scikit-Learn 或 Keras 等框架在三到四行代碼中訓練不同的模型非常容易。 在 Scikit-Learn 中,我們還有一個交叉驗證選項,這有助於為決策樹等模型找到好的超參數。
微調超參數
在有幾個模型入圍後,需要微調超參數以釋放它們的真正潛力。 也有很多方法可以實現這一點。 其中之一是您可以手動更改超參數並一次又一次地訓練模型,直到獲得滿意的結果。 在這裡,您可以清楚地看到無法像自動化任務那樣檢查出盡可能多的組合的問題。 所以這裡有一些很好的方法來自動化這些東西。
Grid Search是 Scikit-Learn 以 GridSearchCV 類的形式提供的一項出色功能,它自己進行交叉驗證並找出完美的超參數值以獲得更好的結果。 我們所要做的就是提到它必須試驗哪些超參數。 這是一個簡單但非常強大的功能。
隨機搜索是另一種可用於類似目的的方法。 當需要試驗的超參數空間較小時,網格搜索效果很好,但是當超參數數量很大時,最好使用 RandomizedSearchCV。 它嘗試隨機超參數並得出它所見過的最佳值。
最後但並非最不重要的是集成學習的方法。 在這裡,我們可以使用多個模型來給出各自的預測,最後,我們可以選擇最終的預測作為所有模型的平均值。 這是一種非常有前途的方法,並且在 Kaggle 上贏得了很多比賽。
在為最終模型微調所有超參數後,您可以使用該模型對測試集進行預測。 在這裡,我們可以評估模型在測試集上的表現。 請記住,在此之後您不應該微調您的模型以提高測試集的準確性,因為它會導致測試集樣本的過度擬合。
展示結果
一旦選擇了最佳模型並完成了評估,就需要正確顯示結果。 可視化是製作更好的機器學習項目的關鍵,因為它全都與數據和理解其背後的模式有關。 對於已經熟悉該領域的人來說,原始數字結果聽起來不錯,但在圖形和圖表上將其可視化非常重要,因為它使項目具有吸引力,並且每個人都可以清楚地了解我們的解決方案中實際發生的情況。
部署和維護系統
大多數學習者到達管道的這個階段並在嘗試將項目部署到現實生活場景中時面臨巨大的問題。 在 Jupyter Notebook 中構建和訓練模型非常容易,但重要的是成功保存模型,然後在實時環境中使用它。
ML 工程師面臨的最常見問題之一是實時接收的數據與他們訓練模型的數據存在差異。 在這裡,我們可以使用我們在創建用於訓練模型的管道時構建的預處理功能。
可以部署兩種類型的機器學習模型:在線模型和離線模型。 在線模型是不斷從實時接收的數據中學習的模型。 離線模型不會從新樣本中學習,如果它接收到的數據類型發生變化,則必須正確更新和維護。 因此,這兩種型號都需要進行適當的維護。
在部署機器學習模型時,需要將它們包裝在一個平台中,以便用戶輕鬆與它們交互。 選項很廣泛,我們可以將其封裝在 Web 應用程序、Android 應用程序、Restful API 等等中。 構建此類應用程序或 API 的基本知識是一個巨大的優勢。 您應該能夠在 Google Cloud Platforms、Amazon Web Services 或 Microsoft Azure 等雲服務上部署 NodeJS 或 Python 應用程序。

如果您對 Django 或 Flask 等框架不滿意,您可以嘗試使用 Streamlit,它允許您以 Web 應用程序的形式部署 Python 代碼,只需幾行附加代碼。 可以探索各種此類庫和框架。
結論
總結整篇文章,我想說機器學習項目在管道方面與其他傳統項目有很大不同,如果你設法掌握了這條管道,其他一切都會變得容易得多。
許多初學者往往忽略的端到端管道的一些最重要的步驟是數據清理和模型部署。 如果這些步驟都得到了處理,那麼剩下的部分就像任何其他項目一樣。
遵循這些步驟並為項目設置管道有助於您對任務有清晰的認識,並且調試問題變得更易於管理。 因此,我建議您完成這些步驟並嘗試使用此清單實施您自己的端到端機器學習項目。 拿起問題陳述,找到數據集,然後繼續享受您的項目的樂趣!
如果您有興趣了解有關機器學習的更多信息,請查看 IIIT-B 和 upGrad 的機器學習和人工智能 PG 文憑,該文憑專為工作專業人士設計,提供 450 多個小時的嚴格培訓、30 多個案例研究和作業、IIIT- B 校友身份、5 個以上實用的實踐頂點項目和頂級公司的工作協助。
什麼是機器學習或 ML?
系統無需從提供的數據中明確編程即可學習任務的能力稱為機器學習。 該領域專注於開發可以訪問數據並自行學習的計算機程序。 它是廣闊的人工智能(AI)學科的一個子領域。 幾乎所有行業都在實施機器學習,以提高生產力、營銷、銷售、客戶滿意度和企業利潤。 許多 IT 專家對此很感興趣,他們正在考慮轉行。
什麼是端到端 ML 項目?
端到端機器學習項目涉及數據準備、模型訓練和模型部署等步驟。 它由管道組成,這些管道是編寫代碼和自動化工作流程的方式。 這些管道,如果編譯得當,就會形成一個成功的機器學習項目。 理解問題陳述、獲取適當的數據、理解數據、清理數據、選擇訓練的最佳模型、微調超參數以及呈現結果只是涉及的一些階段。
機器學習中的超參數是什麼?
超參數是機器學習中的一個參數,其值用於影響學習過程。 它們可以分為兩部分,模型超參數和算法超參數。 在將機器提供給訓練集時不能假設模型超參數,因為它們直接用於模型選擇任務。 相比之下,算法超參數對模型的性能沒有影響,但會影響學習過程的速度和質量。 不同的模型訓練技術需要不同的超參數,但有一些基本算法不需要任何超參數。