李航统计学习方法 -- AdaBoost示例 python代码实现

例 8.1 给定如表 8.1 所示训练数据.假设弱分类器由 x < v 或 x > v 产生,
阈值v 使该分类器在训练数据集上分类误差率最低.试用 AdaBoost 算法学习一个
强分类器.
表 8.1 训练数据表
序号 1 2 3 4 5 6 7 8 9 10 
x 0 1 2 3 4 5 6 7 8 9 
y 1 1 1 –1 –1 –1 1 1 1 –1

import math

x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
y = [1, 1, 1, -1, -1, -1, 1, 1, 1, -1]
# 初始化权值分布
w0 = [0.1 for i in range(0, 10)]

# first split point 2.5
F1 = [1 if xi < 2.5 else -1 for xi in x]
e1 = [w0[i] if F1[i] != y[i] else 0 for i in range(0, 10)]
e1 = sum(e1) # 错误率
a1 = 0.5 * math.log((1 - e1) / e1)
Z = [0.1 * math.exp(-a1 * F1[i] * y[i]) for i in range(0, 10)]
Zs = sum(Z)
w1 = [z / Zs for z in Z] # 根椐错误率调整后的权值分布

# second split point 8.5
F2 = [1 if xi < 8.5 else -1 for xi in x]
e2 = [w1[i] if F2[i] != y[i] else 0 for i in range(0, 10)]
e2 = sum(e2)
a2 = 0.5 * math.log((1 - e2) / e2)
Z = [w1[i] * math.exp(-a2 * F2[i] * y[i]) for i in range(0, 10)]
Zs = sum(Z)
w2 = [z / Zs for z in Z]

# third split point 5.5
F3 = [-1 if xi < 5.5 else 1 for xi in x]
e3 = [w2[i] if F3[i] != y[i] else 0 for i in range(0, 10)]
e3 = sum(e3)
a3 = 0.5 * math.log((1 - e3) / e3)
Z = [w2[i] * math.exp(-a3 * F3[i] * y[i]) for i in range(0, 10)]
Zs = sum(Z)
w3 = [z / Zs for z in Z]

# final split function
G3 = [a1 * F1[i] + a2 * F2[i] + a3 * F3[i] for i in range(0, 10)]
G3 = [1 if g > 0 else -1 for g in G3]
print(G3)
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值