统计学习方法-感知机

感知机是二类分类的线性分类模型,其输入为实例的特征向量,输出为实例的类别,取+1和-1 二值。感知机对应输入空间中将实例划分为正负两类的分离超平面,属于判别模型。感知机学习旨在求出将训练数据进行线性划分的分离超平面。为此,导入基于误分类的损失函数,利用梯度下降法对损失函数进行极小化,求得感知机模型。感知机是神经网络和支持向量机的基础。

import numpy as np

"""感知机学习算法的原始形式"""
def Perceptron(x, y, delta = 1, maxIter=100):
	w = np.zeros(x.shape[1])
	b = 0
	iter = 0 
	while (iter<maxIter):
		flag = True
		for i in range(len(x)):
			if y[i]*(np.dot(w, x[i]) +b)<=0:
				flag = False
				w = w + delta*y[i]*x[i]
				b = b + delta*y[i]
		if flag == True:
			break
		print("iteration number %d" % iter)
		iter += 1

	return w, b

w, b =Perceptron(np.array([[3,3],[4,3],[1,1], [3,4]]), np.array([1,1,-1,-1]), delta=1)
print(w,b)

"""感知机学习算法的对偶形式"""
def Perceptron1(x, y, delta = 1, maxIter=100):
	alpha = np.zeros(x.shape[0])
	b = 0
	iter = 0 
	while (iter<maxIter):
		flag = True
		for i in range(len(x)):
			w = np.sum((alpha*y*x.T).T, axis=0)
			if y[i]*(np.dot(w, x[i])+b)<=0:
				flag = False
				alpha[i] = alpha[i] + delta
				b = b + delta*y[i]

		if flag == True:
			break
		print("iteration number %d" % iter, alpha, b)
		iter += 1

	return alpha, b

x = np.array([[3,3],[4,3],[1,1]])
y = np.array([1,1,-1])
alpha, b =Perceptron1(x, y, delta=1)
print(np.sum((alpha*y*x.T).T, axis=0),b) 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值