机器学习PR:感知机模型
感知机是二类分类的线性分类模型,所谓二分类指的是输出的类别只有-1或1两种,所谓线性指的是输入的特征向量集合在特征空间中被超平面划分为相互分离的正负两类。感知机学习的目的正是为了求出将训练数据进行线性划分的分离超平面。
1、感知机模型:
定义:x是n维特征向量,y是判断的二元类别-1或1,判别函数f(x)=sign(wx+b),其中w和b是参数,w称为权重向量,b称为偏置,sign为符号函数。
说明:感知机模型的假设空间为定义在特征空间中的所有线性分类模型或线性分类器,即函数集合{f|f(x)=wx+b}。
几何解释: f(x)=wx+b=0,对应特征空间中的一个超平面,其中w是超平面法向量,b是超平面的截距,这个超平面将特征空间划分为两个部分,位于两部分的特征向量分别被称为正、负两类。
2、感知机学习策略(原则、标准):
感知机有未知参数w、b,为了使用感知机必须基于样本数据求出未知参数,这里选择“经验风险损失最小原则”。首先需要确定损失函数,直观地以错误分类点的总数为损失函数最为自然,但缺点是w、b参数空间不连续可导,不易于优化。因此选择损失函数为错误分类点到超平面的总距离。点到超平面的距离为|wx+b|/||w||,||w||为L2范数,那么错误分类的数据到超平面的距离可以表示为 -y(wx+b)/||w||, 因此损失函数表示为:
其中M是错误分类的点的集合,显然损失函数是非负的,如果没有错误分类的点,损失函数值为零。而且错误分类的点越少、误分类点离超平面越近,损失函数值就越小。
3、学习算法:对给定的样本集,求参数w、b使得损失函数最小化

损失函数的梯度:

算法1:随机梯度下降法

算法解释:
首先任意选取一个超平面w、b,然后用梯度下降法不断地极小化损失函数,极小化过程不是一次使M中所有误分类点的梯度下降,而是一次随机选取一个误分类点使其梯度下降。

其中
是步长,又称为学习率。这样通过迭代可以期待损失函数不断减少,直到0。直观上理解,当一个点被错误分类,即位于分离超平面的错误一侧时,则调整w,b的值,使超平面向该分类点的一侧移动,以减少该分类点与超平面间的距离,直至超平面越过该误分类点使其被正确分类。可以看出,使用不同的初始值或选取不同的误分类点顺序会导致不同的解。可以证明训练样本线性可分时这个算法经过有限步后是收敛的。
算法2:算法1的对偶形式

算法解释:
基本思想是将w、b表示为x、y的线性组合形式,通过求解其系数而求得w、b。根据上面的算法1,从假设w、b分别为零开始,经过多次迭代到最终获得解,最终w、b可以表示为:

这里
表示第i个点由于被误分而进行更新的次数,点更新的次数越多,意味着它离超平面越近,也就越难正确分类,也就是这样的点对学习结果的影响最大。将感知机表达式替换成上面的式子,就变成了先求解系数,最后直接计算w。在算法迭代过程中点之间的计算只涉及內积形式,故可以预先以Gram=[xixj]NXN矩阵存储。
机器学习PR:感知机模型的更多相关文章
- 机器学习入门 一、理解机器学习+简单感知机(JAVA实现)
首先先来讲讲闲话 如果让你现在去搞机器学习,你会去吗?不会的话是因为你对这方面不感兴趣,还是因为你觉得这东西太难了,自己肯定学不来?如果你觉的太难了,很好,相信看完这篇文章,你就会有胆量踏入机器学习这 ...
- 统计学习方法 --- 感知机模型原理及c++实现
参考博客 Liam Q博客 和李航的<统计学习方法> 感知机学习旨在求出将训练数据集进行线性划分的分类超平面,为此,导入了基于误分类的损失函数,然后利用梯度下降法对损失函数进行极小化,从而 ...
- 使用numpy实现批量梯度下降的感知机模型
生成多维高斯分布随机样本 生成多维高斯分布所需要的均值向量和方差矩阵 这里使用numpy中的多变量正太分布随机样本生成函数,按照要求设置均值向量和协方差矩阵.以下设置两个辅助函数,用于指定随机变量维度 ...
- (转)看穿机器学习(W-GAN模型)的黑箱
本文转自:http://www.360doc.com/content/17/0212/11/35919193_628410589.shtml# 看穿机器学习(W-GAN模型)的黑箱 201 ...
- 【机器学习】感知机学习算法(PLA)
感知机问题学习算法引入:信用卡问题 根据已知数据(不同标准的人的信用评级)训练后得出一个能不能给新客户发放信用卡的评定结果 解决该问题的核心思想扔为之前所讲到的梯度下降算法,对于更多条件的类似问题,首 ...
- 感知机模型到DNN模型
参考资料 感知机模型:https://www.cnblogs.com/pinard/p/6042320.html DNN:https://www.cnblogs.com/pinard/p/641866 ...
- 【感知机模型】手写代码训练 / 使用sklearn的Perceptron模块训练
读取原始数据 import pandas as pd import numpy as np in_data = pd.read_table('./origin-data/perceptron_15.d ...
- python机器学习——使用scikit-learn训练感知机模型
这一篇我们将开始使用scikit-learn的API来实现模型并进行训练,这个包大大方便了我们的学习过程,其中包含了对常用算法的实现,并进行高度优化,以及含有数据预处理.调参和模型评估的很多方法. 我 ...
- 吴裕雄 python 机器学习——人工神经网络与原始感知机模型
import numpy as np from matplotlib import pyplot as plt from mpl_toolkits.mplot3d import Axes3D from ...
随机推荐
- springmvc+spring-security+mybatis +redis +solar框架抽取
参考文章:Spring MVC 3 深入总结: 第二章 Spring MVC入门 —— 跟开涛学SpringMVC 参考博客:http://www.cnblogs.com/liukemng/categ ...
- 1.系统生命开发周期(SDLC)
哎,首先我恭喜我,这学期学了一门老师们都说非常重要,而学生们都说哪里重要的课,它就是与<软件工程>课齐名的<系统分析与设计>!!骚年,不背不记,你就死定了!! 首先俺领你认识一 ...
- mac ssh localhost
转自:http://blog.csdn.net/cwj649956781/article/details/37913637 mac 无法ssh localhost,错误提示:bash: /usr/lo ...
- Java中的队列Queue,优先级队列PriorityQueue
队列Queue 在java5中新增加了java.util.Queue接口,用以支持队列的常见操作.该接口扩展了java.util.Collection接口. Queue使用时要尽量避免Collecti ...
- PHP简介
PHP PHP是运行在服务器端的脚本,可以运行在UNIX.LINUX.WINDOWS.Mac OS下.PHP的特性包括:1. PHP 独特的语法混合了 C.Java.Perl 以及 PHP 自创新的语 ...
- ruby HTTPS请求
require 'uri'require 'net/http'require 'net/https' @toSend = { "date" => "2012-07- ...
- linux新增用户并增加sudo权限
创建用户.设置密码: useradd testuser 创建用户testuserpasswd testuser 给已创建的用户testuser设置密码 增加sudo权限: #vi /etc/sudoe ...
- module
扯淡的人 http://www.cnblogs.com/yuanchenqi/articles/5732581.html 不被调用的 要写在这下面 1 if __name__=="__ ...
- linux查找日志技巧
对于从事web开发的人员来说.服务器上的日志多如牛毛,如何快速从中找出所需信息非常重要,以下是我在工作中用到的查找日志的简单命令,希望能对您有所帮助: 工具/原料 linux SecureCR ...
- [转]Dynamic SQL & Stored Procedure Usage in T-SQL
转自:http://www.sqlusa.com/bestpractices/training/scripts/dynamicsql/ Dynamic SQL & Stored Procedu ...