2020-07-13
阅读量:
2771
感知机对偶形式的Python代码实现
'''
感知机(Perceptron)
1957年由Rosenblatt提出,是神经网络与支持向量机的基础。
感知机学习算法具有简单而易于实现的优点,分为原始形式和对偶形式
输入为实例的特征向量,输出为实例的类别,取+1和-1
感知机对应于输入空间中将实例划分为正负两类的分离超平面,属于判别模型
导入基于误分类的损失函数
利用梯度下降法对损失函数进行极小化
'''
import numpy as np
class Dual_Perceptron(object):
def __init__(self, X, y, eta = 1, n_iter = 100):
self.eta = eta
self.n_iter = n_iter
def fit(self, X, y):
self.errors_ = []
self.Remp_ = []
self.Gram = np.zeros((len(X), len(X)))
for i in np.arange(len(X)):
for j in np.arange(len(X)):
self.Gram[i,j] = self.Gram[j,i] = X[i] @ X[j] + 1
self.alpha = np.zeros(len(X))
self.b = 0
self._L = y * self.alpha @ self.Gram
n = 1
while np.any(self._L <= 0) and n <= self.n_iter:
error_id = np.argmax(self._L <= 0)
self.alpha[error_id] += self.eta
self.b += self.eta * y[error_id]
self._L = y * (y * self.alpha @ self.Gram)
Remp = -1 * np.sum(self._L[self._L <= 0])
print(f'Round {n}: alpha: {self.alpha}, Remp: {Remp}')
self.errors_.append(np.sum(self._L <= 0))
self.Remp_.append(Remp)
n += 1
self.w = self.alpha * y @ X
print(f'w: {self.w}, b: {self.b}')
def predict(self, X):
return np.sign(X @ self.w + self.b)
34.9110
2
3
关注作者
收藏
推荐帖子
0条评论
0条评论
0条评论

发表评论