-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathatom.xml
90 lines (52 loc) · 18.6 KB
/
atom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>露从今夜白,月是故乡明</title>
<subtitle>关注科技与人文,在这个世界留下点痕迹</subtitle>
<link href="/atom.xml" rel="self"/>
<link href="http://tobinzuo.github.io/"/>
<updated>2018-11-19T11:27:03.974Z</updated>
<id>http://tobinzuo.github.io/</id>
<author>
<name>Tobin</name>
</author>
<generator uri="http://hexo.io/">Hexo</generator>
<entry>
<title>关于我</title>
<link href="http://tobinzuo.github.io/2018/11/17/aboutme/"/>
<id>http://tobinzuo.github.io/2018/11/17/aboutme/</id>
<published>2018-11-17T15:48:12.000Z</published>
<updated>2018-11-19T11:27:03.974Z</updated>
<content type="html"><![CDATA[<p>  你好,我现在硕士就读于<strong><em>浙江大学计算机科学与技术学院</em></strong>。正在从事<strong><em>机器学习,数据挖掘,深度学习</em></strong>相关的学习和工作。本博客使用的是<a href="https://hexo.io/zh-cn/" target="_blank" rel="noopener">hexo</a>开源工具,主题为<a href="https://github.com/yscoder/hexo-theme-indigo" target="_blank" rel="noopener">indigo</a>,感谢这个开源的世界。我建这个博客的初衷想有个记录自己想法的平台,Just for fun。<br>  <strong> 欢迎联系我哈,世界会因为我们的存在而变得更美好~ </strong></p><div align="center"><img src="/2018/11/17/aboutme/weixin.png" width="40%" height="40%"></div>]]></content>
<summary type="html">
<p>&emsp;&emsp;你好,我现在硕士就读于<strong><em>浙江大学计算机科学与技术学院</em></strong>。正在从事<strong><em>机器学习,数据挖掘,深度学习</em></strong>相关的学习和工作。本博客使用的是<a href="http
</summary>
</entry>
<entry>
<title>[机器学习] 感知机</title>
<link href="http://tobinzuo.github.io/2018/11/16/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E4%B9%8B%E6%84%9F%E7%9F%A5%E6%9C%BA/"/>
<id>http://tobinzuo.github.io/2018/11/16/机器学习之感知机/</id>
<published>2018-11-16T15:48:12.000Z</published>
<updated>2018-11-17T05:39:10.918Z</updated>
<content type="html"><![CDATA[<h3 id="什么是感知机"><a href="#什么是感知机" class="headerlink" title="什么是感知机"></a>什么是感知机</h3><p>定义:假设输入空间(特征空间)$X \subseteq R^n$,输出空间是$Y={-1,+1}$,输入$x \in X$,表示实例的特征向量,对于输入空间(特征空间)中的点,输出$y \in Y$是表示实例的类别。由输入空间到输出空间的如下函数,$f(x)=sign(w \cdot x +b)$称为感知机,其中$w$和$b$称为感知机的参数。$sign$函数如下。<br>$$sign(x)=\begin{cases} +1, & x>=0\\-1, & x<0 \end{cases}$$</p><h3 id="感知机数学原理"><a href="#感知机数学原理" class="headerlink" title="感知机数学原理"></a>感知机数学原理</h3><h4 id="线性可分"><a href="#线性可分" class="headerlink" title="线性可分"></a>线性可分</h4><p>对于给定的一个数据集$T={(x_1,y_1),(x_2,y_2),…(x_n,y_n)}$,其中,$x_i \in X \subseteq R^n , y \in Y={-1, +1}, i=1,2,…,N$,如果存在某个超平面$S: w \cdot x+b = 0$,能将正负样例分到$S$两侧,则说明数据集$T$是线性可分的,那么接下来就是要求这个超平面$S$的表达式。</p><h4 id="损失函数"><a href="#损失函数" class="headerlink" title="损失函数"></a>损失函数</h4><p>数据集$T$中任意一个误分类点到这个超平面$S$的距离之和为:<br>$$\frac{1}{\Vert w \Vert}\sum_{x_i \in M}{\vert w \cdot x_i+b \vert}$$<br>其中$M$为误分类点的集合。如何去掉绝对值呢?我们注意到$y_i$的取值是有好处的。对于误分类点来说$y_i$的符号和$w \cdot x_i+b$相反。且$y_i$取值+1,-1。则我们可以将上式转换成:<br>$$- \frac{1}{\Vert w \Vert}\sum_{x_i \in M}{y_i (w \cdot x_i+b)}$$<br>确定损失函数时,不考虑$\frac{1}{\Vert w \Vert}$。</p><ul><li><strong><em>Q:感知机损失函数确定过程中的系数$\frac{1}{\Vert w \Vert}$,为什么可以忽略?</em></strong></li><li>1)感知机的损失函数时基于误分类的,$L2$范数项不会影响$y_i (w \cdot x_i+b)$的正负判断,所以$\frac{1}{\Vert w \Vert}$对感知机学习算法的中间过程可有可无</li><li>2)$\frac{1}{\Vert w \Vert}$不影响感知机学习算法的最终结果,当所有输入被正确分类时,不存在误分类的点,此时损失函数为零,缺少此项并不会影响感知机损失函数的收敛</li><li>3)我思考的是即使缺少这个项,损失函数也能对线性可分数据在有限次学习后正确分开。李航书上有证明。</li><li>4)权重$w$是一个向量,$\frac{1}{\Vert w \Vert}$的大小不会影响向量的方向,确定超平面是通过确定法向量$w$和截距$b$来确定的,而的大对权重$w$的方向没有任何影响,所以可以固定$\frac{1}{\Vert w \Vert}$|为1或者不考虑。</li></ul><h3 id="算法步骤"><a href="#算法步骤" class="headerlink" title="算法步骤"></a>算法步骤</h3><p>输入:训练数据$T={(x_1,y_1),(x_2,y_2),…(x_n,y_n)}$,其中,$x_i \in X \subseteq R^n , y \in Y={-1, +1}, i=1,2,…,N$,;学习率$\eta(0<\eta<=1)$;<br>输出:$w,b$;感知机模型$f(x)=sign(w \cdot x+b)$。</p><ul><li>1)选取初值$w_0,b_0$</li><li>2)在训练集中选取数据$(x_i,y_i)$</li><li>3)如果$y_i (w \cdot x_i+b)<0$,$w \leftarrow w+ \eta y_ix_i;b \leftarrow b+ \eta y_i $</li><li>4)转至 2),直至训练集中没有误分类点</li></ul><h3 id="代码实现"><a href="#代码实现" class="headerlink" title="代码实现"></a>代码实现</h3><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#初始化</span></span><br><span class="line"><span class="keyword">import</span> numpy <span class="keyword">as</span> np</span><br><span class="line"><span class="keyword">import</span> random</span><br><span class="line"><span class="keyword">import</span> matplotlib <span class="keyword">as</span> mpl</span><br><span class="line"><span class="keyword">import</span> matplotlib.pyplot <span class="keyword">as</span> plt</span><br><span class="line">datas = [[(<span class="number">1</span>,<span class="number">2</span>),<span class="number">-1</span>],[(<span class="number">2</span>,<span class="number">1</span>),<span class="number">-1</span>],[(<span class="number">2</span>,<span class="number">2</span>),<span class="number">-1</span>],[(<span class="number">1</span>,<span class="number">4</span>),<span class="number">1</span>],[(<span class="number">3</span>,<span class="number">3</span>),<span class="number">1</span>],[(<span class="number">5</span>,<span class="number">4</span>),<span class="number">1</span>],[(<span class="number">3</span>, <span class="number">3</span>), <span class="number">1</span>], [(<span class="number">4</span>, <span class="number">3</span>), <span class="number">1</span>], [(<span class="number">1</span>, <span class="number">1</span>), <span class="number">-1</span>],[(<span class="number">2</span>, <span class="number">3</span>), <span class="number">-1</span>], [(<span class="number">4</span>, <span class="number">2</span>), <span class="number">1</span>]]</span><br><span class="line"></span><br><span class="line"><span class="comment">#数据展示</span></span><br><span class="line">fig = plt.figure(<span class="string">'Input Figure'</span>)</span><br><span class="line">mpl.rcParams[<span class="string">'xtick.labelsize'</span>] = <span class="number">16</span> <span class="comment"># x轴的字体大小</span></span><br><span class="line">mpl.rcParams[<span class="string">'ytick.labelsize'</span>] = <span class="number">16</span></span><br><span class="line">plt.rcParams[<span class="string">'font.sans-serif'</span>]=[<span class="string">'SimHei'</span>] <span class="comment"># 用来正常显示中文标签</span></span><br><span class="line"></span><br><span class="line">xArr = np.array([x[<span class="number">0</span>] <span class="keyword">for</span> x <span class="keyword">in</span> datas])</span><br><span class="line">yArr = np.array([x[<span class="number">1</span>] <span class="keyword">for</span> x <span class="keyword">in</span> datas])</span><br><span class="line">xPlotx,xPlotx_,xPloty,xPloty_ = [],[],[],[]</span><br><span class="line"><span class="keyword">for</span> i <span class="keyword">in</span> range(len(datas)):</span><br><span class="line"> y = yArr[i]</span><br><span class="line"> <span class="keyword">if</span> y><span class="number">0</span>:</span><br><span class="line"> xPlotx.append(xArr[i][<span class="number">0</span>])</span><br><span class="line"> xPloty.append(xArr[i][<span class="number">1</span>])</span><br><span class="line"> <span class="keyword">else</span>:</span><br><span class="line"> xPlotx_.append(xArr[i][<span class="number">0</span>])</span><br><span class="line"> xPloty_.append(xArr[i][<span class="number">1</span>])</span><br><span class="line">plt.title(<span class="string">'Perception 输入数据'</span>)</span><br><span class="line">plt.grid(<span class="keyword">True</span>)</span><br><span class="line">pPlot1,pPlot2 = plt.plot(xPlotx,xPloty,<span class="string">'b+'</span>,xPlotx_,xPloty_,<span class="string">'rx'</span>)</span><br><span class="line">plt.legend(handles = [pPlot1,pPlot2],labels=[<span class="string">'Positive Sample'</span>,<span class="string">'Negtive Sample'</span>],loc=<span class="string">'upper center'</span>)</span><br><span class="line">plt.show()</span><br></pre></td></tr></table></figure><figure class="image-bubble"> <div class="img-lightbox"> <div class="overlay"></div> <img src="/2018/11/16/机器学习之感知机/output_1.png" alt="output_1.png" title=""> </div> <div class="image-caption">output_1.png</div> </figure><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#感知机算法</span></span><br><span class="line">w = np.array([<span class="number">1</span>, <span class="number">1</span>])</span><br><span class="line">b = <span class="number">3</span></span><br><span class="line">eta = <span class="number">0.5</span></span><br><span class="line"><span class="keyword">while</span> <span class="keyword">True</span>:</span><br><span class="line"> num = <span class="number">0</span></span><br><span class="line"> <span class="keyword">for</span> i <span class="keyword">in</span> range(len(datas)):</span><br><span class="line"> num = num + <span class="number">1</span></span><br><span class="line"> x = xArr[i]</span><br><span class="line"> y = yArr[i]</span><br><span class="line"> z = y*(np.dot(w,x)+b)</span><br><span class="line"> <span class="keyword">if</span> z <= <span class="number">0</span>:</span><br><span class="line"> w = w+eta*y*x</span><br><span class="line"> b = b+eta*y</span><br><span class="line"> num = <span class="number">0</span> <span class="comment"># 只要更新一次,强制令num=0,否则到最后一个数据不满足条件更新后,会直接跳出,而此时并不满足条件。</span></span><br><span class="line"> <span class="keyword">break</span></span><br><span class="line"> <span class="keyword">if</span> num >= len(datas):</span><br><span class="line"> <span class="keyword">break</span></span><br><span class="line">fig = plt.figure(<span class="string">'Output Figure'</span>)</span><br><span class="line">plt.title(<span class="string">'Perception 输出平面'</span>)</span><br><span class="line">x0 =np.linspace(<span class="number">0</span>,<span class="number">5</span>,<span class="number">100</span>)</span><br><span class="line">w0 = w[<span class="number">0</span>]</span><br><span class="line">w1 = w[<span class="number">1</span>]</span><br><span class="line">x1 = -(w0/w1)*x0-b/w1</span><br><span class="line">plt.xlabel(<span class="string">'x0'</span>,fontsize=<span class="number">15</span>)</span><br><span class="line">plt.ylabel(<span class="string">'x1'</span>,fontsize=<span class="number">15</span>)</span><br><span class="line">plt.plot(x0,x1,<span class="string">'k'</span>, lw=<span class="number">1</span>)</span><br><span class="line">pPlot1,pPlot2 = plt.plot(xPlotx,xPloty,<span class="string">'b+'</span>,xPlotx_,xPloty_,<span class="string">'rx'</span>)</span><br><span class="line">plt.legend(handles = [pPlot1,pPlot2],labels=[<span class="string">'Positive Sample'</span>,<span class="string">'Negtive Sample'</span>],loc=<span class="string">'upper right'</span>)</span><br><span class="line">plt.annotate(<span class="string">'Output Hyperplane'</span>,xy=(<span class="number">2.0</span>,<span class="number">3.0</span>),xytext=(<span class="number">1.7</span>,<span class="number">3.5</span>)) <span class="comment"># 图形注释 # xy设置箭头尖的坐标,xytext设置注释内容显示的起始位置</span></span><br><span class="line"></span><br><span class="line">plt.show()</span><br></pre></td></tr></table></figure><figure class="image-bubble"> <div class="img-lightbox"> <div class="overlay"></div> <img src="/2018/11/16/机器学习之感知机/output_2.png" alt="output_2.png" title=""> </div> <div class="image-caption">output_2.png</div> </figure><ul><li>李航,《统计学习方法》</li><li><a href="https://blog.csdn.net/u014630987/article/details/78670258" target="_blank" rel="noopener">Hexo中如何配置mathjax</a></li><li><a href="http://kubicode.me/2016/03/18/Hexo/The-Trick-about-Hexo-Support-MutliLine-Equation-using-Mathjax/" target="_blank" rel="noopener">Hexo中如何输入跨行公式</a></li><li><a href="https://blog.csdn.net/xjm850552586/article/details/84101345" target="_blank" rel="noopener">Hexo无法加载本地图片</a></li></ul>]]></content>
<summary type="html">
<h3 id="什么是感知机"><a href="#什么是感知机" class="headerlink" title="什么是感知机"></a>什么是感知机</h3><p>定义:假设输入空间(特征空间)$X \subseteq R^n$,输出空间是$Y={-1,+1}$,输入$x
</summary>
<category term="机器学习" scheme="http://tobinzuo.github.io/tags/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/"/>
<category term="神经网络" scheme="http://tobinzuo.github.io/tags/%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C/"/>
</entry>
<entry>
<title>更新日志</title>
<link href="http://tobinzuo.github.io/2018/11/15/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97/"/>
<id>http://tobinzuo.github.io/2018/11/15/更新日志/</id>
<published>2018-11-15T15:48:12.000Z</published>
<updated>2018-11-18T08:26:11.629Z</updated>
<content type="html"><![CDATA[<p><strong> 2018/11/17 </strong></p><ul><li>上线评论系统,增加了gitment enable ,更改了gitment.ejs,按照page.date来区分评论。</li><li>缩减了部分图片大小。</li><li>解决了部分日志无法登陆评论的问题,原因是文件名称中带有括号<br><a href="https://www.jianshu.com/p/57afa4844aaa" target="_blank" rel="noopener">Gitment评论功能接入踩坑教程</a><br><a href="https://blog.csdn.net/wardseptember/article/details/82828391" target="_blank" rel="noopener">解决gitment无法登陆评论问题(Object ProgressEvent)</a><br><a href="https://jingyan.baidu.com/article/2f9b480de2b5b341cb6cc2be.html" target="_blank" rel="noopener">NexT主题使用gitment评论系统</a></li></ul><p><strong> 2018/11/18 </strong></p><ul><li>上线valine评论插件,gitment使用不便。</li><li>Valine 目前使用的是Gravatar 作为评论列表头像。请自行登录或注册Gravatar,然后修改自己的头像。评论的时候,留下在Gravatar注册时所使用的邮箱即可。<br><a href="https://valine.js.org/quickstart.html" target="_blank" rel="noopener">Valine</a><br><a href="https://en.gravatar.com/" target="_blank" rel="noopener">Gravatar</a></li></ul>]]></content>
<summary type="html">
<p><strong> 2018/11/17 </strong></p>
<ul>
<li>上线评论系统,增加了gitment enable ,更改了gitment.ejs,按照page.date来区分评论。</li>
<li>缩减了部分图片大小。</li>
<li>解决了部分日
</summary>
</entry>
</feed>