【机器学习】【感知机-3】感知机(Perceptron)学习算法的对偶形式的Python实现

1.感知机学习算法的对偶形式的讲解+数学求解过程展示

详见,前面博客的详解:点我

2.感知机学习算法的对偶形式的python实现

完全人肉出品,代码如下所示。

2.1知识点

在实现时要意识到,对偶形式中训练实例仅仅以内积的形式出现。为了方便,可以预先将训练集中实例间的内积计算出来并以矩阵的形式存储,这个矩阵就是所谓的Gram Matrix,如下所示:

import numpy as np
X = np.array([[3,3],
              [4,3],
              [1,1]])
X_GM = np.dot(X,X.T)
print(X_GM)
#[[18 21  6]
# [21 25  7]
# [ 6  7  2]]

2.2数学求解过程展示的python代码

这个是为了展示感知机学习算法的对偶形式的数学求解过程的代码,不是对偶形式的最精简的代码,最精简的代码详见2.4.

# -*- coding: utf-8 -*-
"""
@author: 蔚蓝的天空tom
Talk is cheap, show me the code
Aim:实现感知机学习算法的对偶形式
"""
import numpy as np
class CPerceptronDual(object):
    '''实现感知机学习算法的对偶形式
    '''
    def __init__(self, train_samples, Y):
        self.X = train_samples
        self.Y = Y
        self.GM = np.dot(self.X, self.X.T)
        self.A = [] #每个x的权值
        self.b = 0 #bias偏置
        self.alpha = 1.0 #学习率,即学习步长
        self.W = []
        self.cnt = 0
        
        print('特征集X:\n', self.X)
        print('分类集Y:\n', self.Y)
        print('特征集的Gram Matrix:\n', self.GM)
        
        self.study()
        
    def study(self):
        '''
        感知机学习算法的对偶形式的实现
        '''
        N = np.shape(self.X)[0] #训练样本集的样本个数
        if 0 == np.shape(self.A)[0]: #第一次学习,初始化A和b都为0
            self.A = np.full(shape=(N,), fill_value=0.0)
            self.b = 0
        #感知机学习
        misclassify_cnt = 0
        self.cnt += 1
        print('=======================第%d次学习'%self.cnt)
        for i in range(N):
            dual_efunc = lambda a,y,dot : a*y*dot
            dual_func = np.frompyfunc(dual_efunc, 3
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值