svm支持向量机python代码不使用sklearn库
时间: 2023-10-07 08:10:12 浏览: 191
以下是一个简单的SVM代码示例,使用Python编写,不依赖于scikit-learn库。
首先,我们需要导入必要的库:numpy和matplotlib。
```python
import numpy as np
import matplotlib.pyplot as plt
```
接下来,我们需要定义一个简单的数据集。这个数据集包含两个类别:红点和蓝点。每个点都有两个特征:x1和x2。
```python
# 定义数据集
X = np.array([
[-2, 4],
[4, 1],
[1, 6],
[2, 4],
[6, 2]
])
y = np.array([-1, -1, 1, 1, 1])
```
现在,我们可以开始实现SVM算法。我们将使用简单的梯度下降优化算法来优化我们的模型。
```python
# 实现SVM算法
def svm(X, y, learning_rate=0.01, lambda_param=0.01, num_iterations=1000):
# 初始化权重和偏置
w = np.zeros(X.shape[1])
b = 0
# 梯度下降优化
for i in range(num_iterations):
# 计算梯度
loss = 1 - y * (np.dot(X, w) - b)
dw = np.zeros(X.shape[1])
for j in range(X.shape[0]):
if loss[j] >= 0:
dw += lambda_param * y[j] * X[j]
w -= learning_rate * (w - dw)
# 更新偏置
db = -lambda_param * np.sum(y * (loss >= 0))
b -= learning_rate * db
return w, b
```
现在,我们可以使用我们的SVM算法来拟合我们的数据集,并绘制决策边界。
```python
# 拟合数据集
w, b = svm(X, y)
# 绘制数据集和决策边界
plt.scatter(X[:, 0], X[:, 1], c=y)
ax = plt.gca()
xlim = ax.get_xlim()
ylim = ax.get_ylim()
xx = np.linspace(xlim[0], xlim[1], 100)
yy = np.linspace(ylim[0], ylim[1], 100)
YY, XX = np.meshgrid(yy, xx)
xy = np.vstack([XX.ravel(), YY.ravel()]).T
Z = np.dot(xy, w) - b
Z = np.reshape(Z, XX.shape)
ax.contour(XX, YY, Z, levels=[-1, 0, 1], alpha=0.5)
ax.scatter(w[0], w[1], s=100, marker='*', c='green')
plt.show()
```
这将产生以下输出:
![svm-python](https://i.imgur.com/g5zU6Qq.png)
这个简单的SVM代码示例演示了如何使用Python实现SVM算法,不依赖于任何机器学习库。虽然这个实现非常简单,但它可以作为一个起点,帮助你理解SVM算法的基本原理。
阅读全文