机器学习(二):感知机+svm习题 感知机手工推导参数更新 svm手推求解二维坐标超平面直线方程
作业1:
输入: 训练数据集 \(T = {(x1; y1); (x2; y2),..., (xN; yN)}\) 其中,\(x \in R^n\), \(y \in Y = \{+1, -1\}\), \(i=1,2...,N\),学习率\(η = 0.1\).
输出: \(w\),\(b\) ; 感知机模型\(f(x) = sign(w · x + b)\)
给出下列训练数据的感知机参数学习过程:
\(x_1\) | \(x_2\) | \(y\) |
---|---|---|
-3.0 | 3.0 | 1 |
-5.0 | 2.0 | 1 |
2.0 | 4.0 | -1 |
3.0 | 2.0 | -1 |
解:
step1: 令初值 \(w_o=[0,0]^T,b_0=0\)
step2: 选取第一个点 \((x_1,y_1)=([-3,3]^T,1)\)
step3: 计算 \(y_i(w_i\cdot x_i+b)=1\times (0+0)=0\le 0\) 那么进行迭代
\(w \leftarrow w+\eta y_{i} x_{i}\) 即 \(w_1=[0,0]^T+0.1\times 1\times [-3,3]^T=[-0.3,0.3]^T\)
\(b \leftarrow b+\eta y_{i}\) 即 \(b_1=0+0.1\times 1=0.1\)
step4: 【回到第二步验证第三步分类结果并迭代直到没有误分类】
感知机算法是收敛的,不会无限更新参数
再次计算可知对于第一个点\(y_1(w_1 \cdot [x_{11},x_{12}]^T+b)=1 \times (-0.3 \times -3+0.3 \times 3+0.1)=1.9>0\)
对于第二个点:\(1\times (1.5+0.6+0.1)=2.2>0\)
对于第三个点:\(-1\times (-0.6+1.2+0.1)=-0.7<0\)
进行迭代\(w_2=[-0.3-0.1\times2,0.3-0.1\times 4]^T=[-0.5,-0.1]^T\)
\(b_2=0.1+0.1=0.2\)
对于第一个点:\(y_1(w_1\cdot x_1+b_1)=1.2>0\)
对于第二个点:\(y_2(w_2\cdot x_2+b_2)=2.3>0\)
对于第三个点:\(y_3(w_3\cdot x_3+b_3)=1.4>0\)
对于第四个点:\(y_4(w_4\cdot x_4+b_4)=1.7>0\)
没有误分类,迭代结束.
2.根据数据样本点,按照SVM算法计算分类超平面方程
\(x_1\) | \(x_2\) | \(y\) |
---|---|---|
-3.0 | 3.0 | 1 |
-5.0 | 2.0 | 1 |
2.0 | 4.0 | -1 |
3.0 | 2.0 | -1 |
解:
step1:将散点图绘制在坐标轴上,并找出支持向量,对应的支持向量(点)是(-3,3)和(2,4)
step2:计算样本点(-3,3)和(2,4)到分类超平面的距离,即点到直线的距离。
有了两个支持向量,你就可以确定分类超平面了。超平面在二维空间中是一条直线,其方程可以用以下公式表示:
\]
其中,\(x_1\) 和 \(x_2\) 分别代表坐标轴上的两个维度,\(w_1\) 和 \(w_2\) 是法向量 \(w\) 在两个维度上的分量,\(b\) 是偏移量。而法向量 \(w\) 可以根据两个支持向量 \(\vec{x_1}\) 和 \(\vec{x_2}\) 计算得到。具体地,\(w\) 可以表示为:
\]
偏移量 \(b\) 可以由其中任意一个支持向量 \(\vec{x_i}\) 计算得到,公式如下:
\]
将 \(w_1\),\(w_2\) 和 \(b\) 代入超平面方程即可得到分类超平面的直线方程\(x_1-5x_2+18=0\)
?这个计算方法是错的,应当采用拉格朗日+KKT
或者用对偶问题
求解
附录:
绘制散点图的代码:
import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm
# 坐标点数据
X = np.array([[-3, 3], [-5, 2], [2, 4], [3, 2]])
y = np.array([1, 1, -1, -1])
# 定义SVM分类器
clf = svm.SVC(kernel='linear')
clf.fit(X, y)
# 定义SVM超平面
w = clf.coef_[0]
b = clf.intercept_
x1 = np.arange(-6, 6)
x2 = -(w[0] * x1 + b) / w[1]
# 创建一个散点图
fig, ax = plt.subplots()
# 设置坐标轴范围和中心点
x_min, x_max = -6, 6
y_min, y_max = -6, 6
ax.set_xlim(x_min, x_max)
ax.set_ylim(y_min, y_max)
ax.spines['left'].set_position('center')
ax.spines['bottom'].set_position('center')
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
# 绘制四个点
ax.scatter(X[0, 0], X[0, 1], color='r')
ax.scatter(X[1, 0], X[1, 1], color='r')
ax.scatter(X[2, 0], X[2, 1], color='b')
ax.scatter(X[3, 0], X[3, 1], color='b')
# 绘制SVM超平面
ax.plot(x1, x2, c='r',label='svm')
# 在散点周围添加坐标注释
ax.annotate(f'({X[0, 0]}, {X[0, 1]})', xy=(X[0, 0], X[0, 1]), xytext=(5, 5), textcoords='offset points')
ax.annotate(f'({X[1, 0]}, {X[1, 1]})', xy=(X[1, 0], X[1, 1]), xytext=(5, 5), textcoords='offset points')
ax.annotate(f'({X[2, 0]}, {X[2, 1]})', xy=(X[2, 0], X[2, 1]), xytext=(5, 5), textcoords='offset points')
ax.annotate(f'({X[3, 0]}, {X[3, 1]})', xy=(X[3, 0], X[3, 1]), xytext=(5, 5), textcoords='offset points')
# 增加图例 显示图像
plt.legend(loc='best')
plt.show()
机器学习(二):感知机+svm习题 感知机手工推导参数更新 svm手推求解二维坐标超平面直线方程的更多相关文章
- kaldi中CD-DNN-HMM网络参数更新公式手写推导
在基于DNN-HMM的语音识别中,DNN的作用跟GMM是一样的,即它是取代GMM的,具体作用是算特征值对每个三音素状态的概率,算出来哪个最大这个特征值就对应哪个状态.只不过以前是用GMM算的,现在用D ...
- 机器学习五 -- 机器学习的“Hello World”,感知机
机器学习五 -- 机器学习的“Hello World”,感知机 感知机是二类分类的线性分类模型,是神经网络和支持向量机的基础.其输入为实例的特征向量,输出为实例的类别,取+1和-1二值之一,即二类分类 ...
- paper 127:机器学习中的范数规则化之(二)核范数与规则项参数选择
机器学习中的范数规则化之(二)核范数与规则项参数选择 zouxy09@qq.com http://blog.csdn.net/zouxy09 上一篇博文,我们聊到了L0,L1和L2范数,这篇我们絮叨絮 ...
- 数据挖掘入门系列教程(八点五)之SVM介绍以及从零开始推导公式
目录 SVM介绍 线性分类 间隔 最大间隔分类器 拉格朗日乘子法(Lagrange multipliers) 拉格朗日乘子法推导 KKT条件(Karush-Kuhn-Tucker Conditions ...
- 借One-Class-SVM回顾SMO在SVM中的数学推导--记录毕业论文5
上篇记录了一些决策树算法,这篇是借OC-SVM填回SMO在SVM中的数学推导这个坑. 参考文献: http://research.microsoft.com/pubs/69644/tr-98-14.p ...
- 【Supervised Learning】支持向量机SVM (to explain Support Vector Machines (SVM) like I am a 5 year old )
Support Vector Machines 引言 内核方法是模式分析中非常有用的算法,其中最著名的一个是支持向量机SVM 工程师在于合理使用你所拥有的toolkit 相关代码 sklearn-SV ...
- ORACLE推导参数Derived Parameter介绍
Oracle的推导参数(Derived Parameters)其实是初始化参数的一种.推导参数值通常来自于其它参数的运算,依赖其它参数计算得出.官方文档关于推导参数(Derived Parameter ...
- paip.简化字-手写参考二简字..共98个
paip.简化字-手写参考二简字..共98个 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn.net/a ...
- SSH原理与运用(一)和(二):远程登录 RSA算法原理(一)和(二)
SSH原理与运用(一)和(二):远程登录 RSA算法原理(一)和(二) http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html ht ...
- Android消息推送(二)--基于MQTT协议实现的推送功能
国内的Android设备,不能稳定的使用Google GCM(Google Cloud Messageing)消息推送服务. 1. 国内的Android设备,基本上从操作系统底层开始就去掉了Googl ...
随机推荐
- mac 打开活动监视器(任务管理器)
打开方式 1.快捷键 command+option+esc 选择需要强制退出的app 2.通过菜单 需要查看完整的占用率 应用程序=>实用工具=〉活动监视器
- tzoj:3613 突破包围
http://www.tzcoder.cn/acmhome/problemdetail.do?&method=showdetail&id=3613 算出两两之间min距离,然后从起点开 ...
- 为知笔记快速隐藏左侧 快捷键 Esc
为知笔记快速隐藏左侧 快捷键 Esc
- Java-ArrayList常用API
返回值 方法 用途 boolean add(E e) 将指定的元素追加到此列表的末尾. void add(int index, E element) 在此列表中的指定位置插入指定的元素. boolea ...
- 解决vuex 状态管理mutations报错为:"[vuex] unknown mutation type: VIWE_NAV"
报错截图: 我的解决思路: 1.先检查gettes方向获取与actions提交是否畅通,同时专注检查code是否输错. 2.我查了别人多数是""在vuex中没有mutation,有 ...
- 【python】读取nc文件
读取nc文件前的准备,安装一些库 1.先把几个用到的库下载 Cartopy 简介与安装(转载) - 简书 (jianshu.com) Python Extension Packages for Win ...
- 前端使用JSEncrypt进行加密和解密
下载链接:https://www.bootcdn.cn/jsencrypt/ 使用方法: 1.引入jsencrypt 2.使用方法 // 加密公钥 const key = `xxxxxx`; func ...
- c++ vtdcm对于压缩模式文档图片的读取
//获取dcm数据结构,一下图像数据仅针对单通道8字节数据 DcmFileFormat fileformat; OFCondition oc = fileformat.loadFile(dcmPath ...
- MAC 关闭office自动更新提示
①.先进入到 /Library/Application Support/Microsoft/ 文件夹 (/Library/Application Support/Microsoft/) 点击 前往 - ...
- 上分之路 VP Codeforces Round #744 (Div. 3) ABDE
VP情况 4 / 8 AC: A,B,D,E1 60 minutes WA: C 4 127 +00:02 +00:28 -7 +00:58 +00:39 手速还在线 D pair排个 ...