非线性的SVC(RBF kernel)做XOR问题的二分类,同时画出热图
时间: 2023-06-13 16:07:58 浏览: 181
首先,引入必要的库和数据集:
```python
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
import numpy as np
# XOR数据集
X = np.array([[0,0], [0,1], [1,0], [1,1]])
y = np.array([0, 1, 1, 0])
```
然后,定义并训练一个非线性的SVC模型(使用RBF内核):
```python
# 定义并训练模型
model = SVC(kernel='rbf')
model.fit(X, y)
```
接着,生成测试数据,并使用模型进行预测:
```python
# 生成测试数据
test_X = np.array([[0.5, 0.5], [0.2, 0.8], [0.9, 0.1]])
# 预测
pred_y = model.predict(test_X)
```
最后,计算模型的准确率,并画出热图:
```python
# 计算准确率
acc = accuracy_score(y, model.predict(X))
print('Accuracy:', acc)
# 画出热图
import matplotlib.pyplot as plt
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.linspace(x_min, x_max, 100),
np.linspace(y_min, y_max, 100))
Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, alpha=0.4)
plt.scatter(X[:, 0], X[:, 1], c=y, alpha=0.8)
plt.xlabel('x1')
plt.ylabel('x2')
plt.show()
```
完整代码如下:
阅读全文