gpt4 book ai didi

python - 实现 SVM RBF

转载 作者:行者123 更新时间:2023-12-05 02:53:27 25 4
gpt4 key购买 nike

我是数据科学领域的新手,我知道如何使用 sklearn 库以及如何自定义 RBF 内核,但我想从头开始实现 SVM-RBF 内核以用于学习目的以及如何在不使用的情况下手动实现拟合和预测sklearn 库。

有什么好的资源可以帮助我吗?我需要学习哪些技能才能实现这一目标?您是否推荐任何适合初学者的入门书籍,这些书籍简单易懂,易于理解机器学习中的主要概念?

非常感谢。

最佳答案

这种类型的 SVM 通常用 SMO 算法实现。您可能需要查看原始发布版本(Platt,John。使用顺序最小优化快速训练支持向量机,在核方法支持向量学习的进展中,B. Scholkopf,C. Burges,A . Smola, eds., MIT Press (1998)),但对我来说这很复杂。

Stanford Lecture Notes 中提供了一个稍微简化的版本, 但所有公式的推导都应该在其他地方找到(例如 this random notes I found on the Internet )。

作为替代方案,我可以向您推荐我自己的 SMO 算法变体。高度简化,实现包含 30 多行代码

class SVM:
def __init__(self, kernel='linear', C=10000.0, max_iter=100000, degree=3, gamma=1):
self.kernel = {'poly':lambda x,y: np.dot(x, y.T)**degree,
'rbf':lambda x,y:np.exp(-gamma*np.sum((y-x[:,np.newaxis])**2,axis=-1)),
'linear':lambda x,y: np.dot(x, y.T)}[kernel]
self.C = C
self.max_iter = max_iter

def restrict_to_square(self, t, v0, u):
t = (np.clip(v0 + t*u, 0, self.C) - v0)[1]/u[1]
return (np.clip(v0 + t*u, 0, self.C) - v0)[0]/u[0]

def fit(self, X, y):
self.X = X.copy()
self.y = y * 2 - 1
self.lambdas = np.zeros_like(self.y, dtype=float)
self.K = self.kernel(self.X, self.X) * self.y[:,np.newaxis] * self.y

for _ in range(self.max_iter):
for idxM in range(len(self.lambdas)):
idxL = np.random.randint(0, len(self.lambdas))
Q = self.K[[[idxM, idxM], [idxL, idxL]], [[idxM, idxL], [idxM, idxL]]]
v0 = self.lambdas[[idxM, idxL]]
k0 = 1 - np.sum(self.lambdas * self.K[[idxM, idxL]], axis=1)
u = np.array([-self.y[idxL], self.y[idxM]])
t_max = np.dot(k0, u) / (np.dot(np.dot(Q, u), u) + 1E-15)
self.lambdas[[idxM, idxL]] = v0 + u * self.restrict_to_square(t_max, v0, u)

idx, = np.nonzero(self.lambdas > 1E-15)
self.b = np.sum((1.0-np.sum(self.K[idx]*self.lambdas, axis=1))*self.y[idx])/len(idx)

def decision_function(self, X):
return np.sum(self.kernel(X, self.X) * self.y * self.lambdas, axis=1) + self.b

在简单的情况下,它的工作原理并不比 sklearn.svm.SVC 好多少,比较如下图 enter image description here

我已经在 GitHub 上发布了这段代码和一些生成图像的代码以供比较.有关公式的更详细说明,您可能需要引用 my preprint on ResearchGate .

更新:现在可以使用实时版本,请参阅 Github Pages

关于python - 实现 SVM RBF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62242579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com