写线性可分支持向量机分类鸢尾花数据集代码并画可以出图(不用Scikit-Learn库)
时间: 2024-02-03 15:02:20 浏览: 88
好的,下面是可以在 Python 中实现的线性可分支持向量机分类鸢尾花数据集代码:
```python
import numpy as np
import matplotlib.pyplot as plt
# 加载鸢尾花数据集
data = np.loadtxt('iris.txt', delimiter=',')
# 数据集的前两列是特征,第三列是类别
X = data[:, :2]
y = data[:, 2]
# 定义支持向量机算法
def svm(data, labels, C=1.0, epochs=1000, lr_rate=0.01):
# 初始化参数
w = np.zeros(data.shape[1])
b = 0.0
# 进行梯度下降
for epoch in range(epochs):
for i in range(data.shape[0]):
xi = data[i]
yi = labels[i]
if yi * (xi.dot(w) + b) < 1:
w = w - lr_rate * (w - C * yi * xi)
b = b - lr_rate * (-C * yi)
else:
w = w - lr_rate * w
return w, b
# 训练模型
w, b = svm(X, y)
# 画出决策边界
plt.figure()
plt.scatter(X[:,0], X[:,1], c=y)
plt.xlim([4, 8])
plt.ylim([1.5, 5])
x = np.linspace(4, 8)
y1 = (-w[0] * x - b) / w[1]
y2 = (-w[0] * x - b + 1) / w[1]
y3 = (-w[0] * x - b - 1) / w[1]
plt.plot(x, y1, 'k')
plt.plot(x, y2, 'k--')
plt.plot(x, y3, 'k--')
plt.show()
```
上述代码是使用简单的梯度下降算法实现线性可分支持向量机进行分类,并画出了分类决策边界图。需要注意的是,该代码仅作为展示 SVM 工作原理的示例,是不够完整与严谨的,请勿用于实际应用。
阅读全文