AI人工智能 在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']
现在,下面的命令将显示它们被映射到二进制值 0 和 1。这里 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]
上述 0 和 1 系列是肿瘤类别的预测值 - 恶性和良性。
现在,通过比较两个数组即 test_labels和 preds,可以发现模型的准确性。使用 accuracy_score() 函数来确定准确性。 考虑下面的命令 -
from sklearn.metrics import accuracy_score
print(accuracy_score(test_labels,preds))
0.951754385965
加粗样式结果显示 NaïveBayes 分类器准确率为 95.17%。
AI人工智能 在Python中构建分类器
朴素贝叶斯分类器
朴素贝叶斯是一种使用贝叶斯定理建立分类器的分类技术。 假设是预测变量是独立的
。 简而言之,它假设类中某个特征的存在与任何其他特征的存在无关。要构建朴素贝叶斯分类器,我们需要使用名为 scikit learn 的 python库。 在 scikit 学习包中,有三种类型的朴素贝叶斯模型被称为 Gaussian,Multinomial 和 Bernoulli。
数据集
我们将使用名为 Breast Cancer Wisconsin Diagnostic Database数据集_blank。 数据集包括有关乳腺癌肿瘤的各种信息,以及恶性或良性分类标签。 该数据集在 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']
现在,下面给出的命令将显示它们映射到二进制值 0 和 1。这里 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]
上述0和1系列是肿瘤类别的预测值,即恶性和良性
现在,通过比较两个数组即 test_labels 和 preds,可以看到模型的准确性。 我们将使用 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')
执行后得到以下结果 -
AI人工智能 逻辑回归
基本上,逻辑回归模型是监督分类算法族的成员之一。 Logistic 回归通过使用逻辑函数估计概率来测量因变量和自变量之间的关系。
依赖变量和独立变量,那么因变量就是要预测的目标类变量,另一方面,自变量是用来预测目标类的特征
在逻辑回归中,估计概率意味着预测事件的可能性发生
。例如,店主想要预测进入商店的顾客将购买游戏站(例如)或不购买。顾客将会观察到许多顾客的特征 - 性别,年龄等,以便预测可能性的发生,即购买游戏站或不购物。逻辑函数是用来构建具有各种参数的函数的 S 形曲线。
前提条件
在使用逻辑回归构建分类器之前,我们需要在系统上安装 Tkinter 软件包。 它可以从 此处 进行安装。 | |
---|---|
现在,在下面给出的代码的帮助下,可以使用逻辑回归来创建分类器 -
首先,导入一些软件包 -
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
在上面的行中,我们定义了在网格中使用的最小值和最大值 X和 Y。另外,还将定义绘制网格的步长。
mesh_step_size = 0.02
下面定义 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))
使用以下代码,可以在网格网格上运行分类器 -
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()
现在,在运行代码之后,我们将得到以下输出,逻辑回归分类器
AI人工智能 决策树分类器
决策树基本上是一个二叉树流程图,其中每个节点根据某个特征变量分割一组观察值。
为了构建以下分类器,我们需要安装 pydotplus和 graphviz。 基本
上,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’]并创建以下决策树
AI人工智能 随机森林分类器
集成方法是将机器学习模型组合成更强大的机器学习模型的方法
。 随机森林是决策树的集合,就是其中之一。 它比单一决策树好,因为在保留预测能力的同时,通过平均结果可以减少过度拟合。 在这里,我们将在 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()
执行上面代码,得到以下输出结果
AI人工智能 分类器的性能
在实现机器学习算法之后,我们需要找出模型的有效性
。 衡量有效性的标准可以基于数据集和度量标准。 为了评估不同的机器学习算法,我们可以使用不同的性能指标。 例如,假设使用分类器来区分不同对象的图像,可以使用分类性能指标,如平均准确率,AUC 等。从某种意义上说,我们选择评估机器学习模型的指标是非常重要的,因为指标的选择会影响机器学习算法的性能如何被测量和比较。 以下是一些指标 -
混乱矩阵
基本上它用于输出可以是两种或更多种类的分类问题。 这是衡量分类器性能的最简单方法。
混淆矩阵基本上是一个包含两个维度即“实际”和“预测”的表格。 这两个维度都有“真正的正面(TP)”,“真正的负面(TN)”,“错误的正面(FP)”,“错误的否定(FN)”。
在上面的混淆矩阵中,1表示正类,0表示负类。 以下是与混淆矩阵相关的术语 -
真正 - 当实际的数据点类别为 1 并且预测也为 1 时,TP 就是这种情况。
真负 - 当数据点的实际类别为 0 并且预测也为 0 时,TN 就是这种情况。
假正 - 当实际的数据点类别为 0 并且预测也为 1 时,FP 就是这种情况。
假负 - FN 是数据点的实际类别为 1 且预测也为 0的情况。
准确性
混淆矩阵本身并不是一个性能指标,但几乎所有的性能矩阵均基于混淆矩阵
。 其中之一是准确性。 在分类问题中,它可能被定义为由模型对各种预测所做的正确预测的数量。 计算准确度的公式如下
精确
它主要用于文件检索。 它可能被定义为返回的文件有多少是正确的。 以下是计算精度的公式 -
召回或灵敏度
它可能被定义为模型返回的正数有多少。 以下是计算模型召回/灵敏度的公式 -
特异性
它可以定义为模型返回的负数有多少。 这与召回完全相反。 以下是计算模型特异性的公式 -
、
AI人工智能 分类失衡问题
分类不平衡是属于一个类别的观察数量显着低于属于其他类别的观测数量的场景
。 例如,在我们需要识别罕见疾病,银行欺诈性交易等情况下,这个问题非常突出。
不平衡分类的例子 让我们考虑一个欺诈检测数据集的例子来理解不平衡分类的概念
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%。
主要优点是不会丢失有用的信息。 但另一方面,由于它复制了少数族群的事件,因此它有更多的过度机会。
AI人工智能 合奏技巧
这种方法基本上用于修改现有的分类算法,使其适用于不平衡的数据集。 在这种方法中,我们从原始数据中构建几个两阶段分类器,然后汇总它们的预测。 随机森林分类器是基于集合的分类器的一个例子。