感知机使用分类函数:
sign(w⋅x+b)
对于样本 (xi,yi),若分类错误,则有:
某电商网站准备推广先用后买购物模式,经过调研,准备使用感知机对一部分用户进行过滤。
给定一个二维坐标下的训练数据集 T={(x11,x12),(x21,x22),…,(xn1,xn2)},二分类标签取值范围 yi={1,−1},i=1,2,3...N,使用感知机 sign(w⋅x+b) 进行二分类,损失函数定义为错误分类点到超平面的总距离,其中输入空间中的任一点 x0 到超平面的距离可以表示为: ∣∣w∣∣1∣w⋅x0+b∣ 其中 ∣∣w∣∣ 是 w 的 L2 范数。
对于错误分类的点,当 w⋅xi+b>0 时,yi=−1,当 w⋅xi+b<0 时,yi=1,所以可以推出一个重要的结论: −yi(w⋅xi+b)>0 成立。
那么可以得到,所有错误分类的点到超平面的总距离为: −∣∣w∣∣1∑yi(w⋅xi+b)
进一步地,可以得到感知机的损失函数为: Loss(w,b)=−∑yi(w⋅xi+b)
请根据题目描述,结合输入和输出信息以及补充说明的提示,使用梯度下降法,完成对 w,b 的参数更新。
提示:
(1)需要根据随机梯度下降法推导出 w,b 的梯度下降表达式;
(2)根据损失函数的定义,每次迭代中,需要对所有样本进行遍历,但是分类正确的样本无需执行梯度下降,只有分类错误的样本执行。
(3)请认真阅读补充说明中的内容。
输入是 2 个 list,第一个 list 是一个二维 list,用来表示训练数据,每个子 list 的最后一个元素表示二分类标签 yi={1,−1},i=1,2,3...N,集合中的元素表示样本在二维坐标下的特征。第二个 list 表示训练感知机所需要的超参数,分别代表迭代次数和学习率。
请给出在给定迭代次数和学习率下,使用随机梯度下降法对参数 w,b 的更新结果,返回值类型为 list,长度为 3(2 个 w 权重和 1 个 b 权重)
(1)可以使用形如 numpy、pandas 等第三方 Python 库;
(2)为了简化计算难度,仅使用二维坐标下的数据点作为特征,并且 w,b 均初始化为 0;
(3)请注意,只有错误样本下会执行梯度下降,且 w,b 都最多保留小数点后 3 位;
(4)为了保证唯一性,请严格遵循输入输出描述进行作答。
(5)形如 sys.stdin 等方法结合 for 循环和 eval 函数即可读取并还原输入数据。
输入
[[(1,2),1],[(3,4),-1]]
[20,0.1]
输出
[-0.5,0.2,0.7]
说明
输入第一个 list 是给定的训练数据和标签,第二个 list 是训练参数,输出是给定的迭代次数和学习率下的参数 w,b 更新结果。