在本次分析中,构建了一个由两个“高斯量化”簇组成的数据集,并通过图形化的方式展示了决策边界和决策分数。这些数据集的分布对于类别A和B的样本分别进行了展示。每个样本的预测类别标签是根据决策分数的符号来确定的。决策分数大于零的样本被归类为类别B,否则归类为类别A。决策分数的大小决定了与预测类别标签的相似程度。此外,还可以通过选择决策分数高于某个值的样本来构建一个新的数据集,该数据集包含所需的类别B的纯度。
以下是实现这一分析的Python代码。首先,导入了必要的库,包括matplotlib用于绘图,numpy用于数值计算,以及sklearn中的一些模块用于数据生成和模型训练。接着,构建了两个高斯量化数据集,并将它们合并为一个用于训练的数据集。然后,创建并拟合了一个AdaBoost分类器,该分类器基于决策树。最后,绘制了决策边界和决策分数的分布图。
import matplotlib.pyplot as plt
import numpy as np
from sklearn.datasets import make_gaussian_quantiles
from sklearn.ensemble import AdaBoostClassifier
from sklearn.inspection import DecisionBoundaryDisplay
from sklearn.tree import DecisionTreeClassifier
# 构建数据集
X1, y1 = make_gaussian_quantiles(cov=2.0, n_samples=200, n_features=2, n_classes=2, random_state=1)
X2, y2 = make_gaussian_quantiles(mean=(3, 3), cov=1.5, n_samples=300, n_features=2, n_classes=2, random_state=1)
X = np.concatenate((X1, X2))
y = np.concatenate((y1, -y2 + 1))
# 创建并拟合一个AdaBoost决策树
bdt = AdaBoostClassifier(DecisionTreeClassifier(max_depth=1), algorithm="SAMME", n_estimators=200)
bdt.fit(X, y)
# 绘制决策边界和训练点
plt.figure(figsize=(10, 5))
ax = plt.subplot(121)
disp = DecisionBoundaryDisplay.from_estimator(bdt, X, cmap=plt.cm.Paired, response_method="predict", ax=ax, xlabel="x", ylabel="y")
plt.xlim(disp.xx0.min(), disp.xx0.max())
plt.ylim(disp.xx1.min(), disp.xx1.max())
plt.title("决策边界")
# 绘制决策分数
twoclass_output = bdt.decision_function(X)
plt.subplot(122)
plt.hist(twoclass_output[y == 0], bins=10, range=(twoclass_output.min(), twoclass_output.max()), facecolor='b', alpha=0.5, edgecolor='k', label="类别A")
plt.hist(twoclass_output[y == 1], bins=10, range=(twoclass_output.min(), twoclass_output.max()), facecolor='r', alpha=0.5, edgecolor='k', label="类别B")
plt.title("决策分数")
plt.legend(loc="upper right")
plt.xlabel("分数")
plt.ylabel("样本数")
plt.tight_layout()
plt.show()
在上述代码中,首先使用make_gaussian_quantiles
函数生成了两个高斯量化数据集,并通过concatenate
函数将它们合并。然后,创建了一个AdaBoost分类器,该分类器基于决策树,并使用fit
方法对其进行了训练。接下来,使用DecisionBoundaryDisplay.from_estimator
方法绘制了决策边界,并使用hist
方法绘制了决策分数的分布图。
通过这种方式,可以直观地看到不同类别的样本在决策空间中的分布情况,以及它们的决策分数如何影响最终的分类结果。这种分析方法对于理解模型的决策过程和评估模型的性能非常有帮助。