Python人工智能 – 监督学习:分类

Python人工智能 – 监督学习:分类

在这一章中,我们将重点讨论实现监督学习–分类。

分类技术或模型试图从观察值中得到一些结论。在分类问题中,我们有分类的输出,如 “黑 “或 “白”,或 “教 “和 “非教”。在建立分类模型时,我们需要有包含数据点和相应标签的训练数据集。例如,如果我们想检查图像是否是一辆汽车。为了检查这一点,我们将建立一个训练数据集,其中包含与 “汽车 “和 “没有汽车 “相关的两个类别。然后我们需要使用训练样本来训练模型。分类模型主要用于人脸识别、垃圾邮件识别等。

在Python中建立分类器的步骤

为了在Python中建立一个分类器,我们将使用Python 3和Scikit-learn,这是一个机器学习的工具。按照以下步骤在Python中建立一个分类器 —

第1步–导入Scikit-learn

这将是在Python中建立分类器的第1步。在这一步,我们将安装一个名为Scikit-learn的Python包,它是Python中最好的机器学习模块之一。下面的命令将帮助我们导入这个包

Import Sklearn
Python

第2步–导入Scikit-learn的数据集

在这一步,我们可以开始为我们的机器学习模型处理数据集。这里,我们将使用乳腺癌威斯康星州诊断数据库。 该数据集包括关于乳腺癌肿瘤的各种信息,以及 恶性良性的 分类标签 该数据集有569个实例,或数据,关于569个肿瘤,包括30个属性,或特征的信息,如肿瘤的半径、纹理、平滑度和面积。在以下命令的帮助下,我们可以导入Scikit-learn的乳腺癌数据集—-。

from sklearn.datasets import load_breast_cancer
Python

现在,以下命令将加载数据集。

data = load_breast_cancer()
Python

Following is a list of important dictionary keys −

  • 分类标签名称(target_names)
  • 实际标签(target)
  • 属性/特征名称(feature_names)
  • 属性(data)

现在,在以下命令的帮助下,我们可以为每个重要的信息集创建新的变量,并分配数据。换句话说,我们可以用以下命令来组织数据 −

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

现在,为了更清楚地说明问题,我们可以在以下命令的帮助下打印类的标签、第一个数据实例的标签、我们的特征名称和特征值

print(label_names)
Python

上述命令将打印出分别为恶性和良性的类别名称。它显示为下面的输出 –

['malignant' 'benign']
Python

现在,下面的命令将显示它们被映射为二进制值0和1。这里0代表恶性癌症,1代表良性癌症。You will receive the following output −

print(labels[0])
0
Python

下面给出的两条命令将产生特征名称和特征值。

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

从上面的输出中,我们可以看到,第一个数据实例是一个恶性肿瘤,其半径为1.7990000e+01。

第3步–将数据整理成集

在这一步,我们将把数据分成两部分,即训练集和测试集。将数据分成这几组是非常重要的,因为我们必须在未见过的数据上测试我们的模型。为了将数据分成几组,sklearn有一个叫做 train_test_split() 的函数。在以下命令的帮助下,我们可以将数据分割成这些集合 —

from sklearn.model_selection import train_test_split
Python

上面的命令将从sklearn导入 train_test_split 函数,下面的命令将把数据分成训练和测试数据。在下面的例子中,我们使用40%的数据进行测试,其余的数据将用于训练模型。

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

第4步 – 建立模型

在这一步,我们将建立我们的模型。我们将使用Native Bayes算法来建立模型。以下命令可以用来建立模型

from sklearn.naive_bayes import GaussianNB
Python

上面的命令将导入GaussianNB模块。现在,下面的命令将帮助你初始化模型。

gnb = GaussianNB()
Python

我们将通过使用gnb.fit()对数据进行拟合来训练该模型。

model = gnb.fit(train, train_labels)
Python

第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]
Python

上述一系列的0和1是肿瘤类别的预测值,即恶性和良性。

现在,通过比较两个数组,即 test_labelspreds ,我们可以找出我们模型的准确性。我们将使用 accuracy_score() 函数来确定准确性。请考虑以下命令 –

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

结果显示,NativeBayes分类器的准确率为95.17%。

这样,在上述步骤的帮助下,我们可以在Python中建立我们的分类器。

在Python中建立分类器

在本节中,我们将学习如何在Python中建立一个分类器。

Native Bayes分类器

Native Bayes是一种分类技术,用于使用Bayes定理建立分类器。它的假设是,预测因子是独立的。简单地说,它假设一个类别中某个特定特征的存在与任何其他特征的存在无关。为了建立Native Bayes分类器,我们需要使用名为scikit learn的python库。scikit learn包中有三种类型的Native Bayes模型,分别是 高斯模型、多叉模型和伯努利 模型。

要建立一个Native Bayes机器学习分类器模型,我们需要以下条件

数据集

我们将使用名为乳腺癌威斯康星州诊断数据库 的数据集。 该数据集包括关于乳腺癌肿瘤的各种信息,以及 恶性良性 分类标签 该数据集有569个实例或数据,涉及569个肿瘤,包括30个属性或特征的信息,如肿瘤的半径、纹理、平滑度和面积。我们可以从sklearn包中导入这个数据集。

Native贝叶斯模型

为了建立Native Bayes分类器,我们需要一个Native Bayes模型。如前所述,scikit learn包中有三种类型的Native Bayes模型,分别是 高斯模型、多项式 模型和 伯努利 模型。在下面的例子中,我们将使用高斯Native Bayes模型。

通过使用上述方法,我们将建立一个Native Bayes机器学习模型,使用肿瘤信息来预测肿瘤是恶性还是良性。

首先,我们需要安装sklearn模块。它可以在以下命令的帮助下完成 —

Import Sklearn
Python

现在,我们需要导入名为乳腺癌威斯康星州诊断数据库的数据集。

from sklearn.datasets import load_breast_cancer
Python

现在,以下命令将加载数据集。

data = load_breast_cancer()
Python

这些数据可以整理如下-

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

现在,为了更清楚地说明问题,我们可以在以下命令的帮助下打印类的标签、第一个数据实例的标签、我们的特征名称和特征值—。

print(label_names)
Python

上述命令将打印出分别为恶性和良性的类别名称。它显示为下面的输出 –

['malignant' 'benign']
Python

现在,下面的命令将显示它们被映射为二进制值0和1。这里0代表恶性癌症,1代表良性癌症。它显示为下面的输出 –

print(labels[0])
0
Python

以下两条命令将产生特征名称和特征值。

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

从上面的输出中,我们可以看到,第一个数据实例是一个恶性肿瘤,其主要半径为1.7990000e+01。

为了在未见过的数据上测试我们的模型,我们需要将我们的数据分成训练和测试数据。这可以在以下代码的帮助下完成 —

from sklearn.model_selection import train_test_split
Python

上面的命令将从sklearn导入 train_test_split 函数,下面的命令将把数据分成训练和测试数据。在下面的例子中,我们使用40%的数据进行测试,剩下的数据将用于训练模型。

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

Now, we are building the model with the following commands −

from sklearn.naive_bayes import GaussianNB
Python

上述命令将导入 GaussianNB 模块。现在,通过下面的命令,我们需要初始化模型。

gnb = GaussianNB()
Python

我们将通过使用 gnb.fit( )对数据进行拟合来训练该模型

model = gnb.fit(train, train_labels)
Python

现在,通过对测试数据进行预测来评估该模型,可以按以下方式进行

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

上述一系列的0和1是肿瘤类别的预测值,即恶性和良性。

现在,通过比较两个数组即 test_labelspreds ,我们可以找出我们模型的准确性。我们将使用 accuracy_score() 函数来确定准确性。考虑以下命令 –

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

结果显示,NativeBayes分类器的准确率为95.17%。

那是基于Native Bayse高斯模型的机器学习分类器。

支持向量机(SVM)

基本上,支持向量机(SVM)是一种监督下的机器学习算法,可用于回归和分类。支持向量机的主要概念是将每个数据项绘制成n维空间中的一个点,每个特征的值就是一个特定坐标的值。这里的n是我们将拥有的特征。以下是一个简单的图形表示,以理解SVM的概念 —

Python人工智能-监督学习之分类

在上图中,我们有两个特征。因此,我们首先需要在二维空间中绘制这两个变量,每个点有两个坐标,称为支持向量。这条线将数据分割成两个不同的分类组。这条线将是分类器。

在这里,我们将通过使用scikit-learn和虹膜数据集建立一个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
Python

现在,加载输入数据 –

iris = datasets.load_iris()
Python

我们正在采取前两个特征–

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

我们将用原始数据绘制支持向量机的边界。我们正在创建一个网格来绘制。

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()]
Python

我们需要给出正则化参数的值。

C = 1.0
Python

我们需要创建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')
Python

Python人工智能-监督学习之分类

逻辑回归

基本上,逻辑回归模型是监督分类算法家族的成员之一。逻辑回归通过使用逻辑函数估计概率来测量因变量和自变量之间的关系。

在这里,如果我们谈论因变量和自变量,那么因变量就是我们要预测的目标类变量,另一方面,自变量是我们要用来预测目标类的特征。

在逻辑回归中,估计概率意味着要预测事件发生的可能性。例如,店主想预测进入店内的顾客是否会购买游戏机(例如)。顾客有很多特征–性别、年龄等,店主可以通过观察这些特征来预测事件发生的可能性,即购买游戏机与否。Logistic函数是用于建立各种参数的sigmoid曲线。

前提条件

在使用逻辑回归建立分类器之前,我们需要在系统中安装Tkinter包。它可以从https://docs.python.org/2/library/tkinter.html .

现在,在下面给出的代码的帮助下,我们可以使用逻辑回归创建一个分类器 —

首先,我们将导入一些包–

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

现在,我们需要定义样本数据,可以按以下方式进行

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])
Python

接下来,我们需要创建逻辑回归分类器,可以这样做—

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

最后但并非最不重要的是,我们需要训练这个分类器—-。

Classifier_LR.fit(X, y)
Python

现在,我们如何将输出可视化?可以通过创建一个名为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
Python

在上面一行中,我们定义了用于网格的最小和最大数值X和Y。此外,我们还将定义绘制网格的步长。

mesh_step_size = 0.02
Python

让我们定义X和Y值的网状网格如下—

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

在以下代码的帮助下,我们可以在网格上运行分类器-

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)
Python

下面这行代码将指定绘图的边界

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()
Python

现在,运行代码后,我们将得到以下输出,逻辑回归分类器-

Python人工智能-监督学习之分类

决策树分类器

决策树基本上是一个二进制树形流程图,其中每个节点根据一些特征变量分割一组观察结果。

在这里,我们要建立一个决策树分类器来预测男性或女性。我们将采取一个非常小的数据集,有19个样本。这些样本包括两个特征,即身高和头发长度。

前提条件

为了建立以下分类器,我们需要安装 pydotplusgraphviz。 基本上,graphviz是一个使用dot文件绘制图形的工具, 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
Python

现在,我们需要提供数据集,如下所示

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)
Python

在提供数据集后,我们需要拟合模型,可以按以下方式进行

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

可以在以下Python代码的帮助下进行预测 —

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

我们可以在以下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')
Python

它将给出上述代码的预测值为 [‘Woman’] ,并创建以下决策树 –

Python人工智能-监督学习之分类

我们可以改变预测中的特征值来测试它。

随机森林分类器

我们知道,集合方法是将机器学习模型组合成一个更强大的机器学习模型的方法。随机森林,一个决策树的集合,就是其中之一。它比单一的决策树更好,因为在保留预测能力的同时,它可以通过对结果进行平均来减少过度拟合。这里,我们要在scikit learn癌症数据集上实现随机森林模型。

导入必要的软件包–

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
Python

现在,我们需要提供数据集,可以按以下方式进行

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

在提供数据集后,我们需要拟合模型,可以按以下方式进行

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

现在,获得训练和测试子集的准确性:如果我们增加估计器的数量,那么测试子集的准确性也会增加。

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)))
Python

输出

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

现在,与决策树一样,随机森林也有 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()
Python

Python人工智能-监督学习之分类

分类器的性能

实现机器学习算法后,我们需要找出模型的有效性。衡量有效性的标准可能是基于数据集和指标的。为了评估不同的机器学习算法,我们可以使用不同的性能指标。例如,假设一个分类器被用来区分不同物体的图像,我们可以使用分类性能指标,如平均准确率、AUC等。从某种意义上说,我们选择什么样的指标来评估我们的机器学习模型是非常重要的,因为指标的选择影响着机器学习算法的性能如何被衡量和比较。以下是一些指标–

混淆矩阵

基本上,它用于分类问题,其中输出可以是两个或多个类型的类别。它是衡量一个分类器性能的最简单的方法。混淆矩阵基本上是一个有两个维度的表格,即 “实际 “和 “预测”。这两个维度都有 “真阳性(TP)”、”真阴性(TN)”、”假阳性(FP)”和 “假阴性(FN)”。

Python人工智能-监督学习之分类

在上面的混淆矩阵中,1代表正类,0代表负类。

以下是与混淆矩阵相关的术语 –

  • 真阳性 – TP是指数据点的实际类别为1,而预测值也为1的情况。

  • 真阴性 – TNs是指数据点的实际类别为0,而预测值也为0的情况。

  • 假阳性 – FP是指数据点的实际类别为0而预测值也为1的情况。

  • 假阴性 – FNs是指数据点的实际类别为1,而预测值也为0的情况。

准确度

混淆矩阵本身不是一个性能指标,但几乎所有的性能矩阵都是基于混淆矩阵的。其中之一就是准确性。在分类问题中,它可以被定义为模型在所有类型的预测中所做出的正确预测的数量。准确率的计算公式如下

Accuracy=fracTP+TNTP+FP+FN+TNAccuracy = frac{TP+TN}{TP+FP+FN+TN}

精度

它主要用于文档检索。它可以被定义为返回的文件中有多少是正确的。以下是计算精度的公式—-。

Precision=fracTPTP+FPPrecision = frac{TP}{TP+FP}

召回率或敏感度

它可以被定义为模型返回多少个阳性结果。以下是计算模型的召回率/灵敏度的公式

Recall=fracTPTP+FNRecall = frac{TP}{TP+FN}

特异性

它可以被定义为模型返回多少个阴性结果。它与召回率正好相反。以下是计算模型特异性的公式:

Specificity=fracTNTN+FPSpecificity = frac{TN}{TN+FP}

类别不平衡问题

类不平衡是指属于一个类的观察值的数量明显低于属于其他类的观察值的情况。例如,这个问题在我们需要识别罕见疾病、银行中的欺诈性交易等情况下很突出。

不平衡类的例子

让我们考虑一个欺诈检测数据集的例子来理解不平衡类的概念 —

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

解决方案

平衡班级’Äô’ 是解决不平衡班级的一个办法。平衡班级的主要目的是增加少数班级的频率或减少多数班级的频率。以下是解决不平衡类问题的方法

重新取样

重新取样是一系列用于重建样本数据集的方法–包括训练集和测试集。再抽样是为了提高模型的准确性。以下是一些再抽样技术

  • 随机取样不足– 该技术旨在通过随机消除多数类的例子来平衡类别分布。这样做直到多数人和少数人类别的实例被平衡掉。
Total observations = 5000
Fraudulent Observations = 50
Non-Fraudulent Observations = 4950
Event Rate = 1%
Python

在这种情况下,我们从非欺诈性实例中不加替换地抽取10%的样本,然后将其与欺诈性实例结合起来 —

随机抽样不足后的非欺诈性观察值=4950的10% = 495

与欺诈性观察相结合后的总观察值=50+495=545

因此,现在,新的数据集在欠抽之后的事件率=9%。

这种技术的主要优点是,它可以减少运行时间并改善存储。但另一方面,在减少训练数据样本数量的同时,它也会丢弃有用的信息。

  • 随机过度取样– 这种技术旨在通过复制少数类的实例来增加其数量,从而平衡类的分布。
Total observations = 5000
Fraudulent Observations = 50
Non-Fraudulent Observations = 4950
Event Rate = 1%
Python

如果我们将50个欺诈性观测值复制30次,那么在复制了少数阶层的观测值之后,欺诈性观测值将是1500个。然后在新的数据中,经过超量取样的总观察值将是4950+1500=6450。因此,新数据集的事件率将是1500/6450=23%。

这种方法的主要优点是不会有有用信息的损失。但另一方面,它也增加了过度拟合的机会,因为它复制了少数类事件。

集合技术

这种方法基本上是用来修改现有的分类算法,使其适用于不平衡的数据集。在这种方法中,我们从原始数据中构建几个两阶段的分类器,然后汇总它们的预测结果。随机森林分类器是基于集合的分类器的一个例子。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册