過去十年,機器學習已從科研實驗室走向日常的網絡和移動應用程序。機器學習使您的應用程序能夠執行以前難以編程的任務,例如檢測圖像中的物體和人臉、檢測垃圾郵件和仇恨言論,以及為電子郵件和消息應用程序生成智能回复。
然而,執行機器學習與經典編程有著根本的不同。在本文中,您將學習機器學習的基礎知識,並創建一個可以根據花朵測量結果預測花卉種類的基本模型。
經典編程依賴於可以分解為不同的類、函數和 if-else 命令的明確定義的問題。另一方面,機器學習依賴於根據經驗發展其行為。您不是向機器學習模型提供規則,而是通過示例對其進行訓練。
機器學習算法有不同的類別,每種類別都可以解決特定問題。
監督學習適用於您想要從輸入數據到結果的問題。所有監督學習問題的共同特徵是存在一個可以用來測試模型的真實情況,例如標記的圖像或歷史銷售數據。
監督學習模型可以解決回歸或分類問題。回歸模型預測數量(例如銷售的商品數量或股票價格),而分類問題試圖確定輸入數據的類別(例如貓/狗/魚/鳥、欺詐/非欺詐)。
圖像分類、人臉檢測、股票價格預測和銷售預測是監督學習可以解決的問題示例。
一些流行的監督學習算法包括線性回歸和邏輯回歸、支持向量機、決策樹和人工神經網絡。
無監督學習適用於您擁有數據但不是結果,而是尋找模式的問題。例如,您可能希望根據客戶的相似性將其分組為細分市場。這在無監督學習中稱為聚類。或者,您可能希望檢測偏離企業正常活動的惡意網絡流量。這稱為異常檢測,這是另一項無監督學習任務。無監督學習也可用於降維,這是一種通過去除無關特徵來簡化機器學習任務的技巧。
一些流行的無監督學習算法包括 K 均值聚類和主成分分析 (PCA)。
強化學習是機器學習的一個分支,其中智能體試圖通過與其環境交互來實現目標。強化學習涉及動作、狀態和獎勵。未經訓練的強化學習智能體從隨機採取行動開始。每個動作都會改變環境的狀態。如果智能體發現自己處於所需狀態,則會獲得獎勵。智能體試圖找到產生最多獎勵的動作和狀態序列。
強化學習用於推薦系統、機器人技術和遊戲機器人,例如穀歌的 AlphaGo 和 AlphaStar。
在這篇文章中,我們將重點關注監督學習,因為它是最流行的機器學習分支,並且其結果更容易評估。我們將使用 Python,因為它具有許多支持機器學習應用程序的功能和庫。但是,一般概念可以應用於任何具有類似庫的編程語言。
(如果您不熟悉 Python,freeCodeCamp 提供了一個很棒的速成課程,可以幫助您入門。)
通常用於數據科學和機器學習的 Python 庫之一是 Scikit-learn,它提供了流行機器學習算法的實現。 Scikit-learn 不是基本 Python 安裝的一部分,您必須手動安裝它。
macOS 和 Linux 預裝了 Python。要安裝 Scikit-learn 庫,請在終端窗口中鍵入以下命令:
<code>pip install scikit-learn</code>
或對於 Python 3:
<code>python3 -m pip install scikit-learn</code>
在 Microsoft Windows 上,您必須首先安裝 Python。您可以從官方網站獲取最新版本的 Windows Python 3 安裝程序。安裝 Python 後,在命令行窗口中鍵入以下命令:
<code>python -m pip install scikit-learn</code>
或者,您可以安裝Anaconda 框架,其中包括獨立安裝的Python 3 以及Scikit-learn 和許多其他用於數據科學和機器學習的庫,例如Numpy、Scipy 和Matplotlib。您可以在其官方網站上找到 Anaconda 免費個人版的安裝說明。
每個機器學習項目的第一個步驟是了解您想要解決的問題。定義問題將幫助您確定需要收集的數據類型,並讓您了解需要使用哪種機器學習算法。
在我們的例子中,我們想要創建一個模型,根據花瓣和萼片長度和寬度的測量結果來預測花的種類。
這是一個監督分類問題。我們需要收集不同花卉標本的測量列表及其相應的物種。然後,我們將使用這些數據來訓練和測試一個可以將測量結果映射到物種的機器學習模型。
機器學習最棘手的部分之一是收集數據來訓練您的模型。您必須找到一個可以收集訓練模型所需數量數據的來源。您還需要驗證數據的質量,確保它代表模型將處理的不同情況,並避免收集包含隱藏偏差的數據。
幸運的是,Scikit-learn 包含幾個玩具數據集,可以用來嘗試不同的機器學習算法。 “鳶尾花數據集”恰好包含我們問題所需的確切數據。我們只需要從庫中加載它即可。
以下代碼加載住房數據集:
<code>pip install scikit-learn</code>
鳶尾花數據集包含 150 個觀測值,每個觀測值包含四個測量值 (iris.data) 和目標花卉種類 (iris.target)。可以在 iris.feature_names 中看到數據列的名稱:
<code>python3 -m pip install scikit-learn</code>
iris.target 包含數據集中註冊的三個花卉種類之一的數字索引 (0-2)。花卉種類的名稱可在 iris.target_names 中找到:
<code>python -m pip install scikit-learn</code>
在開始訓練之前,您必須將數據拆分為訓練集和測試集。您將使用訓練集來訓練機器學習模型,並使用測試集來驗證其準確性。
這樣做是為了確保您的模型沒有過度擬合訓練數據。過度擬合是指您的機器學習模型在訓練示例上的表現良好,但在未見過的數據上的表現不佳。過度擬合可能是由於選擇了錯誤的機器學習算法、對模型進行了錯誤的配置、訓練數據不佳或訓練示例太少而導致的。
根據您正在解決的問題類型和擁有的數據量,您必須確定要分配給測試集的數據量。通常,當您擁有大量數據(大約數万個示例)時,即使只有大約 1% 的小樣本也足以測試您的模型。對於包含總共 150 條記錄的鳶尾花數據集,我們將選擇 75-25 分割。
Scikit-learn 有一個 train_test_split 函數,它將數據集拆分為訓練數據集和測試數據集:
<code>from sklearn.datasets import load_iris iris = load_iris() </code>
train_test_split 獲取數據和目標數據集,並返回用於訓練 (X_train 和 y_train) 和測試 (X_test 和 y_test) 的兩對數據集。 test_size 參數確定將分配給測試的數據百分比(介於 0 和 1 之間)。 stratify 參數確保訓練數組和測試數組包含來自每個類別的平衡樣本數。 random_state 變量存在於 Scikit-learn 的許多函數中,用於控制隨機數生成器並實現可重複性。
現在我們的數據已準備就緒,我們可以創建一個機器學習模型並在訓練集上對其進行訓練。有許多不同的機器學習算法可以解決我們正在處理的分類問題。在我們的例子中,我們將使用“邏輯回歸”算法,它非常快,適用於簡單且不包含太多維度的分類問題。
Scikit-learn 的 LogisticRegression 類實現了此算法。實例化它之後,我們將通過調用 fit 函數在我們的訓練集 (X_train 和 y_train) 上對其進行訓練。這將調整模型的參數以找到測量值和花卉種類之間的映射。
<code>pip install scikit-learn</code>
現在我們已經訓練了模型,我們想要衡量它的準確性。 LogisticRegression 類有一個 score 方法,它返回模型的準確性。首先,我們將衡量模型在訓練數據上的準確性:
<code>python3 -m pip install scikit-learn</code>
這將返回大約 0.97,這意味著該模型準確預測了 97% 的訓練示例的類別,考慮到我們每個物種只有大約 37 個訓練示例,這已經相當不錯了。
接下來,我們將檢查模型在測試集上的準確性:
<code>python -m pip install scikit-learn</code>
這將給我們大約 95% 的結果,略低於訓練準確性,這是很自然的,因為這些是模型從未見過的示例。通過創建更大的數據集或嘗試另一種機器學習算法(例如支持向量機),我們或許能夠進一步提高模型的準確性,並彌合訓練和測試性能之間的差距。
最後,我們想看看如何在新的示例上使用我們訓練好的模型。 LogisticRegression 類有一個 predict 函數,它以觀測值數組作為輸入,並返回預測的類別。在我們的花卉分類器模型的情況下,我們需要向它提供四個測量值的數組(萼片長度、萼片寬度、花瓣長度、花瓣寬度),它將返回一個整數,表示花的類別:
<code>from sklearn.datasets import load_iris iris = load_iris() </code>
恭喜!您創建了您的第一個機器學習模型。我們現在可以將其組合到一個應用程序中,該應用程序從用戶那裡獲取測量結果並返回花卉種類:
<code>print(iris.feature_names) ''' ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)'] ''' </code>
希望這是您成為機器學習大師的第一步。從這裡開始,您可以繼續學習其他機器學習算法,學習更多關於機器學習基本概念的知識,並繼續學習更高級的主題,例如神經網絡和深度學習。通過一些學習和實踐,您將能夠創建能夠檢測圖像中的物體、處理語音命令並與用戶進行對話的非凡應用程序。
要開始學習使用 Python 進行機器學習,您需要對 Python 編程有基本的了解。熟悉 NumPy、Pandas 和 Matplotlib 等庫也很有益。此外,對統計和概率的基本了解至關重要,因為它們構成了機器學習算法的核心。
由於其簡單性和可讀性,Python 是最流行的機器學習語言之一。它擁有廣泛的庫和框架,例如 Scikit-learn、TensorFlow 和 PyTorch,這些庫和框架簡化了機器學習模型的開發。 R 和 Java 等其他語言也用於機器學習,但 Python 廣泛的生態系統使其成為許多人的首選。
Python 的 Scikit-learn 庫提供了各種機器學習算法的實現。一些常用的算法包括線性回歸、邏輯回歸、決策樹、隨機森林、支持向量機和 k 近鄰。對於深度學習,您可以使用 TensorFlow 和 PyTorch 等庫。
您可以使用交叉驗證和訓練測試拆分等技術來驗證模型的性能。 Python 的 Scikit-learn 庫為此提供了函數。此外,您可以使用準確性、精確率、召回率和 F1 分數等指標來進行分類問題,並使用均方誤差或 R 平方來進行回歸問題。
是的,Python 支持監督學習和無監督學習。可以使用 Scikit-learn 等庫來實現回歸和分類等監督學習算法。對於無監督學習,您可以使用 K 均值、層次聚類和 DBSCAN 等聚類算法。
可以使用正則化、提前停止和神經網絡的 dropout 等技術來處理過度擬合。您還可以使用 bagging 和 boosting 等集成方法來減少過度擬合。
數據預處理是機器學習中的一個關鍵步驟。它包括清理數據、處理缺失值、編碼分類變量和縮放特徵。 Python 提供了 Pandas 和 Scikit-learn 等庫,可以進行高效的數據預處理。
您可以使用 Matplotlib 和 Seaborn 等庫來可視化模型的性能。這些庫提供了繪製混淆矩陣、ROC 曲線和學習曲線等圖形的函數。
是的,Python 提供了 NLTK 和 SpaCy 等庫用於自然語言處理。這些庫提供了標記化、詞性標註、命名實體識別和情感分析等功能。
您可以使用 Flask 或 Django 等 Web 框架來部署機器學習模型。對於大規模部署,您可以使用 AWS、Google Cloud 或 Azure 等雲平台。它們提供模型部署、擴展和監控的服務。
以上是Python的機器學習底漆的詳細內容。更多資訊請關注PHP中文網其他相關文章!