特征离散化在分类数据集中的应用

特征离散化是一种数据预处理技术,它将每个特征分解成一系列等宽的区间(bins)。这些离散值随后被独热编码,并提供给线性分类器。这种预处理方法使得即使分类器本身是线性的,也能表现出非线性的行为。在本例中,前两个数据集(月亮形状和同心圆)在线性上是不可达的,而第三个数据集则近似于线性可分。在这两个线性不可分的数据集上,特征离散化显著提高了线性分类器的性能。相反,在线性可分的数据集上,特征离散化降低了线性分类器的性能。此外,还展示了两个非线性分类器以供比较。

需要注意的是,本例的直观感受并不一定适用于真实数据集。特别是在高维空间中,数据更容易被线性分隔。此外,使用特征离散化和独热编码会增加特征的数量,当样本数量较少时,容易导致过拟合。图表显示了训练点以实色表示,测试点以半透明表示。右下角显示了测试集上的分类准确率。

以下是三个不同数据集的分类器性能对比:

数据集0

对于第一个数据集,可以看到:

LogisticRegression: 0.86 LinearSVC: 0.86 KBinsDiscretizer + LogisticRegression: 0.86 KBinsDiscretizer + LinearSVC: 0.94 GradientBoostingClassifier: 0.90 SVC: 0.94

数据集1

对于第二个数据集,分类器的性能如下:

LogisticRegression: 0.40 LinearSVC: 0.40 KBinsDiscretizer + LogisticRegression: 0.78 KBinsDiscretizer + LinearSVC: 0.80 GradientBoostingClassifier: 0.84 SVC: 0.84

在第三个数据集上,分类器的性能表现如下:

LogisticRegression: 0.98 LinearSVC: 0.96 KBinsDiscretizer + LogisticRegression: 0.94 KBinsDiscretizer + LinearSVC: 0.94 GradientBoostingClassifier: 0.94 SVC: 0.98

:scikit-learn开发者 SPDX许可证标识符:BSD-3-Clause

以下是用于生成这些结果的Python代码示例:

import matplotlib.pyplot as plt import numpy as np from matplotlib.colors import ListedColormap from sklearn.datasets import make_circles, make_classification, make_moons from sklearn.ensemble import GradientBoostingClassifier from sklearn.exceptions import ConvergenceWarning from sklearn.linear_model import LogisticRegression from sklearn.model_selection import GridSearchCV, train_test_split from sklearn.pipeline import make_pipeline from sklearn.preprocessing import KBinsDiscretizer, StandardScaler from sklearn.svm import SVC, LinearSVC from sklearn.utils._testing import ignore_warnings # 更多代码...

请注意,上述代码仅展示了部分内容,完整的代码可以在相关的Jupyter笔记本或Python源代码文件中找到。

总的脚本运行时间:(0分钟 3.620秒)

下载Jupyter笔记本:

下载Python源代码:

下载压缩包:

  • 在多层感知器中变化正则化
  • 分类器比较
  • 展示KBinsDiscretizer的不同策略
  • 在Iris数据集上,半监督分类器与SVM的决策边界
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485