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