人工智能監督學習(分類)

在本章中,我們將重點討論監督式學習 - 分類

分類技術或模型試圖從觀測值中得出一些結論。 在分類問題中,我們有分類輸出,如「黑色」或「白色」或「教學」和「非教學」。 在構建分類模型時,需要有包含數據點和相應標籤的訓練數據集。 例如,如果想檢查圖像是否屬於汽車。 要實現這個檢查,我們將建立一個訓練數據集,其中包含與「車」和「無車」相關的兩個類。 然後需要使用訓練樣本來訓練模型。 分類模型主要用於人臉識別,垃圾郵件識別等。

在Python中構建分類器的步驟

爲了在Python中構建分類器,將使用Python 3和Scikit-learn,這是一個用於機器學習的工具。 按照以下步驟在Python中構建分類器 -

第1步 - 導入Scikit-learn
這將是在Python中構建分類器的第一步。 在這一步中,將安裝一個名爲Scikit-learn的Python包,它是Python中最好的機器學習模塊之一。 以下命令導入包 -

import sklearn

第2步 - 導入Scikit-learn的數據集

在這一步中,我們可以開始使用機器學習模型的數據集。 在這裏,將使用乳腺癌威斯康星診斷數據庫。 數據集包括有關乳腺癌腫瘤的各種信息,以及惡性或良性分類標籤。 該數據集在569個腫瘤上具有569個實例或數據,並且包括關於30個屬性或特徵(諸如腫瘤的半徑,紋理,光滑度和麪積)的信息。 藉助以下命令,導入Scikit-learn的乳腺癌數據集 -

from sklearn.datasets import load_breast_cancer

現在,以下命令將加載數據集。

data = load_breast_cancer()

以下是字典鍵列表 -

  • 分類標籤名稱(target_names)
  • 實際標籤(目標)
  • 屬性/功能名稱(feature_names)
  • 屬性(數據)

現在,使用以下命令,可以爲每個重要信息集創建新變量並分配數據。 換句話說,可以用下列命令組織數據 -

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

現在,爲了使它更清晰,可以使用以下命令來打印類標籤,第一個數據實例的標籤,我們的功能名稱和功能的值 -

print(label_names)

上述命令將分別打印惡性和良性的分類名稱。輸出結果如下 -

['malignant' 'benign']

現在,下面的命令將顯示它們被映射到二進制值01。這裏0表示惡性腫瘤,1表示良性癌症。得到以下輸出 -

print(labels[0])
0

下面給出的兩個命令將生成功能名稱和功能值。

print(feature_names[0])
mean radius
print(features[0])
[ 1.79900000e+01 1.03800000e+01 1.22800000e+02 1.00100000e+03
  1.18400000e-01 2.77600000e-01 3.00100000e-01 1.47100000e-01
  2.41900000e-01 7.87100000e-02 1.09500000e+00 9.05300000e-01
  8.58900000e+00 1.53400000e+02 6.39900000e-03 4.90400000e-02
  5.37300000e-02 1.58700000e-02 3.00300000e-02 6.19300000e-03
  2.53800000e+01 1.73300000e+01 1.84600000e+02 2.01900000e+03
  1.62200000e-01 6.65600000e-01 7.11900000e-01 2.65400000e-01
  4.60100000e-01 1.18900000e-01]

從上面的輸出中,可以看到第一個數據實例是一個半徑爲1.7990000e + 01的惡性腫瘤。

第3步 - 組織數據

在這一步中,將把數據分成兩部分,即訓練集和測試集。 將數據分割成這些集合非常重要,因爲必須在未看到的數據上測試模型。要將數據分成集合,sklearn有一個叫做train_test_split()函數的函數。 在以下命令的幫助下,可以分割這些集合中的數據 -

from sklearn.model_selection import train_test_split

上述命令將從sklearn中導入train_test_split函數,下面的命令將數據分解爲訓練和測試數據。 在下面給出的例子中,使用40%的數據進行測試,其餘數據將用於訓練模型。

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

第4步 - 建立模型
在這一步中,我們將建立模型。使用樸素貝葉斯算法來構建模型。 以下命令可用於構建模型 -

from sklearn.naive_bayes import GaussianNB

上述命令將導入GaussianNB模塊。 現在,以下命令用來初始化模型。

gnb = GaussianNB()

將通過使用gnb.fit()將它擬合到數據來訓練模型。

model = gnb.fit(train, train_labels)

第5步 - 評估模型及其準確性
在這一步中,我們將通過對測試數據進行預測來評估模型。爲了做出預測,我們將使用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]

上述01系列是腫瘤類別的預測值 - 惡性和良性。

現在,通過比較兩個數組即test_labelspreds,可以發現模型的準確性。使用accuracy_score()函數來確定準確性。 考慮下面的命令 -

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

結果顯示NaïveBayes分類器準確率爲95.17%

通過這種方式,藉助上述步驟,我們可以使用Python構建分類器。

在Python中構建分類器

在本節中,我們將學習如何在Python中構建分類器。

樸素貝葉斯分類器

樸素貝葉斯是一種使用貝葉斯定理建立分類器的分類技術。 假設是預測變量是獨立的。 簡而言之,它假設類中某個特徵的存在與任何其他特徵的存在無關。要構建樸素貝葉斯分類器,我們需要使用名爲scikit learn的python庫。 在scikit學習包中,有三種類型的樸素貝葉斯模型被稱爲Gaussian,Multinomial和Bernoulli。

要構建樸素貝葉斯機器學習分類器模型,需要以下「減號」

數據集

我們將使用名爲Breast Cancer Wisconsin Diagnostic Database數據集。 數據集包括有關乳腺癌腫瘤的各種信息,以及惡性或良性分類標籤。 該數據集在569個腫瘤上具有569個實例或數據,並且包括關於30個屬性或特徵(諸如腫瘤的半徑,紋理,光滑度和麪積)的信息。可以從sklearn包中導入這個數據集。

樸素貝葉斯模型

爲了構建樸素貝葉斯分類器,需要一個樸素貝葉斯模型。 如前所述,scikit學習包中有三種類型的NaïveBayes模型,分別稱爲Gaussian,Multinomial和Bernoulli。 在下面的例子中,將使用高斯樸素貝葉斯模型。

通過使用上述內容,我們將建立一個樸素貝葉斯機器學習模型來使用腫瘤信息來預測腫瘤是否是惡性的或良性的。

首先,我們需要安裝sklearn模塊。 它可以通過以下命令完成 -

import sklearn

現在,需要導入名爲Breast Cancer Wisconsin Diagnostic Database的數據集。

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']

現在,下面給出的命令將顯示它們映射到二進制值01。這裏0表示惡性腫瘤,1表示良性癌症。 它顯示爲下面的輸出 -

print(labels[0])
0

以下兩個命令將生成功能名稱和功能值。

print(feature_names[0])
mean radius
print(features[0])

[ 1.79900000e+01 1.03800000e+01 1.22800000e+02 1.00100000e+03
  1.18400000e-01 2.77600000e-01 3.00100000e-01 1.47100000e-01
  2.41900000e-01 7.87100000e-02 1.09500000e+00 9.05300000e-01
  8.58900000e+00 1.53400000e+02 6.39900000e-03 4.90400000e-02
  5.37300000e-02 1.58700000e-02 3.00300000e-02 6.19300000e-03
  2.53800000e+01 1.73300000e+01 1.84600000e+02 2.01900000e+03
  1.62200000e-01 6.65600000e-01 7.11900000e-01 2.65400000e-01
  4.60100000e-01 1.18900000e-01]

從以上輸出可以看出,第一個數據實例是一個主要半徑爲1.7990000e + 01的惡性腫瘤。

要在未看到的數據上測試模型,我們需要將數據分解爲訓練和測試數據。 它可以在下面的代碼的幫助下完成 -

from sklearn.model_selection import train_test_split

上述命令將從sklearn中導入train_test_split函數,下面的命令將數據分解爲訓練和測試數據。 在下面的例子中,使用40%的數據進行測試,並將提示數據用於訓練模型。

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

現在,使用以下命令構建模型 -

from sklearn.naive_bayes import GaussianNB

上述命令將從sklearn中導入train_test_split函數,下面的命令將數據分解爲訓練和測試數據。 在下面的例子中,我們使用40%的數據進行測試,並將提示數據用於訓練模型。

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

現在,使用以下命令構建模型 -

from sklearn.naive_bayes import GaussianNB

上述命令將導入GaussianNB模塊。 現在,使用下面給出的命令,需要初始化模型。

gnb = GaussianNB()

將通過使用gnb.fit()將它擬合到數據來訓練模型。

model = gnb.fit(train, train_labels)

現在,通過對測試數據進行預測來評估模型,並且可以按如下方式完成 -

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]

上述01系列是腫瘤類別的預測值,即惡性和良性。

現在,通過比較兩個數組即test_labelspreds,可以看到模型的準確性。 我們將使用accuracy_score()函數來確定準確性。 考慮下面的命令 -

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

結果顯示NaïveBayes分類器準確率爲95.17%。

這是基於NaïveBayse高斯模型的機器學習分類器。

支持向量機(SVM)
基本上,支持向量機(SVM)是一種有監督的機器學習算法,可用於迴歸和分類。 SVM的主要概念是將每個數據項繪製爲n維空間中的一個點,每個特徵的值是特定座標的值。以下是瞭解SVM概念的簡單圖形表示 -

人工智能監督學習(分類)

在上圖中,有兩個特徵。 因此,首先需要在二維空間中繪製這兩個變量,其中每個點都有兩個座標,稱爲支持向量。 該行將數據分成兩個不同的分類組。 這條線將是分類器。

在這裏,將使用scikit-learn和iris數據集來構建SVM分類器。 Scikitlearn庫具有sklearn.svm模塊並提供sklearn.svm.svc進行分類。 下面顯示了基於4個特徵來預測虹膜植物種類的SVM分類器。

數據集

我們將使用包含3個類別(每個類別爲50個實例)的虹膜數據集,其中每個類別指的是一類虹膜工廠。 每個實例具有四個特徵,即萼片長度,萼片寬度,花瓣長度和花瓣寬度。 下面顯示了基於4個特徵來預測虹膜植物分類的SVM分類器。

內核
這是SVM使用的技術。 基本上這些功能採用低維輸入空間並將其轉換到更高維空間。 它將不可分離的問題轉換成可分離的問題。 核函數可以是線性,多項式,rbf和sigmoid中的任何一種。 在這個例子中,將使用線性內核。

現在導入下列軟件包 -

import pandas as pd
import numpy as np
from sklearn import svm, datasets
import matplotlib.pyplot as plt

現在,加載輸入數據 -

iris = datasets.load_iris()

我們使用前兩個功能 -

X = iris.data[:, :2]
y = iris.target

我們將用原始數據繪製支持向量機邊界,創建一個網格來繪製。

x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
h = (x_max / x_min)/100
xx, yy = np.meshgrid(np.arange(x_min, x_max, h),
np.arange(y_min, y_max, h))
X_plot = np.c_[xx.ravel(), yy.ravel()]

需要給出正則化參數的值。

C = 1.0

需要創建SVM分類器對象。參考以下代碼 -

Svc_classifier = svm_classifier.SVC(kernel='linear', 
C=C, decision_function_shape = 'ovr').fit(X, y)
Z = svc_classifier.predict(X_plot)
Z = Z.reshape(xx.shape)
plt.figure(figsize = (15, 5))
plt.subplot(121)
plt.contourf(xx, yy, Z, cmap = plt.cm.tab10, alpha = 0.3)
plt.scatter(X[:, 0], X[:, 1], c = y, cmap = plt.cm.Set1)
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.xlim(xx.min(), xx.max())
plt.title('SVC with linear kernel')

執行後得到以下結果 -

人工智能監督學習(分類)

邏輯迴歸

基本上,邏輯迴歸模型是監督分類算法族的成員之一。 Logistic迴歸通過使用邏輯函數估計概率來測量因變量和自變量之間的關係。

在這裏,如果我們討論依賴變量和獨立變量,那麼因變量就是要預測的目標類變量,另一方面,自變量是用來預測目標類的特徵。

在邏輯迴歸中,估計概率意味着預測事件的可能性發生。例如,店主想要預測進入商店的顧客將購買遊戲站(例如)或不購買。顧客將會觀察到許多顧客的特徵 - 性別,年齡等,以便預測可能性的發生,即購買遊戲站或不購物。邏輯函數是用來構建具有各種參數的函數的S形曲線。

前提條件

在使用邏輯迴歸構建分類器之前,我們需要在系統上安裝Tkinter軟件包。 它可以從 https://docs.python.org/2/library/tkinter.html 進行安裝。

現在,在下面給出的代碼的幫助下,可以使用邏輯迴歸來創建分類器 -

首先,導入一些軟件包 -

import numpy as np
from sklearn import linear_model
import matplotlib.pyplot as plt

現在,需要定義可以完成的樣本數據,如下所示 -

X = np.array([[2, 4.8], [2.9, 4.7], [2.5, 5], [3.2, 5.5], [6, 5], [7.6, 4],
              [3.2, 0.9], [2.9, 1.9],[2.4, 3.5], [0.5, 3.4], [1, 4], [0.9, 5.9]])
y = np.array([0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3])

接下來,我們需要創建邏輯迴歸分類器,可以按如下方式完成 -

Classifier_LR = linear_model.LogisticRegression(solver = 'liblinear', C = 75)

最後但重要的是,我們需要訓練這個分類器 -

Classifier_LR.fit(X, y)

現在,我們如何可視化輸出? 可以通過創建一個名爲Logistic_visualize()的函數來完成 -

Def Logistic_visualize(Classifier_LR, X, y):
   min_x, max_x = X[:, 0].min() - 1.0, X[:, 0].max() + 1.0
   min_y, max_y = X[:, 1].min() - 1.0, X[:, 1].max() + 1.0

在上面的行中,我們定義了在網格中使用的最小值和最大值XY。另外,還將定義繪製網格的步長。

mesh_step_size = 0.02

下面定義XY值的網格,如下所示 -

x_vals, y_vals = np.meshgrid(np.arange(min_x, max_x, mesh_step_size),
                 np.arange(min_y, max_y, mesh_step_size))

使用以下代碼,可以在網格網格上運行分類器 -

output = classifier.predict(np.c_[x_vals.ravel(), y_vals.ravel()])
output = output.reshape(x_vals.shape)
plt.figure()
plt.pcolormesh(x_vals, y_vals, output, cmap = plt.cm.gray)

plt.scatter(X[:, 0], X[:, 1], c = y, s = 75, edgecolors = 'black', 
linewidth=1, cmap = plt.cm.Paired)

以下代碼行將指定圖的邊界 -

plt.xlim(x_vals.min(), x_vals.max())
plt.ylim(y_vals.min(), y_vals.max())
plt.xticks((np.arange(int(X[:, 0].min() - 1), int(X[:, 0].max() + 1), 1.0)))
plt.yticks((np.arange(int(X[:, 1].min() - 1), int(X[:, 1].max() + 1), 1.0)))
plt.show()

現在,在運行代碼之後,我們將得到以下輸出,邏輯迴歸分類器 -
人工智能監督學習(分類)

 決策樹分類器

決策樹基本上是一個二叉樹流程圖,其中每個節點根據某個特徵變量分割一組觀察值。

在這裏,我們正在構建一個用於預測男性或女性的決策樹分類器。這裏將採取一個非常小的數據集,有19個樣本。 這些樣本將包含兩個特徵 - 「身高」和「頭髮長度」。

前提條件

爲了構建以下分類器,我們需要安裝pydotplusgraphviz。 基本上,graphviz是使用點文件繪製圖形的工具,pydotplus是Graphviz的Dot語言模塊。 它可以與包管理器或使用pip來安裝。

現在,可以在以下Python代碼的幫助下構建決策樹分類器 -

首先,導入一些重要的庫如下 -

import pydotplus
from sklearn import tree
from sklearn.datasets import load_iris
from sklearn.metrics import classification_report
from sklearn import cross_validation
import collections

現在,提供如下數據集 -

X = [[165,19],[175,32],[136,35],[174,65],[141,28],[176,15],[131,32],
[166,6],[128,32],[179,10],[136,34],[186,2],[126,25],[176,28],[112,38],
[169,9],[171,36],[116,25],[196,25]]

Y = ['Man','Woman','Woman','Man','Woman','Man','Woman','Man','Woman',
'Man','Woman','Man','Woman','Woman','Woman','Man','Woman','Woman','Man']
data_feature_names = ['height','length of hair']

X_train, X_test, Y_train, Y_test = cross_validation.train_test_split
(X, Y, test_size=0.40, random_state=5)

在提供數據集之後,需要擬合可以如下完成的模型 -

clf = tree.DecisionTreeClassifier()
clf = clf.fit(X,Y)

預測可以使用以下Python代碼來完成 -

prediction = clf.predict([[133,37]])
print(prediction)

使用以下Python代碼來實現可視化決策樹 -

dot_data = tree.export_graphviz(clf,feature_names = data_feature_names,
            out_file = None,filled = True,rounded = True)
graph = pydotplus.graph_from_dot_data(dot_data)
colors = ('orange', 'yellow')
edges = collections.defaultdict(list)

for edge in graph.get_edge_list():
edges[edge.get_source()].append(int(edge.get_destination()))

for edge in edges: edges[edge].sort()

for i in range(2):dest = graph.get_node(str(edges[edge][i]))[0]
dest.set_fillcolor(colors[i])
graph.write_png('Decisiontree16.png')

它會將上述代碼的預測作爲[‘Woman’]並創建以下決策樹 -

人工智能監督學習(分類)

可以改變預測中的特徵值來測試它。

隨機森林分類器

集成方法是將機器學習模型組合成更強大的機器學習模型的方法。 隨機森林是決策樹的集合,就是其中之一。 它比單一決策樹好,因爲在保留預測能力的同時,通過平均結果可以減少過度擬合。 在這裏,我們將在scikit學習癌症數據集上實施隨機森林模型。

導入必要的軟件包 -

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_breast_cancer
cancer = load_breast_cancer()
import matplotlib.pyplot as plt
import numpy as np

現在,需要按照以下方式提供數據集

cancer = load_breast_cancer()
X_train, X_test, y_train,
y_test = train_test_split(cancer.data, cancer.target, random_state = 0)

在提供數據集之後,需要擬合可以如下完成的模型 -

forest = RandomForestClassifier(n_estimators = 50, random_state = 0)
forest.fit(X_train,y_train)

現在,獲得訓練以及測試子集的準確性:如果增加估計器的數量,那麼測試子集的準確性也會增加。

print('Accuracy on the training subset:(:.3f)',format(forest.score(X_train,y_train)))
print('Accuracy on the training subset:(:.3f)',format(forest.score(X_test,y_test)))

上面代碼,輸出結果如下所示 -

Accuracy on the training subset:(:.3f) 1.0
Accuracy on the training subset:(:.3f) 0.965034965034965

現在,與決策樹一樣,隨機森林具有feature_importance模塊,它將提供比決策樹更好的特徵權重視圖。 它可以如下繪製和可視化 -

n_features = cancer.data.shape[1]
plt.barh(range(n_features),forest.feature_importances_, align='center')
plt.yticks(np.arange(n_features),cancer.feature_names)
plt.xlabel('Feature Importance')
plt.ylabel('Feature')
plt.show()

執行上面代碼,得到以下輸出結果 -

人工智能監督學習(分類)

分類器的性能

在實現機器學習算法之後,我們需要找出模型的有效性。 衡量有效性的標準可以基於數據集和度量標準。 爲了評估不同的機器學習算法,我們可以使用不同的性能指標。 例如,假設使用分類器來區分不同對象的圖像,可以使用分類性能指標,如平均準確率,AUC等。從某種意義上說,我們選擇評估機器學習模型的指標是非常重要的,因爲指標的選擇會影響機器學習算法的性能如何被測量和比較。 以下是一些指標 -

混亂矩陣

基本上它用於輸出可以是兩種或更多種類的分類問題。 這是衡量分類器性能的最簡單方法。 混淆矩陣基本上是一個包含兩個維度即「實際」和「預測」的表格。 這兩個維度都有「真正的正面(TP)」,「真正的負面(TN)」,「錯誤的正面(FP)」,「錯誤的否定(FN)」。

人工智能監督學習(分類)

在上面的混淆矩陣中,1表示正類,0表示負類。
以下是與混淆矩陣相關的術語 -

  • 真正 - 當實際的數據點類別爲1並且預測也爲1時,TP就是這種情況。
  • 真負 - 當數據點的實際類別爲0並且預測也爲0時,TN就是這種情況。
  • 假正 - 當實際的數據點類別爲0並且預測也爲1時,FP就是這種情況。
  • 假負 - FN是數據點的實際類別爲1且預測也爲0的情況。

準確性

混淆矩陣本身並不是一個性能指標,但幾乎所有的性能矩陣均基於混淆矩陣。 其中之一是準確性。 在分類問題中,它可能被定義爲由模型對各種預測所做的正確預測的數量。 計算準確度的公式如下 -
人工智能監督學習(分類)

精確
它主要用於文件檢索。 它可能被定義爲返回的文件有多少是正確的。 以下是計算精度的公式 -
人工智能監督學習(分類)

召回或靈敏度
它可能被定義爲模型返回的正數有多少。 以下是計算模型召回/靈敏度的公式 -

人工智能監督學習(分類)

特異性
它可以定義爲模型返回的負數有多少。 這與召回完全相反。 以下是計算模型特異性的公式 -

人工智能監督學習(分類)

分類失衡問題

分類不平衡是屬於一個類別的觀察數量顯着低於屬於其他類別的觀測數量的場景。 例如,在我們需要識別罕見疾病,銀行欺詐性交易等情況下,這個問題非常突出。

不平衡分類的例子
讓我們考慮一個欺詐檢測數據集的例子來理解不平衡分類的概念 -

Total observations = 5000
Fraudulent Observations = 50
Non-Fraudulent Observations = 4950
Event Rate = 1%

解決
平衡類的行爲,解決不平衡的類問題。 平衡類的主要目標是增加少數類的頻率或減少多數類的頻率。 以下是解決失衡類問題的方法 -

重採樣
重新採樣是用於重建樣本數據集的一系列方法 - 包括訓練集和測試集。 重新抽樣是爲了提高模型的準確性。 以下是一些重新抽樣技術 -

  • 隨機抽樣 - 這項技術旨在通過隨機排除大多數類別的例子來平衡課堂分佈。 這樣做直到大多數和少數羣體的實例得到平衡。
Total observations = 5000
Fraudulent Observations = 50
Non-Fraudulent Observations = 4950
Event Rate = 1%

在這種情況下,我們將10%的樣本從非欺詐實例中取而代之,然後將它們與欺詐實例相結合 -
隨機抽樣後的非欺詐性觀察:4950的10% = 495
將他們與欺詐觀察結合後的總觀測值: 50 + 495 = 545

因此,現在,低採樣後新數據集的事件率爲: 9%

這種技術的主要優點是可以減少運行時間並改善存儲。 但另一方面,它可以丟棄有用的信息,同時減少訓練數據樣本的數量。

  • 隨機抽樣 - 這種技術旨在通過複製少數類中的實例數量來平衡類分佈。
Total observations = 5000
Fraudulent Observations = 50
Non-Fraudulent Observations = 4950
Event Rate = 1%

如果複製50次欺詐性觀察30次,那麼在複製少數類別觀察值後欺詐觀察值將爲1500。然後,在過採樣後新數據中的總觀察值將爲:4950 + 1500 = 6450。因此,新數據集的事件率是:1500/6450 = 23%

這種方法的主要優點是不會丟失有用的信息。 但另一方面,由於它複製了少數族羣的事件,因此它有更多的過度機會。

合奏技巧

這種方法基本上用於修改現有的分類算法,使其適用於不平衡的數據集。 在這種方法中,我們從原始數據中構建幾個兩階段分類器,然後彙總它們的預測。 隨機森林分類器是基於集合的分類器的一個例子。
人工智能監督學習(分類)