使用python实现支持向量机算法不使用sklearn的代码
时间: 2023-02-09 12:50:12 浏览: 133
使用 Python 实现支持向量机算法不使用 sklearn 的代码如下:
```python
import numpy as np
class SVM:
def __init__(self, C=1.0):
self.C = C
self.w = None
self.b = None
def fit(self, X, y):
n_samples, n_features = X.shape
K = np.zeros((n_samples, n_samples))
for i in range(n_samples):
for j in range(n_samples):
K[i, j] = np.dot(X[i], X[j])
P = np.outer(y, y) * K
q = -np.ones(n_samples)
G = np.vstack((np.eye(n_samples)*-1,np.eye(n_samples)))
h = np.hstack((np.zeros(n_samples), np.ones(n_samples) * self.C))
A = y.reshape(1, -1)
b = np.zeros(1)
alpha = np.array(qp(P, q, G, h, A, b)['x'])
sv = alpha > 1e-5
ind = np.arange(len(alpha))[sv]
self.alpha = alpha[sv]
self.sv = X[sv]
self.sv_y = y[sv]
self.b = 0
for n in range(len(self.alpha)):
self.b += self.sv_y[n]
self.b -= np.sum(self.alpha * self.sv_y * K[ind[n],sv])
self.b /= len(self.alpha)
if n_features > 1:
self.w = np.zeros(n_features)
for n in range(len(self.alpha)):
self.w += self.alpha[n] * self.sv_y[n] * self.sv[n]
else:
self.w = None
def predict(self, X):
if self.w is not None:
return np.sign(np.dot(X, self.w) + self.b)
else:
return np.sign(X[0] + self.b)
```
这段代码实现了基于线性核的支持向量机,使用了 quadratic programming (QP) 求解对偶问题来求解支持向量机的参数。为了使用这段代码,你需要一个QP求解器,这里用
阅读全文