感知机2 -- 随机梯度下降算法

声明:

1,本篇为个人对《2012.李航.统计学习方法.pdf》的学习总结。不得用作商用,欢迎转载,但请注明出处(即:本帖地址)。

2,因为本人在学习初始时有非常多数学知识都已忘记。因此为了弄懂当中的内容查阅了非常多资料。所以里面应该会有引用其它帖子的小部分内容,假设原作者看到能够私信我。我会将您的帖子的地址付到以下。

3,假设有内容错误或不准确欢迎大家指正。

4,假设能帮到你,那真是太好了。

概述

随意选取一超平面w0、b0,然后用随机梯度下降算法不断极小化L(w, b)。

Ps: 极小化的过程不是一次使M中的全部误分类点的梯度下降,而是随机选取一个误分类点使其梯度下降。

过程概述

1,对于L(w, b) = -yi(w·xi+ b)。L(w, b)的梯度例如以下:

▽w L(w, b) = - yixi

                   ▽b L(w, b) =- yi

            2,随机选取一个误分类点(xi, yi),对w,b更新:

w= w + ηyixi

                   b= b + ηyi

                   (η为步长。在统计学习中又称学习率)

这样,通过迭代能够期待L(w,b)不断下降,直到为0。

算法的第一种形式(感知机算法的原始形式)

输入:

训练数据集 T={(x1,y1),(x2,y2),...,(xn,yn)},当中x1∈Rn,yi={+1,-1},i=1, 2, ..., n,学习率η(0 < η<= 1)

输出:

w, b。感知机模型 f(x) = sign(w·x + b)

过程:

1, 选取初值w, b

2, 在训练集中取数据(xi,yi)

3。 若 yi(w·xi+ b) <= 0 即分类不对。则:

w= w + ηyixi

                  b= b + ηyi

                  注:由于此时分类不正确,所以yi= -1

4, 转至步骤2,直到训练数据集中无误分类点

总结:

直观上解释上面的过程就是:

若一个实例点被误分类,即:位于超平面的错误一側时,需调整w, b 的值,使分离超平面向该误分类点的一側移动。以降低该误分类点与超平面的距离。直至超平面越过该误分类点使其被正确分类。

例:

         输入:

训练数据集 x1= (3, 3)。x2 = (4, 3),为正实例点(被正确分类)。x3 = (1, 1)为负实例点

         求:

f(x)= sign(w·x + b)

ps:这里的w = (w(1),w(2)),x = (x(1), x(2))

         解:

1。  令η=1,并取初值w0 = 0, b0= 0

2,  对x1= (3, 3)。yi(w·xi + b) = 0,未能被正确分类,因此更新w, b

w = w + ηy1x1 = (3, 3)

b= b + ηy1 = 1

获得线性模型:w·x + b = 3x(1) + 3x(2) + 1

3,  检查该线性模型:

对于x1和x2,∵正确分类,∴不改动w,b

对于x3= (1, 1)。∵y3(w·x3 + b) < 0。∴被误分类,∴须要改动w, b


到此说明下:

a。  上面出现的yi不是f(x) = w·x + b的f(x),而是代表某个点xi是否被正确分类的值:

正确分类  :yi = 1

不对分类:yi = -1

所以。y1 = 1, y2 = 1, y3 = -1

所以,在上面的第三步中

对x1 和 x2

yi(w·xi + b) = 1*(3xi(1) + 3xi(2) + 1) > 0,被正确分类

对x3

y3(w·x3 + b) = -1*(3x3(1) + 3x3(2) + 1) = -1*(3*1 + 3*1 + 1) < 0,未被正确分类

b。  既然yi不是f(x),那y坐标用什么表示?

答案是:

xi(1) 表示xi点的x坐标

xi(2) 表示xi点的y坐标

c。  w·x1为内积

于是对于w = (0, 0),x1 = (3, 3):

w·x1 = 0*3 + 0*3 = 0

继续第三步,更新w, b:

w = w + ηy3x3 = (3, 3) + -1 * (1, 1) = (2, 2)

b= b + ηy3 = 1 + -1 = 0

于是,线性模型更新为:

w·x + b = 2x(1)+ 2x(2)

4。  迭代上述过程,直到:

w = (1, 1),b = -3

即,线性模型为:

x(1)+ x(2) – 3

此时对全部的点均有yi(w·xi+ b) > 0。无误分类点,于是损失函数达到最小。

终于求得:

分离超平面:x(1)+ x(2) – 3

感知机模型:f(x) =sign(x(1) + x(2) – 3)

附,迭代过程:


迭代次数


误分类点


w


b


w·x + b


0


0


0


0


1


x1


(3, 3)


1


3x(1) + 3x(2) + 1


2


x3


(2, 2)


0


2x(1) + 2x(2)


3


x3


(1, 1)


-1


x(1) + x(2) - 1


4


x3


(0, 0)


-2


-2


5


x1


(3, 3)


-1


3x(1) + 3x(2) - 1


6


x3


(2, 2)


-2


2x(1) + 2x(2) - 2


7


x3


(1, 1)


-3


x(1) + x(2) – 3


8


无(模型确定)


(1, 1)


-3


x(1) + x(2) – 3

         注:

上述过程中误分类点先后取:

x1,x3,x3,x3,x1,x3,x3

得到 w = (1, 1), b = -3

若误分类点先后取:

x1,x3,x3。x3,x2,x3,x3,x3,x1,x3,x3

                   那w = (2, 1), b = -5

可见:

感知机学习算法假设採用不同的初值或迭代不同的误分类点,那结果也不同。

感知机算法的收敛性

到这里有个问题:

怎么知道对一个数据集,我们可採用感知机学习策略?

答案就是:

在经过有限次搜索后。可找到将训练数据全然正确分类的超平面,也就是说算法具有收敛性。

Ps1:算法收敛意味着训练数据集线性可分

Ps2:线性支持向量机可解决上例有多个解的问题

算法的另外一种形式(感知机算法的对偶形式)

在原始形式中有公式:

w= w + ηyixi

                   b= b + ηyi

那么如果一共改动了n次,则w,b关于(xi(1),xi(2))的增量分别为:

aiyixi和 aiyi                    (ai= niη)

即:

若η=1,则ai就是第i个点因为误分类而进行更新的次数。即ai = ni

ai越大 => 实例点更新次数越多 =>越难正确分类,换句话说:这种实例对学习结果影响更大!

然后,感知机算法的对偶形式的算法例如以下:

    输入:

线性可分数据集 T={(x1,y1),(x2,y2),...,(xn,yn)},当中x1∈Rn。yi={+1,-1},i=1, 2, ..., n。学习率η(0 < η<= 1)

输出:

感知机模型 f(x) = sign( aiyixi·x + b)

过程:

1, 令a = 0。b = 0

2。  在训练集中取数据(xi,yi)

3,  若

则:

ai= ai + η

b= b + ηyi

4。  转至2直到无误分类数据

而因为对偶形式的训练实例仅以内积形式出现

所以我们预先将训练集中实例间的内积计算出来并以矩阵形式存储,即:产生Gram矩阵(格拉姆矩阵)

G = [ xi, yi ]n*n

样例

输入:

正样本点x1= (3, 3)。x2 = (4,3)

负样本点x3= (1, 1)

求:

感知机模型

         解:

1,  令ai= 0。i = 1, 2, 3。b = 0,η=1

2,  计算Gram矩阵

x1·x1  x1·x2  x1·x3

G =  x2·x1  x2·x2  x2·x3

x3·x1  x3·x2  x3·x3

3,  误分条件

yi( aiyixi·x + b) <= 0

时。參数更新

ai = ai +1

b = b + yi

4,  開始迭代

由于这里仅仅有3个点

所以:

= yi((a1y1x1·xi + a2y2x2·xi + a3y3x3·xi) + b)

= yi((a1x1·xi + a2x2·xi - a3x3·xi)+ b)

4.1,遍历全部的点。然而在对点x1(第一次迭代)时

由于1*(0 + 0*0 – 0*0) = 0  误分类

所以。

a1 = a1 +1 = 0 + 1 = 1

b = b + y1 = 0 + 1 =1

如今:

a1 = 1, a2= 0, a3 = 0, b = 1

4.2, 遍历全部的点

对点x1

y1*(1 *x1·x1+ 0 – 0 + 1) = 1*(18 + 1) > 0    被正确分类

x2同理,也被正确分类

对点x3

y3*(1 * x1·x3 + 0 – 0 + 1) = -1 * (6 +1) < 0  误分类

所以。

a3 = a3 +1 = 0 + 1 = 1

b = b + y3 = 1 - 1 =0

如今:

a1 = 1, a2= 0, a3 = 1, b = 0

4.3, 遍历全部的点。这一步中x1和x2被正确分类,而x3

y3*(1 *x1·x3+ 0 – 0 * x3·x3 + 0) = -1 * (6 -2) < 0  误分类

所以,

a3 = a3 +1 = 1 + 1 = 2

b = b + y3 = 0 - 1 =-1

如今:

a1 = 1, a2= 0, a3 = 2, b = -1

4.4, 同理,这一步中x1和x2被正确分类。而x3被误分类

所以,

a3 = a3 +1 = 3

b = b + y3 = -2

如今:

a1 = 1, a2= 0, a3 = 3, b = -2

4.5, 这一步中刚遍历到x1时就发现其被误分类

所以,

a1 = a1 +1 = 1 + 1 = 2

b = b + y1 = -2 + 1 =-1

如今:

a1 = 2, a2= 0, a3 = 3, b = -1

4.6,同理,遍历到x3时发现被误分类

更新a3和b之后,如今:

a1 = 2, a2= 0, a3 = 4, b = -2

4.7,同理,遍历到x3时发现被误分类

更新a3和b之后。如今:

a1 = 2, a2= 0, a3 = 5, b = -3

4.8。全被正确分类

5,得出结果:

w = 2x1 + 0x2-5x3 = 2(3,3) – 5(1,1) = (1,1)

b = -3

所以超平面为:

x(1) + x(2)-3 = 0

所以感知机模型为:

f(x) = sign(x(1) + x(2)-3)

随机梯度下降算法中感知机原始模式的代码演示样例

#-*-coding:utf-8-*-
# LANG=en_US.UTF-8
# 梯度下降算法 -- 感知机原始模式
# 文件名称:stochastic_gradient_descent.py

_list = [
    [1, 1, -1],
    [3, 3, 1],
    [4, 3, 1],
]

w1 = w2 = 0
b = 0
n = 1
_len = len(_list)

while [ 1 ]:
    num = 0

    for i in _list:
        x1 = i[0]
        x2 = i[1]
        y = i[2]
        judge = y * (w1*x1 + w2*x2 + b)
        if judge <= 0:
            w1 = w1 + y*x1
            w2 = w2 + y*x2
            b = b + y
        else:
            num += 1

    if num == _len:
        print("f(x) = sign( (%s,%s)*x + %s )" % (w1, w2, b) )
        break
时间: 2024-10-10 22:04:43

感知机2 -- 随机梯度下降算法的相关文章

神经网络与深度学习(2):梯度下降算法和随机梯度下降算法

本文总结自<Neural Networks and Deep Learning>第1章的部分内容. 使用梯度下降算法进行学习(Learning with gradient descent) 1. 目标 我们希望有一个算法,能让我们找到权重和偏置,以至于网络的输出y(x) 能够拟合所有的训练输入x. 2. 代价函数(cost function) 定义一个Cost function (loss function, objective function): 目标函数,如下: C: 被称为二次代价函数

监督学习:随机梯度下降算法(sgd)和批梯度下降算法(bgd)

线性回归 首先要明白什么是回归.回归的目的是通过几个已知数据来预测另一个数值型数据的目标值. 假设特征和结果满足线性关系,即满足一个计算公式h(x),这个公式的自变量就是已知的数据x,函数值h(x)就是要预测的目标值.这一计算公式称为回归方程,得到这个方程的过程就称为回归. 假设房子的房屋面积和卧室数量为自变量x,用x1表示房屋面积,x2表示卧室数量:房屋的交易价格为因变量y,我们用h(x)来表示y.假设房屋面积.卧室数量与房屋的交易价格是线性关系. 他们满足公式 上述公式中的θ为参数,也称为权

Hulu机器学习问题与解答系列 | 十七:随机梯度下降算法之经典变种

这是本周第二篇机器学习,也是Hulu面试题系列的第十七篇了~ 之前的所有内容都可以在菜单栏的"机器学习"中找到,愿你温故,知新. 今天的内容是 [随机梯度下降算法之经典变种] 场景描述 提到Deep Learning中的优化方法,人们都会想到Stochastic Gradient Descent (SGD),但是SGD并不是理想的万金油,反而有时会成为一个坑.当你设计出一个deep neural network时,如果只知道用SGD来训练,不少情况下你得到一个很差的训练结果,于是你放弃

随机梯度下降算法及其注释

# -*- coding:utf8 -*- import mathimport matplotlib.pyplot as plt def f(w, x): N = len(w) i = 0 y = 0 while i < N - 1: y += w[i] * x[i] i += 1 y += w[N - 1] # 常数项 return y def gradient(data, w, j): M = len(data) # 样本数 N = len(data[0]) i = 0 g = 0 # 当前

随机梯度下降算法求解SVM

测试代码(matlab)如下: clear; load E:\dataset\USPS\USPS.mat; % data format: % Xtr n1*dim % Xte n2*dim % Ytr n1*1 % Yte n2*1 % warning: labels must range from 1 to n, n is the number of labels % other label values will make mistakes u=unique(Ytr); Nclass=len

机器学习算法(优化)之一:梯度下降算法、随机梯度下降(应用于线性回归、Logistic回归等等)

本文介绍了机器学习中基本的优化算法-梯度下降算法和随机梯度下降算法,以及实际应用到线性回归.Logistic回归.矩阵分解推荐算法等ML中. 梯度下降算法基本公式 常见的符号说明和损失函数 X :所有样本的特征向量组成的矩阵 x(i) 是第i个样本包含的所有特征组成的向量x(i)=(x(i)1,x(i)2...,x(i)n) y(i) 第i个样本的label,每个样本只有一个label,y(i)是标量(一个数值) hθ(x(i)) :拟合函数,机器学习中可以用多种类型的拟合函数 θ 是函数变量,

梯度下降算法

首先定义几个符号: Xi vector[X]:input data Yi vector[Y]:output data h(X) hypothesis function 对于输入的数据给出预测值 Y is continous variation?regression problem(回归问题) Y is discrete variation?classification problem(分类问题) PART 1:线性回归 如图,蓝色的离散点是Xi,红色的线就是求出的回归函数. hypothesis

梯度下降算法的一点认识

昨天开始看Ng教授的机器学习课,发现果然是不错的课程,一口气看到第二课. 第一课 没有什么新知识,就是机器学习的概况吧. 第二课 出现了一些听不太懂的概念.其实这堂课主要就讲了一个算法,梯度下降算法.到了教授推导公式的时候感觉有点蒙,不过后来仔细想想,也大概理解了,这个算法并没有想象的晦涩.在这堂课中,梯度下降算法是为了解决线性回归问题的.视频中的例子是给你一堆训练数据,(房子面积和对应房价),如果此时给你一个没有出现过的房子面积数据,您能否给出正确的房价?解决思路是首先要看出来房子面积跟房价之

梯度下降法和随机梯度下降法的区别

这几天在看<统计学习方法>这本书,发现 梯度下降法 在 感知机 等机器学习算法中有很重要的应用,所以就特别查了些资料.  一.介绍       梯度下降法(gradient descent)是求解无约束最优化问题的一种常用方法,有实现简单的优点.梯度下降法是迭代算法,每一步需要求解目标函数的梯度向量.  二.应用场景      1.给定许多组数据(xi, yi),xi (向量)为输入,yi为输出.设计一个线性函数y=h(x)去拟合这些数据. 2.感知机:感知机(perceptron)为二类分类