- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是数据科学领域的新手,我知道如何使用 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 好多少,比较如下图
我已经在 GitHub 上发布了这段代码和一些生成图像的代码以供比较.有关公式的更详细说明,您可能需要引用 my preprint on ResearchGate .
更新:现在可以使用实时版本,请参阅 Github Pages
关于python - 实现 SVM RBF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62242579/
我想应用 RBF 神经网络来教授我的系统。我有一个带有输入的系统: | 1 2 3 4 5 6 ... 32 | 33 | | 1000 0001 001
我是数据科学领域的新手,我知道如何使用 sklearn 库以及如何自定义 RBF 内核,但我想从头开始实现 SVM-RBF 内核以用于学习目的以及如何在不使用的情况下手动实现拟合和预测sklearn
我正在使用 RBF 内核 matlab 函数。 在几个数据集上,随着我继续增加 sigma 值,支持向量的数量增加并且准确性增加。 而在一个数据集的情况下,当我增加 sigma 值时,支持向量会减少并
我想实现一个 RBFN 并在 StackOverflow 上找到了这段代码。虽然我明白一些代码,但我不明白什么 gamma , kwargs ,以及整个 call功能。 有人可以向我解释一下吗? fr
非常类似于RBF interpolation fails: LinAlgError: singular matrix但我认为问题不同,因为我没有重复的坐标。 玩具示例: import numpy as
我正在尝试寻找以高斯函数作为径向基函数的神经网络代码。我想使用反向传播学习规则。 我拥有所有数据,所以我只需要 RBF 神经网络。谢谢! 最佳答案 Encog 库(C# 和 Java)具有以下功能:
我想问一下 SVM 上的 RBF 内核。 在 sklearn 的文档中:http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVR
我正在使用 sklearn.svm.SVC (kernel='rbf') 对图像数据进行分类,效果很好。线性 SVM 通过在两个类之间放置一个超平面来对数据进行分类。在 rbf SVM 的情况下,平面
使用 RBF 进行插值时出现一些错误。这是一维的示例。我认为这与我的 y 值彼此之间的接近程度有关。有什么办法可以解决这个问题吗? import numpy as np from scipy.inte
我有类似这个问题的答案分别是这个问题的答案:RBF interpolation: LinAlgError: singular matrix 但是我想用rbf做概率分布。 到目前为止我的代码: from
当我使用 SVM 的 trainAuto 方法时,我得到 getKernelType() 的值 2 但是当我在我的代码中使用 RBF 时,它训练我的文件并输出 XML 文件。 svm = cv2.ml
当我执行下面的代码时 import matplotlib.pyplot as plt import numpy as np from scipy.interpolate import Rbf x_co
如果给我训练数据集和未标记的数据集,Matlab 的 RBF 核矩阵算法是什么? 最佳答案 这应该是您要查找的内容。它取自 here % With Fast Computation of the RB
我对 svm 分类有点陌生。我正在尝试使用 opencv svm 分类器进行一些人脸识别。输入特征参数是归一化的局部二进制模式。所以所有的值都是从0-1。我首先尝试使用线性核来训练分类器,然后使用训练
我想为我的非线性可分离数据实现 SVM RBF 内核。我将我的内核定义为: def rbf(va, vb): gamma = 0.7 return exp(-gamma * linal
如何在 Neupy 或 Theano 中实现自定义激活函数(通过梯度下降调整均值和方差的 RBF 核)以在 Neupy 中使用。 {快速背景:梯度下降适用于网络中的每个参数。我想创建一个专门的特征空间
from sklearn.model_selection import GridSearchCV from sklearn import svm params_svm = {
我想像这里一样用 rbf 函数绘制一些点以获得点的密度分布: 如果我运行下面的代码,它工作正常: from scipy.interpolate.rbf import Rbf # radial bas
我在 3 维空间中有几个数据点 (x, y, z) 并使用 scipy.interpolate.Rbf 对它们进行插值。这给了我一个很好地代表 3D 对象表面的样条线。我现在想确定几个具有相同的任意
我使用 scipy.interpolate 插值数据集,它给出了热图(z 值作为 x、y 的函数): rbf = scipy.interpolate.Rbf(x, y, z, function='cu
我是一名优秀的程序员,十分优秀!