理解:感知机是分类模型,其单个特征向量最终训练结果是{+1,-1}。(这里不用输入空间,输出空间等术语).

函数:y=sign(wx+b)

参数解析:w和b是感知机的模型参数(不了解不要紧,往下看),w是权值(权值向量,x是个特征向量),b是偏置。sign(x)是一个函数,当x>=0时为+1,否则为-1。

几何解释:线性方程wx+b=0对应于空间中的一个超平面S,其中w是法向量,b是截距。这个超平面将空间划分为两部分,分别是正负两类。

咱们建立模型的时候就是求w和b。

x0到S的距离:y0=|wx0+b|/||w||
这里||w||是w的L2范数

L0范数是指向量中非0的元素的个数。(L0范数很难优化求解)

L1范数是指向量中各个元素绝对值之和

L2范数是指向量各元素的平方和然后求平方根

L1范数可以进行特征选择,即让特征的系数变为0.

L2范数可以防止过拟合,提升模型的泛化能力,有助于处理 condition number不好下的矩阵(数据变化很小矩阵求解后结果变化很大)

(核心:L2对大数,对outlier离群点更敏感!)

下降速度:最小化权值参数L1比L2变化的快

模型空间的限制:L1会产生稀疏 L2不会。

L1会趋向于产生少量的特征,而其他的特征都是0,而L2会选择更多的特征,这些特征都会接近于0。 ———————————————— 版权声明:本文为CSDN博主「rocling」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/rocling/article/details/90290576

那么我们很容易的就知道了,损失函数等于所有分类错误的点的y0之和。
损失函数: L(w,b)=∑|wx0+b|/||w||=-∑y0|wx0+b|/||w||(此时y0<0)

那么大家说,咱们做这个感知机算法,是不是损失函数越小越好?
答案是肯定的,那么咱们就需要得到,min L(w,b)

怎么找呢?
用梯度下降法。

“梯度下降算法的解释:梯度下降算法最速下降法又称为梯度法,它是解析法中最古老的一种,其他解析方法或是它的变形,或是受它的启发而得到的,因此它是最优化方法的基础。作为一种基本的算法,他在最优化方法中占有重要地位。”

咱们把所有的y0,x0看称矩阵,Y,X.那么这个损失函数可以看称
L(w,b)=-Y(wX+b)
咱们要求的是w和b(X,Y已知),分开求,咱们要求的是L(w,b)的最小值,所以把。所以对w和b分别求导。
dL/dw=-YX
dL/db=-Y

然后我们每算一次w和b的梯度(斜率或者是导数)就对w,b更新:
w->w+αxiyi
b->b+αyi
α步长,也就是学习率(梯度下降每次的变化程度),(xi,yi)是随机的误分类点。我们期望损失函数一直减小,直到我们满意。

算法的收敛性:经过有限次迭代可以得到一个完全正确划分数据集的超平面(感知机模型)。为了方便推导我们将偏置b并入权重w,记作w~=(wT,b)T
同样也将输入的向量扩充,加进常数1,记作x~=(xT,1)T
此时x~w~=wx+b

Novikoff定理:

有兴趣就记一下,不会的话我可以给解释的。(笔写拍照)

感知机学习算法的对偶形式:将w,b表示为xi和yi的线性组合形式,通过求其系数而求w和b,不失一般性,对误分类点(xi,yi)通过:
w+αxiyi->w
b+αyi->b
来逐步修改w,b,设修改n次,w,b的增量为βiyixi和βiyi,βi=αini
那么最后的w,b为(第一次w0=b0=0)
w=∑βiyixi
b=∑βiyi
那么Y=sign(∑βiyixiX+b)

于是出现算法:

为了方便我们可以把Gram矩阵先求出来:
G=[xi*X]
其实看不懂没关系,看下面这个你就懂了。

代码:(建议自己跟着写写)
原始形式的感知机:

import random
import numpy as np
import matplotlib.pyplot as plt
def sign(x):if x>0:return 1else:return 0
def train(train_num,train_datas,lr):w=[0,0]b=0#第一轮w和b都设置成0for i in range(train_num):x=random.choice(train_datas)#随机选择一个x1,x2,y=x#拿出数据if(y*(w[0]*x1+w[1]*x2+b)<=0):#if(y*sign((w[0]*x1+w[1]*x2+b))<=0):#进入条件w[0]+=x1*y*lrw[1]+=x2*y*lrb+=lr*yreturn b,w
def plot_points(train_datas,w,b):plt.figure()#创建自定义图像x1 = np.linspace(0, 8, 100)#numpy.linspace(start,end,num)#在start和end之间生成均匀的num个数据x2 = (-b-w[0]*x1)/w[1]#通过咱们的公式x1w1+x2w2+b=0求分界线plt.plot(x1, x2, color='r', label='y1 data')#画直线datas_len=len(train_datas)#数据个数for i in range(datas_len):if(train_datas[i][-1]==1):#-1是拿第1个数据里的最后一个数据plt.scatter(train_datas[i][0],train_datas[i][1],s=50)  #画点else:plt.scatter(train_datas[i][0],train_datas[i][1],marker='x',s=50)  plt.show()if __name__=='__main__':train_data1 = [[1, 3, 1], [2, 2, 1], [3, 8, 1], [2, 6, 1]]  # 正面train_data2 = [[2, 1, -1], [4, 1, -1], [6, 2, -1], [7, 3, -1]]  #反面train_datas = train_data1 + train_data2  #整体数据集b,w=train(train_num=500,train_datas=train_datas,lr=0.1)#train_num是训练次数,lr是步数。plot_points(train_datas,w,b)#画图,以后慢慢讲

对偶形式的感知机:

import random
import numpy as np
import matplotlib.pyplot as plt
def train(train_num,train_datas,lr):w=0.0#下面求w会需要float64类型的变量b=0#初始化data_len=len(train_datas)#求数据个数alpha = [0 for i in range(data_len)]#创建和数据个数数量元素的alpha矩阵train_array = np.array(train_datas)gram = np.matmul(train_array[:,0:-1] , train_array[:,0:-1].T)#求gram看我那张图for index in range(train_num):value=0i = random.randint(0,data_len-1)#生成一个随机数范围为[0,data_len-1]yi=train_array[i,-1]for j in range(data_len):value+=alpha[j]*train_array[j,-1]*gram[i,j]value+=bvalue=yi*value#以上就是误分条件的左边if(value<=0):alpha[i]=alpha[i]+lrfor i in range(data_len):w+=alpha[i]*train_array[i,0:-1]*train_array[i,-1]b+=alpha[i]*train_array[i,-1]return w,b,alpha,gram
def draw(train_datas,w,b):plt.figure()x1 = np.linspace(0, 8, 100)x2 = (-b-w[0]*x1)/w[1]#根据式子反推plt.plot(x1, x2, color='r', label='y1 data')datas_len=len(train_datas)for i in range(datas_len):if(train_datas[i][-1]==1):plt.scatter(train_datas[i][0],train_datas[i][1],s=50)  else:plt.scatter(train_datas[i][0],train_datas[i][1],marker='x',s=50)  plt.show()if __name__=='__main__':train_data1 = [[1, 3, 1], [2, 2, 1], [3, 8, 1], [2, 6, 1]]  #正例train_data2 = [[2, 1, -1], [4, 1, -1], [6, 2, -1], [7, 3, -1]]  #反例train_datas = train_data1 + train_data2w,b,alpha,gram=train(train_num=500,train_datas=train_datas,lr=0.1)draw(train_datas,w,b)

需要Novikoff求导的话说一下昂,我感觉这些定理,死记硬背应该行。

机器学习初级入门(一)感知机相关推荐

  1. 机器学习初级入门(二)KNN

    k近邻算法(KNN)是一种基本的分类和回归算法. 理解:给定一个训练好的数据集,输入一个新的数据,在训练好的数据集中能找到与新的数据最邻近的k个数据.如果做分类的话,那就是这k个数据多数属于某个类,那 ...

  2. 统计学习方法 pdf_机器学习的入门宝典!《统计学习方法》的代码实现

    李航:毕业于日本京都大学电气电子工程系,日本东京大学获得计算机科学博士学位.1990年至2001年就职于日本NEC 公司中央研究所,任研究员,2001年至2012年就职于微软亚洲研究院,任高级研究员与 ...

  3. 1 监督学习与非监督学习简介--机器学习基础理论入门

    1 监督学习与非监督学习简介–机器学习基础理论入门 1.1 机器学习基本概念 什么是机器学习 机器学习: 机器学习(machine learning,ML)是一门多领域交叉学科,设计概率论.统计学.逼 ...

  4. 深度学习-机器学习从入门到深入全套资源分享

    深度学习.机器学习从入门到深入,全套资源分享.涉及深度学习.机器学习数学.算法基础理论.实战和工程开发相关最佳资源.深度学习常用模型相关教程,深度学习模型优化.调参相关技巧:深度学习常用的框架,公开数 ...

  5. PyTorch机器学习从入门到实战

    人工智能入门实践, 轻松玩转PyTorch框架. 校宝在线出品的书籍<PyTorch机器学习从入门到实战>发售了! 购书链接: 内容简介 近年来,基于深度学习的人工智能掀起了一股学习的热潮 ...

  6. AI基础:机器学习简易入门

    0.导语 Machine Learning(机器学习)是研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能.它是人工智能的核心,是使计算机具有智 ...

  7. 【重磅】Google官方推出了免费的、中文的、机器学习初级课程。

    2019独角兽企业重金招聘Python工程师标准>>> 机器学习(Machine Learning, ML)是一门多领域交叉学科,涉及概率论.统计学.逼近论.凸分析.算法复杂度理论等 ...

  8. Jeecg 初级入门

    Jeecg 初级入门 1.部署jeecg 1.1.下载jeecg 请在jeecg 发布地址下载jeecg工程 1.2 导入myeclipse8.5 按照如下视图选择jeecg项目存放路径然后导入项目工 ...

  9. 【技术培训】招收Jeecg门徒 ---javaweb初级入门班

    招收Jeecg门徒[javaweb初级入门班] 最近准备带徒弟,带些人才出来,我带徒弟的理念是实践为王,在实践中掌握原理,积累经验. 我带徒弟的方向是JAVA WEB,掌握各种主流框架.(后期会开展j ...

最新文章

  1. 《BI项目笔记》创建标准维度、维度自定义层次结构
  2. 014——数组(十四)array_reduce array_slice array_splice array_sum
  3. java8 虚拟机调优_Java虚拟机调优(八)-典型配置举例2
  4. 201506251117_《react——所需知识、主要技术》
  5. 鸿蒙系统出来没有,呜呼哀哉!历尽艰辛研发出鸿蒙系统,却无厂商敢用
  6. Yii 中Criteria常用方法
  7. 第十二节:WebApi自动生成在线Api文档的两种方式
  8. Python3.x中数据随机重排基本方法
  9. linux svn 客户端安装配置
  10. python数据挖掘orange
  11. 【Linux开发】linux设备驱动归纳总结(四):3.抢占和上下文切换
  12. Vue 使用Echarts
  13. 体验Solaris 中文斥地者x86版装置
  14. 用c语言 在图形状态下 编动画,用C语言实坝图形动画设计.pdf
  15. 使用ASProfile分析可变剪切事件
  16. AppsFlyer的测试
  17. 用selenium全自动化爬取教务系统作业清单
  18. python如何调用谷歌搜图api_python爬虫——selenium+chrome使用代理
  19. 成为DevOps/SRE工程师有多难?看看这份必备技能清单
  20. easypoi教程_easypoi 读取 Excel 简单应用

热门文章

  1. windows程序静默安装
  2. PLM 问卷调查表-A 关于公司
  3. Composite UI Application Block(CAB)
  4. docker 容器连接宿主机mysql问题
  5. ztz11的noip模拟赛T1:愤怒的XiaoX
  6. template模板函数
  7. Terracotta - 分布式共享对象
  8. [转载]要死的人都后悔些什么
  9. 【转】ARM汇编伪指令介绍
  10. C++dll导出类的方式__declspec(dllexport)