4
\ begingroup美元

我是一名计算机科学家,在机器学习课程中正在研究支持向量机(SVM)。我有一些了解SVMS如何设计,谢谢16.学习:支持向量机 - 麻省理工学院。但是,我不理解的是从拉格朗日函数的优化问题转换到其在任何编程语言中的实现。基本上,我需要理解的是,从头开始,如何构建决策功能,给定培训集。特别是,如何找到拉格朗日乘法器,以便知道要考虑哪些点来定义支持向量和决策功能?

有人能给我解释一下吗?

\ endgroup美元
1
  • \ begingroup美元 我们曾经能够回答你的问题,因为我已经到了类似的观点? \ endgroup美元- - - - - -FeedMeInformation 2月16日20日在5:41
0
\ begingroup美元

基于这个存储库:

https://github.com/arkm97/svm-from-scratch/blob/master/svm_from_scratch.ipynb.

我会尝试扭转工程这个概念:

所以首先出现问题datacleaning.(删除0,值,序列化,规范化)

归一化数据集(取而代之)与平均值的差异)

credit_df_norm =(credit_df  -  credit_df.mean())/(credit_df.std())

将数据集划分为Train和Test:

train_df = credit_df_norm。(目标,轴= 1)。Loc [:training_points] train_target = credit_df_norm[target]。替换(0,1).loc [: training_points]

这里正在启动该算法的线索(有数学等)

给定数据点$ vec x_j \in \mathbb{R}^{1 \ * N}$和目标$y_j = \pm 1$, 在哪里$j = 1, \dots, M$,找到将这两个类分开的最大边界超平面($ y_j = 1 $$ y_j = -1 $)。

vec w \美元是超平面的法向量。我们想要找到vec w \美元满足

$$ y_j(\ vec w \ cdot \ vec x_j + b)\ geq 1 $$上述双重制剂相当于最大化乘法器的以下内容vec \ \α美元:

$$ l(\ vec \ alpha)= \ vec y \ cdot \ vec \ alpha - \ frac 1 2 \ vec \ alpha> k \ vec \ alpha ^ t $$受约束$\sum_{j=1}^M \alpha_j = > 0$$ y_j \ alpha_j \ geq 0 $。矩阵K美元定义SVM的内核;我选择了$ k_ {jk} = k(\ vec x_j,\ vec x_k)= \ vec x_j \ cdot \ vec> x_k $。从中恢复平面的参数$ \ vec w = \ vec> \ alpha \ cdot \ vec x $$ b = y_j = \ vec w \ cdot \ alpha_j $$ j $这样\ alpha_j \ neq 0美元

让我们将其划分为单个因素:

我们需要找到最大边缘超平面分离导致SVN是分类-所以我们需要将元素分类到类别中。

= 1

= -1

这个模式允许找到超平面(?)

(⃗⋅⃗+)≥1

下一个模式:

(⃗)=⃗⋅⃗−12⃗>⃗

作者为内核SVN选择了这些模式:

=(⃗,⃗)=⃗>⃗

平面参数在这里:

⃗ =>⃗ ⋅⃗ and ==⃗ ⋅ for such that ≠0

参考:https://arxiv.org/pdf/1307.0471.pdf


在这一行中添加了内核

流行的内核是:

  • 多项式内核,

  • 高斯内核,

  • 径向基函数(RBF),

  • 拉普拉斯RBF内核,

  • sigmoid内核,

  • Anove RBF内核

    k_value = np。(train_df @ train_df数组。T + np.identity (len (train_target)) * 1 e-12)

K_Value(内核矩阵)的结构是数组。

在此输入图像描述

接下来是use of柯列斯基decomposition-cholesky- 这是下一个复杂的概念。

np.linalg.cholesky(k_value)

接下来的一些数据转换位:

alpha = cp.variable(shape = train_target.shape)

Beta = cp.multiply(alpha, train_target) #简化符号

K = cp.Parameter(形状= k_value。#目标函数obj = .5 * cp.quad_form(beta, K) - np.ones(alpha.shape)。T @ alpha # constraints const = [np.array(train_target.T) @ alpha == 0, -alpha <= np.zeros(alpha.shape), alpha <= 10*np.ones(shape=alpha.shape)] prob = cp.Problem(cp.Minimize(obj), const)

下一步是重建超平面:

w = np。乘(train_target alpha.value)。T @ train_df S = (alpha。b = train_target[S] @ w b = b[0] # b = np.mean(b)

最后,分类和评价:

返回np.sign(result) correct = 0 incorrect = 0 validation_set = credit_df_norm。Drop (target, axis=1) predictions = [] for i, x in validation_set.iterrows(): my_svm= classification (x) if my_svm==credit_df_norm[target]Replace (0, -1)[i]: correct +=1 else: incorrect +=1 predictions.append(my_svm) predictions = np.array(predictions) print(f"fraction correct: {correct/(correct + incorrect)}")

这是更详细的实现 - 对于沼泽,有一个有趣的文章:

https://towardsdatascience.com/svm-and-kernel-svm-fed02bef1200.

来自另一个库的现有功能 - 可以以简单的方式重用:

#拟合svm从sklearn.svm导入svc类= svc(kernel ='rbf',c = 0.1,gamma = 0.1)分类器.fit(x_train,y_train)%matplotlib内联导入numpy作为np import matplotlib.pyplot由于来自Scipy Import Stats的Plt#使用Seaborn绘图默认值导入Seaborn作为SNS;sns.set()

可视化数据集:在此输入图像描述

应用超平面后的数据集:在此输入图像描述

\ endgroup美元

    你的答案

    点击“发表您的答案”,表示您同意我们的服务条款,隐私政策饼干的政策

    不是你想要的答案?浏览标记的其他问题必威英雄联盟或者必威电竞问你自己的问题