python基于梯度下降法实现感知机算法
感知机简介
感知机在线性函数上套了一个激活函数(阶跃函数),使之成为一个二分类判别模型。当然激活函数不只有这一种,如果激活函数为sigmoid函数,那么得到的模型就变成了逻辑回归模型LR。
本文将使用python实现感知机算法,基于随机梯度下降和批量梯度下降。
基于梯度下降法实现感知机
梯度下降法是机器学习中最常见的优化算法,分为随机梯度下降、批量梯度下降和小批量梯度下降。
在每一次迭代中,随机梯度下降是指在沿负梯度方向更新参数值时,遍历训练数据集,每次只使用一个训练数据进行更新。
而批量梯度下降则一次性使用所有的训练数据进行参数更新。
随机梯度下降法
# -*- coding: utf-8 -*-
class Perceptron(object):
# 初始化感知机,参数为w的个数以及激活函数
def __init__(self, input_num, activator):
'''
参数w和b初始化都为0.0
'''
self.activator = activator
# 参数w和b初始化都为0.0
self.weights = [0.0 for _ in range(input_num)]
self.bias = 0.0
def __str__(self):
'''
打印学习到的参数值
'''
return 'weights\t:%s\nbias\t:%f\n' % (self.weights, self.bias)
def predict(self, input_vec):
'''
预测一条数据
'''
return self.activator(reduce(lambda a, b: a + b,
map(lambda (x, w): x * w,
zip(input_vec, self.weights))
, 0.0) + self.bias