python 画出使用分类器得到的决策边界

  

下面是使用Python画出使用分类器得到的决策边界的完整攻略:

1. 准备数据集

我们需要一个可视化的数据集,这里我们使用sklearn自带的Iris数据集。我们可以先将数据集导入:

from sklearn import datasets
import pandas as pd

iris = datasets.load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
df['target'] = iris.target

然后,我们选择两个特征作为X,一个特征作为y。这里我们选择花萼长度和宽度作为X,花瓣长度作为y。

X = df[['sepal length (cm)', 'sepal width (cm)']]
y = df['target']

2. 确定模型

这里我们使用支持向量机(SVM)作为分类器。我们需要先对SVM进行拟合,然后预测一些值。

from sklearn import svm

clf = svm.SVC(kernel='linear', C=1)
clf.fit(X, y)

predicted = clf.predict(X)

3. 画出决策边界

我们需要画出决策边界。首先我们需要确定坐标轴的最小值和最大值。

x_min = X['sepal length (cm)'].min() - 0.5
x_max = X['sepal length (cm)'].max() + 0.5
y_min = X['sepal width (cm)'].min() - 0.5
y_max = X['sepal width (cm)'].max() + 0.5

然后我们可以生成一个网格来画出决策边界。

import numpy as np

xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02),
                     np.arange(y_min, y_max, 0.02))
Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)

最后,我们可以将决策边界画出来。

import matplotlib.pyplot as plt

plt.figure(1, figsize=(6, 5))
plt.clf()
plt.contour(xx, yy, Z, cmap=plt.cm.Paired, alpha=0.8)

# 将训练数据集画出来
plt.scatter(X['sepal length (cm)'], X['sepal width (cm)'],
            c=y, cmap=plt.cm.Paired)
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.xlim(xx.min(), xx.max())
plt.ylim(yy.min(), yy.max())
plt.xticks(())
plt.yticks(())
plt.show()

上述代码执行后,我们便可以画出使用SVM得到的决策边界图像。

除了Iris数据集之外,我们还可以使用其他人工或真实数据集进行实验。例如在进行分类器的比较时,可以选择sklearn自带的手写数字数据集,用SVM、逻辑回归等分类器进行拟合,然后画出决策边界,并比较准确率等指标。

相关文章