機器學習 - 分類演算法



分類是一種監督學習技術,它根據一組輸入特徵預測分類目標變數。它通常用於解決垃圾郵件檢測、欺詐檢測、影像識別、情感分析等許多問題。

分類模型的目標是學習輸入特徵 (X) 和目標變數 (Y) 之間的對映函式 (f)。此對映函式通常表示為決策邊界,該邊界將輸入特徵空間中的不同類別分隔開。模型訓練完成後,即可用於預測新樣本的類別。

現在讓我們來看一下構建分類模型所涉及的步驟:

資料準備

第一步是收集和預處理資料。這包括資料清洗、處理缺失值以及將分類變數轉換為數值變數。

特徵提取/選擇

下一步是從資料中提取或選擇相關特徵。這是一個重要步驟,因為特徵的質量會極大地影響模型的效能。一些常見的特徵選擇技術包括相關性分析、特徵重要性排序和主成分分析。

模型選擇

選擇好特徵後,下一步是選擇合適的分類演算法。有很多不同的演算法可供選擇,每種演算法都有其自身的優點和缺點。一些流行的演算法包括邏輯迴歸、決策樹、隨機森林、支援向量機和神經網路。

模型訓練

選擇合適的演算法後,下一步是在標記的訓練資料上訓練模型。在訓練過程中,模型學習輸入特徵和目標變數之間的對映函式。模型引數會迭代調整,以最大限度地減少預測輸出與實際輸出之間的差異。

模型評估

訓練好模型後,下一步是在單獨的一組驗證資料上評估其效能。這樣做是為了估計模型的準確性和泛化效能。常見的評估指標包括準確率、精確率、召回率、F1 分數和受試者工作特徵 (ROC) 曲線下的面積。

超引數調整

在許多情況下,可以透過調整模型的超引數來進一步提高其效能。超引數是在訓練模型之前選擇的設定,用於控制學習率、正則化強度和神經網路中隱藏層的數量等方面。網格搜尋、隨機搜尋和貝葉斯最佳化是一些常用的超引數調整技術。

模型部署

訓練和評估模型後,最後一步是將其部署到生產環境中。這包括將模型整合到更大的系統中,在真實資料上進行測試,並隨著時間的推移監控其效能。

分類中的學習器型別

在分類問題中,我們有兩種型別的學習器:

懶惰學習器

顧名思義,這種學習器在儲存訓練資料後等待測試資料出現。只有在獲得測試資料後才進行分類。它們在訓練上花費的時間較少,但在預測上花費的時間較多。懶惰學習器的示例包括 K 近鄰和基於案例的推理。

積極學習器

與懶惰學習器相反,積極學習器在儲存訓練資料後,無需等待測試資料出現即可構建分類模型。它們在訓練上花費的時間較多,但在預測上花費的時間較少。積極學習器的示例包括決策樹、樸素貝葉斯和人工神經網路 (ANN)。

在 Python 中構建分類器

Scikit-learn 是一個用於機器學習的 Python 庫,可用於在 Python 中構建分類器。在 Python 中構建分類器的步驟如下:

步驟 1:匯入必要的 Python 包

要使用 scikit-learn 構建分類器,我們需要匯入它。我們可以使用以下指令碼匯入它:

import sklearn

步驟 2:匯入資料集

匯入必要的包後,我們需要一個數據集來構建分類預測模型。我們可以從 sklearn 資料集中匯入它,也可以根據我們的需要使用其他資料集。我們將使用 sklearn 的乳腺癌威斯康星診斷資料庫。我們可以使用以下指令碼匯入它:

from sklearn.datasets import load_breast_cancer

以下指令碼將載入資料集;

data = load_breast_cancer()

我們還需要組織資料,這可以透過以下指令碼完成:

label_names = data['target_names']
labels = data['target']
feature_names = data['feature_names']
features = data['data']

以下命令將列印標籤的名稱,在我們的資料庫中為 **“惡性”** 和 **“良性”**。

print(label_names)

上述命令的輸出是標籤的名稱:

['malignant' 'benign']

這些標籤對映到二進位制值 0 和 1。“惡性”癌症由 0 表示,“良性”癌症由 1 表示。

可以使用以下命令檢視這些標籤的特徵名稱和特徵值:

print(feature_names[0])

上述命令的輸出是標籤 0(即 **惡性** 癌症)的特徵名稱:

mean radius

同樣,標籤 1 的特徵名稱可以如下產生:

print(feature_names[1])

上述命令的輸出是標籤 1(即良性癌症)的特徵名稱:

mean texture

我們可以使用以下命令列印這些標籤的特徵:

print(features[0])

這將給出以下輸出:

[1.799e+01 1.038e+01 1.228e+02 1.001e+03 1.184e-01 2.776e-01 3.001e-01
 1.471e-01 2.419e-01 7.871e-02 1.095e+00 9.053e-01 8.589e+00 1.534e+02
 6.399e-03 4.904e-02 5.373e-02 1.587e-02 3.003e-02 6.193e-03 2.538e+01
 1.733e+01 1.846e+02 2.019e+03 1.622e-01 6.656e-01 7.119e-01 2.654e-01
 4.601e-01 1.189e-01]

我們可以使用以下命令列印這些標籤的特徵:

print(features[1])

這將給出以下輸出:

[2.057e+01 1.777e+01 1.329e+02 1.326e+03 8.474e-02 7.864e-02 8.690e-02
7.017e-02  1.812e-01 5.667e-02 5.435e-01 7.339e-01 3.398e+00 7.408e+01
5.225e-03  1.308e-02 1.860e-02 1.340e-02 1.389e-02 3.532e-03 2.499e+01
2.341e+01  1.588e+02 1.956e+03 1.238e-01 1.866e-01 2.416e-01 1.860e-01
2.750e-01  8.902e-02]

步驟 3:將資料組織成訓練集和測試集

由於我們需要在未見過的資料上測試我們的模型,因此我們將資料集分成兩部分:訓練集和測試集。我們可以使用 *sklearn* Python 包的 *train_test_split()* 函式將資料分成集合。以下命令將匯入該函式:

from sklearn.model_selection import train_test_split

接下來,下一條命令將資料分割成訓練集和測試集。在這個例子中,我們將40%的資料用於測試,60%的資料用於訓練。

train, test, train_labels, test_labels = 
   train_test_split(features,labels,test_size = 0.40, random_state = 42)

步驟 4:模型評估

將資料分成訓練集和測試集後,我們需要構建模型。我們將使用樸素貝葉斯演算法來實現這個目的。以下命令將匯入GaussianNB模組:

from sklearn.naive_bayes import GaussianNB

現在,按照如下方式初始化模型:

gnb = GaussianNB()

接下來,使用以下命令訓練模型:

model = gnb.fit(train, train_labels)

現在,為了評估,我們需要進行預測。這可以透過使用predict()函式來實現,如下所示:

preds = gnb.predict(test)
print(preds)

這將給出以下輸出:

[1 0 0 1 1 0 0 0 1 1 1 0 1 0 1 0 1 1 1 0 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 0
 1 0 1 1 0 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 0 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0
 1 1 1 1 1 1 0 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 1 0 0 1 0 0 1 1 1 0 1 1 0
 1 1 0 0 0 1 1 1 0 0 1 1 0 1 0 0 1 1 0 0 0 1 1 1 0 1 1 0 0 1 0 1 1 0 1 0 0
 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 0 1 1 1 1 1 1 0 0
 0 1 1 0 1 0 1 1 1 1 0 1 1 0 1 1 1 0 1 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 1
 0 0 1 1 0 1]

輸出中的一系列0和1是惡性良性腫瘤類別的預測值。

步驟 5:查詢準確率

我們可以透過比較兩個陣列,即test_labelspreds,來找到前面步驟中構建的模型的準確率。我們將使用accuracy_score()函式來確定準確率。

from sklearn.metrics import accuracy_score
print(accuracy_score(test_labels,preds))
0.951754385965

上述輸出顯示樸素貝葉斯分類器的準確率為95.17%。

分類評估指標

即使你完成了機器學習應用程式或模型的實現,工作也並沒有完成。我們必須找出我們的模型有多有效?可能存在不同的評估指標,但我們必須仔細選擇它,因為指標的選擇會影響如何衡量和比較機器學習演算法的效能。

以下是一些重要的分類評估指標,你可以根據你的資料集和問題型別選擇:

混淆矩陣

  • 混淆矩陣 - 這是衡量分類問題的效能最簡單的方法,其中輸出可以是兩種或多種型別的類別。

各種機器學習分類演算法

以下是一些重要的機器學習分類演算法:

我們將在後面的章節中詳細討論所有這些分類演算法。

應用

分類演算法的一些最重要的應用如下:

  • 語音識別
  • 手寫識別
  • 生物特徵識別
  • 文件分類

在接下來的章節中,我們將討論機器學習中一些最流行的分類演算法。

廣告