我们要在硬间隔 SVM(线性核)下,直接解其对偶问题来得到每个样本的拉格朗日乘数 αi。 对偶问题为一个凸二次规划(QP):
$ \begin{aligned} \max_{\alpha}\quad & \sum_{i=1}^{n}\alpha_i-\frac{1}{2}\sum_{i,j}\alpha_i\alpha_j y_i y_j \langle x_i,x_j\rangle\ \text{s.t.}\quad & \alpha_i\ge 0,\ \forall i, \ & \sum_{i=1}^{n}\alpha_i y_i=0 .
支持向量机 (SVM) 是一种常见的分类算法,其基本思想是找到一个超平面,使得两个类别的样本被该超平面分开,并且距离超平面最近的样本点(即支持向量)到超平面的距离最远。在 SVM 的对偶问题中,我们需要求解一组拉格朗日乘数。在此题目中,我们将简化这个问题,仅考虑两类问题,并且所有数据都是线性可分的。我们将使用硬间隔 SVM ,即不考虑噪声和异常点的影响。请根据输入描述和输出描述中的要求,编程计算拉格朗日乘数。
输入的数据集为一个二维 list ,该二维 list 中每一个子 list 的前两个元素表示样本的两个特征值,最后一个元素表示样本的类别标签,其中 1 表示正类,−1 表示负类。例如,[[1.0,2.0,1],[2.0,3.0,−1]] 。所有的特征值都是浮点数。其中终端输入每行表示一个子 list ,数字之间以空格间隔。
你可以假设 SVM 的对偶问题的解是唯一的。
输出为一个一维 list ,表示每个样本的拉格朗日乘数,保留两位小数,用字符串形式表示。例如, [′0.20’,′0.20′]。
1.支持使用 Python 中的 numpy、scipy、pandas、scikit−learn 。
2.python 在保留 0.00 的时候可能会出现负数,统一输出为 ′0.00′ 。
输入
1.0 2.0 1
2.0 3.0 -1
输出
['1.00','1.00']