首页 > 解决方案 > 如何在多特征 svc 案例中从 mlxtend 绘制虹膜数据集中的所有样本的“plot_decision_regions”?

问题描述

我正在尝试在 iris 数据集上使用 scikit-learn svc 模型。我需要使用四个特征(萼片长度/宽度、花瓣长度/宽度)和所有三个类(setosa、versicolor、virginica)来训练数据。然后我需要可视化结果,在 2D 图形上只呈现两个特征。我遇到的问题是我的决策边界看起来错误,并且缺少一个样本子集(分类为其中一类的样本)。

我遵循了 mlxtend "plot_decision_regions" 中的示例 7:

http://rasbt.github.io/mlxtend/user_guide/plotting/plot_decision_regions/#example-7-decision-regions-with-more-than-two-training-features

我玩过“值”和“宽度”的值,但没有多大成功。我还尝试将“zoom_factor”更改为较低的值,以检查我的情节是否放大太多。

iris = datasets.load_iris()
X = iris.data[:, [0,1,2,3]]
y = iris.target

# Training a classifier
svm = SVC(gamma='auto')
svm.fit(X, y)

# Plotting decision regions
fig, ax = plt.subplots()
# Decision region for feature 3 = 1.5
value = 1.5
# Plot training sample with feature 3 = 1.5 +/- 0.75
width = 0.75
plot_decision_regions(X, y, clf=svm,
                      filler_feature_values={2: value, 3: value},
                      filler_feature_ranges={2: width, 3: width},
                      legend=2, ax=ax,
                      zoom_factor=0.5)
ax.set_xlabel('Feature 1')
ax.set_ylabel('Feature 2')
ax.set_title('Feature 3 = {}'.format(value))

# Adding axes annotations
fig.suptitle('SVM on make_blobs')
plt.show()

当我尝试使用所有四个功能时,我只得到没有显示样本的决策边界。具有三个特征,仅显示一组样本,正确分类为 0 类。具有两个特征,它显示所有三组样本,正确分类为三个类别。

标签: pythonmachine-learningscikit-learnsvcmlxtend

解决方案


推荐阅读