首页 > 其他分享 >每天进步一点点《ML - 感知机》

每天进步一点点《ML - 感知机》

时间:2022-12-14 16:36:35浏览次数:48  
标签:src 函数 一点点 ML 样本 感知机 超平面 theta


一些前提的约定,还是沿用上篇文章的哈。先来致敬下男神。

每天进步一点点《ML - 感知机》_代价函数

一:感知机

感知机是一种线性二分类模型,其目的是找到能将训练数据线性可分的分离超平面。超平面线性模型为

每天进步一点点《ML - 感知机》_阶跃函数_02

联想起之前学到逻辑斯特回归的决策边界,Z = θ^T X , 当Z>0的时候,预测是1,当Z<0的时候,预测是0,有木有感觉跟感知机很类似啊,而且这个线性表达式,可以把b看做是θ^0, x(0)看做是1。那么其实在线性表达式上是和θ^T X一样的。
但是也仅仅只是类似,不是完全相同的,不同之处在于,逻辑回归是基于概率模型的,其激活函数是sigmoid函数,其值在0~1之间,为了分类就将y=h(x) > 0.5的样本归为1,y=h(x) < 0.5的样本归为0。而感知机不是基于概率模型,完全就是空间几何内的超平面划分,在超平面的一边是正样本(+1),在另一边是负样本(-1),其激活函数为y=sign(x) ,sign函数是一个单位阶跃函数,凡是x>0的,样本都是认为是(+1),小于0的都是认为是(-1)。因为感知机的模型如下:

每天进步一点点《ML - 感知机》_代价函数_03

在一些概念上,我们也说明下,在二维空间内,其超平面是一条直线,在三维空间下,其超平面是个平面,在跟高维度空间下,我们画不出来,我们就理解是一个线性的超平面。
其中w和b 称为模型的参数,w∈Rn称为权值,b 称为偏置,w⋅x 表示 w和x 的内积。诶?多说一两句,内积呢就是一个向量A在另一个向量B上的投影的长度乘以向量B的长度,下一篇文章讲解SVM的时候能用到,下面我还会画图继续讲解。

二:感知机详解

每天进步一点点《ML - 感知机》_感知机_04

w⋅x 表示 w和x 的内积,用二维坐标简要介绍下,x=(x1,x2),w=(w1,w2),看做是两个向量,x在w向量的投影向量是p,长度是‖p‖。因此 w⋅x = ‖x‖cos⁡(θ) ‖w‖ 。在超平面内,这个投影是有方向的,也就是取决于cos⁡(θ)的正负而已。

下面我们来看看那个超平面的表现:

每天进步一点点《ML - 感知机》_代价函数_05

在图中有红色的线就是我们的分类超平面,有两类样本,红色样本和蓝色样本,红色的线条是二维空间的超平面,蓝色的向量则是w是超平面的法向量,同x向量是正交的。所以每个样本要么在超平面的上方,要么在超平面的下方,也就是一边是(+1)的样本,一边是(-1)的样本。每个样本到超平面的举例,也就是在w向量上的投影,要么是正值,要么是负值。

三:代价函数:

由于感知机的激活函数是sign函数,单位阶跃函数,因此,给定某样本(X(i), Y(i)).,如果该样本能够被正确分类,那么可得到 ,(wx+b)* Y(i) > 0 , 相反,如果该样本被错误分类,正样本被预测为了负样本,负样本被预测为了正样本,那么可得,(wx+b)* Y(i) < 0。

因此,代价函数为

每天进步一点点《ML - 感知机》_代价函数_06

我们想的是,正确分类的样本,其代价值误差值为0,不做任何统计,只统计错误的样本集合,也就是错误分类的样本。M表示分类错误了的样本集合,分类错误了的样本(wx+b)* Y(i) < 0,由于我们习惯上是去最小化代价函数,因此乘以了-1,转成了最小化,其实吧,最大化和最小化,是可以相互转化的,就是乘以-1就转换了过来。这个在之前我讲解的那个极大似然和逻辑回归的代价函数关系的时候,也有这样的操作。

直观上是,错误分类的样本越多,代价函数越值大,其次呢,单个样本的误差值越大,,代价函数越值大。By the way,为啥这里没有体现单位阶跃函数?人家逻辑回归里面有是有sigmoid函数的。那是因为单位阶跃函数没有连续可导性,在0处不连续。其实吧,考虑代价函数,说白了也就是找到某个数学估算模型,用来估算你模型预测的准确度,怎么衡量这个准性的呢,没有统一标准,衡量准确度就行,最好呢还是可求导的(数学书很多很多求最优解/极值的解法都是设计求导)。

好了,代价函数给了,那么下一步就是最小化这个代价函数,我们还是用梯度下降法来表示。

每天进步一点点《ML - 感知机》_代价函数_07

这一步也很简单,自行推导即可,不多于赘述。感知机采用的是随机梯度下降法,也就是每次拿一个分错类的误差点进行梯度下降,因此上述式子就成了

每天进步一点点《ML - 感知机》_感知机_08

综合一下,梯度下降变成了:

每天进步一点点《ML - 感知机》_阶跃函数_09

我建议是把 wx+b 化成Z = θ^T X的形式,b=θ0,x(0) = 1,方便向量化运算。

四:举例说明
Y = wx+b 化成在二维坐标下x=(1, x1, x2), θ=(θ0, θ1, θ2),
给出几个分类点,找出一条可区分的面。

clc;clear all;close all;
set(0,'defaultfigurecolor','w') ;

src_x1 = [1.3,1.35,1.4,1.45,1.5, 1.32,1.33,1.42,1.43,1.46];
src_y1 = [3.32, 3.15, 3.12, 3.41, 3.26 ,3.3, 3.5, 3.2, 3.4, 3.6];
src_x2 = [3.3, 3.35, 3.4, 3.45, 3.5, 3.32,3.352,3.42,3.47,3.52];
src_y2 = [5.3, 5.5, 5.2, 5.4, 5.6, 5.32, 5.35, 5.24, 5.34, 5.61];

src_x = [src_x1, src_x2];
src_y = [src_y1, src_y2];
tag = [-ones(1, size(src_x1)(2)), ones(1, size(src_x2)(2))];

x = [ones(size(src_x)(2), 1), src_x', src_y'];
y = tag';
theta = (0.1* ones(3, 1));

itr = 100; %iteration times
rate = 0.02; %step
cost = zeros(1, itr);
for it=1:itr

tmp_result = x*theta;

% find every mistake sample
for i=1:1:size(tmp_result)(1)
tmp = sign(tmp_result(i, 1)) * y(i, 1);
if tmp < 0
% compute the cost value
cost(it) += -(tmp_result(i, 1) * y(i, 1));

% update each theta
theta += rate .* y(i, 1) * x(i, :)';
end;
end;

end;


figure();
subplot(1,2, 1);
hold on;

% 打点,画决策边界
scatter(src_x1, src_y1, 'b', 'linewidth', 3);
scatter(src_x2, src_y2, 'r', 'linewidth', 3);
xx = [0:0.1:6];
plot(xx, -((theta(1)/ theta(3)) + (theta(2)/theta(3)) .* xx), 'g', 'linewidth', 3);
xlim([0,6]);
ylim([2,6]);
%axis equal;
grid on;
xlabel('x1');
ylabel('x2');

% 画代价函数跟随迭代次数的收敛曲线
subplot(1,2, 2);
xx = (1:1:itr);
scatter(xx, cost, 'p', 'linewidth', 3);
xlim([0,itr]);
ylim([0,100]);
%axis equal;
grid on;
hold on;
xlabel('iteration times');
ylabel('cost value');

每天进步一点点《ML - 感知机》_阶跃函数_10


标签:src,函数,一点点,ML,样本,感知机,超平面,theta
From: https://blog.51cto.com/u_12419595/5937519

相关文章

  • 每天进步一点点《ML - 正则化代价函数》
    本系列MachineLearning的学习博文很大部分全是受教于AndrewNg的Stanford录制的ML视频,我的男神。一:欠拟合(Underfitting)与过拟合(Overfitting)机器学习的目的就是通过一......
  • 每天进步一点点《ML - 逻辑回归》
    一些前提的约定,还是沿用上篇文章的哈。先来致敬下男神。一:LogisticRegressionModel简介它是一种二分类的模型(Binary-Classification),属于监督学习的分类算法,也就是说它的......
  • 每天进步一点点《ML - 线性回归》
    本系列MachineLearning的学习博文很大部分全是受教于AndrewNg的Stanford录制的ML视频,我的男神。致敬男神!第一次写这样系列的博文,单纯是为了记录自己的所学,做好记录和......
  • 每天进步一点点《协方差矩阵的实践》
    详情见站内搜索《每天进步一点点《协方差矩阵的实践》》.docx上一次我们学习了PCA的过程,并且在最后还特意为大家介绍了协方差矩阵以及协方差矩阵的特征值和特征向量的作用......
  • 每天进步一点点《SVD用于压缩》
    详情请参考附件,站内搜索每天进步一点点《SVD用于压缩》今天给大家分享一个SVD用于数据压缩的例子。还是以图片作为距离,图片是有M*N个像素点组成的,在县线性代数中可以将......
  • 每天进步一点点《SVD学习》
    详情请见下载资源处,请搜索《每天进步一点点《SVD学习》.docx》一:一些搜罗的预备知识(搜罗的)1.1:特征值和特征向量矩阵:1)是一堆建立了某种运算时识别规则的数字2)是一列一列......
  • DML语言
    添加INSERT--插入语句--INSERTINTO`表名`(`字段1`,`字段2`,....)VALUES('值1','值2',......)(单值)--由于主键自增我们可以忽略,写插入语句,数据和字段一定要一一对应INSERT......
  • 【HTML基础篇001】超详细认识HTML标签种类
    ......
  • Meetup No.8 回顾 | OpenMLDB + MaxCompute:集成打通云上生态,高效构建 AI 应用
    OpenMLDBMeetupNo.8活动回顾会议内容OpenMLDB社区于2022年12月3日举行了第八期meetup,会议相关视频及资料如下:OpenMLDB卢冕,以《开源机器学习数据库OpenMLDB:线上......
  • 【Meetup 预告】OpenMLDB + MaxCompute:集成打通云上生态,高效构建 AI 应用
    2022年12月3日(周六)上午10:00-12:00,开源机器学习数据库OpenMLDB第八期Meetup将通过线上直播的形式展开。活动背景数据的爆发式增长为AI应用的繁荣提供了坚实的基础,而......