您的位置:首页 > 大数据 > 人工智能

[学习笔记]人工智能-感知器分类算法

2018-01-14 16:31 344 查看

感知器分类算法

学习笔记来源

https://www.imooc.com/video/14376

1.算法框架

很喜欢这个图



机器学习就是不断更新权重和阈值的过程

2.感知器算法适用范围

感知器算法适用于线性分割



3.算法步骤



3.1 权重向量初始化为 0

步调函数和阈值

权重向量W,训练样本X



其中W(0)是阈值的取负数,X(0) 初值 1

W(1)….W(x)初值设置为0

[公式]Z = w0 * 1 + W1*X1 + ….+ Wn * Xn

# 神经元
def net_input(self, x):
'''
[公式]Z = w0 * 1 + W1*X1 + ....+ Wn * Xn
'''
return np.dot(x, self.w_[1:]) + self.w_[0]
pass


初始化权重向量

--------------------------------------------------
'''
fit 输入训练数据,培训神经元
x 表示 输入样本向量
y 表示样本分类
x:shape[n_samples, n_features]
x:[[1,2,3], [4,5,6]]
n_samples 向量个数 2
n_features 向量中的神经元个数 3

y:[1, -1],1对应[1,2,3], -1对应[4,5,6]
'''

def fit(self, x, y):
# 初始化权重向量
# x:[[1,2,3], [4,5,6]] 得 x.shape[1] = 2,+1 w0 步调函数的阈值
self.w_ = np.zeros(1 + x.shape[1])
self.errors_ = []
--------------------------------------------------


预测函数

# 预测函数
def predict(self, x):
if self.net_input(x) >= 0.0:
np.where(1)
else:
np.where(-1)
pass


3.2 训练样本输入感知器

权重更新算法

学习率需要往往需要根据经验和场景自己设置。



# 训练次数
for _ in range(self.n_iter):
errors = 0
'''
x:[[1,2,3], [4,5,6]]
y:[1, -1]
zip(x, y) = [[1,2,3, 1], [4, 5, 6, -1]]
'''
for xi, target in zip(x, y):
'''
Ps:公式 = 学习率 * (输入样本的正确分类 - 预测感知样本的分类) * xi
'''
update = self.eta * (target - self.predict(xi))
'''
xi 是一个向量
update * xi 等价于
[∇w(1) = x[1] * update]
w_[1:] 忽略掉第  0 个元素,从第 1 个元素开始
'''
self.w_[1:] += update * xi


3.2 更新权重向量

权重和阈值更新示例

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息