使用非线性的SVC(RBF kernel)做XOR问题的二分类,同时画出热图
时间: 2024-06-09 16:06:54 浏览: 66
首先,我们需要导入所需的库和生成XOR数据集:
```python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.svm import SVC
# 生成XOR数据集
X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
y = np.array([0, 1, 1, 0])
```
接下来,我们可以定义一个函数来绘制决策边界和热图:
```python
def plot_decision_boundary(clf, X, y, cmap='Paired_r'):
h = 0.01 # 步长
x_min, x_max = X[:, 0].min() - 0.1, X[:, 0].max() + 0.1
y_min, y_max = X[:, 1].min() - 0.1, X[:, 1].max() + 0.1
xx, yy = np.meshgrid(np.arange(x_min, x_max, h),
np.arange(y_min, y_max, h))
Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, cmap=cmap, alpha=0.8)
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=cmap, edgecolors='black')
plt.xlim(xx.min(), xx.max())
plt.ylim(yy.min(), yy.max())
```
然后,我们可以创建一个SVC并将其拟合到数据集上:
```python
svc = SVC(kernel='rbf', gamma='scale')
svc.fit(X, y)
```
最后,我们可以使用上面定义的函数绘制决策边界和热图:
```python
plot_decision_boundary(svc, X, y)
plt.show()
```
输出的结果应该类似于下面这张图:
![image](https://user-images.githubusercontent.com/26948028/130232221-7d1f3db4-8f56-4f9a-8f78-5b2e1c9f6f0d.png)
热图显示了SVC如何将XOR数据集分成两个类别。由于我们使用了非线性的RBF内核,因此SVC可以处理这种非线性问题。
阅读全文