数据权重对模型的影响

在机器学习中,数据点的权重可以显著影响模型的训练结果。权重较高的数据点对模型的决策边界有更大的影响。本文通过一个简单的Python示例,展示了如何使用带权重的样本来训练一个分类器,并可视化了权重对决策边界的影响。

Python代码实现

首先,导入了必要的库,包括用于数据可视化的matplotlib.pyplot,用于数值计算的numpy,以及用于机器学习的sklearn库。

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

接下来,生成了20个随机点,并将它们分为两组,每组10个点。然后,为这些点分配了标签和权重。权重是通过随机生成的数乘以100得到的,并且特意为后10个样本分配了更大的权重。

np.random.seed(0) X = np.r_[np.random.randn(10, 2) + [1, 1], np.random.randn(10, 2)] y = [1]*10 + [-1]*10 sample_weight = 100 * np.abs(np.random.randn(20)) sample_weight[:10] *= 10

然后,使用numpy的meshgrid函数生成了一个网格,用于绘制决策边界。接着,使用scatter函数绘制了带权重的数据点。

xx, yy = np.meshgrid(np.linspace(-4, 5, 500), np.linspace(-4, 5, 500)) fig, ax = plt.subplots() ax.scatter(X[:, 0], X[:, 1], c=y, s=sample_weight, alpha=0.9, cmap=plt.cm.bone, edgecolor="black")

接下来,使用SGDClassifier训练了一个未加权的模型,并绘制了其决策边界。然后,再次训练了同一个模型,但这次为样本分配了权重,并绘制了加权后的决策边界。

clf = linear_model.SGDClassifier(alpha=0.01, max_iter=100) clf.fit(X, y) Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()]) Z = Z.reshape(xx.shape) no_weights = ax.contour(xx, yy, Z, levels=[0], linestyles=["solid"]) clf = linear_model.SGDClassifier(alpha=0.01, max_iter=100) clf.fit(X, y, sample_weight=sample_weight) Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()]) Z = Z.reshape(xx.shape) samples_weights = ax.contour(xx, yy, Z, levels=[0], linestyles=["dashed"])

最后,为两个决策边界添加了图例,并显示了图表。通过比较两个决策边界,可以看到权重对模型训练的影响。

no_weights_handles, _ = no_weights.legend_elements() weights_handles, _ = samples_weights.legend_elements() ax.legend([no_weights_handles[0], weights_handles[0]], ["no weights", "with weights"], loc="lower left") ax.set(xticks=(), yticks=()) plt.show()

整个脚本的运行时间非常短,仅为0.079秒。这个示例展示了如何使用Python和sklearn库来处理带权重的样本,并可视化了权重对模型决策边界的影响。

相关示例

如果对这个话题感兴趣,还可以查看其他相关的示例,例如:

  • SVM: Weighted samples
  • SVM Exercise
  • Illustration of Gaussian process classification (GPC) on the XOR dataset
  • SVM Margins Example
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485