用python实现adaboost算法例题

1.实验目的

1.会用Python提供的方法对数据进行预处理
2.会用python实现adaboost算法

2.设备与环境

Jupyter notebook

3.实验原理

在这里插入图片描述
在这里插入图片描述

4.实验内容

AdaBoost先初始化样本权值分布,并从初始训练集训练出一个基学习器,再根据这个基学习器的分类结果对训练样本的权值分布进行调整,再生成新的基学习器,依次进行下去,直到满足要求。其流程如下:
(1)初始化样本权值分布
(2)生成基本分类器G1
(3)计算分类器系数α \alphaα
(4)更新训练数据的权值分布
(5)生成新的分类器G2
(6)循环(2-5)
(7)将所有的分类器线性相加。

5.实验结果分析

在这里插入图片描述
在这里插入图片描述
由上图可以发现模型预测的正确率达100%

6.附录(代码)

#导入相关的库
import math 
import pandas as pd
import numpy as np#输入原始数据
x=[0,1,2,3,4,5,6,7,8,9]
y=[1,1,1,-1,-1,-1,1,1,1,-1]
T=3 #设置分类器个数#初始化样本权值分布函数
def func_w_1(x):w_1=[]for i in range(len(x)):w_1.append(0.1)return w_1
#生成阈值函数
def func_threshs(x):threshs =[i-0.5 for i in x]threshs.append(x[len(x)-1]+0.5)return threshs
#根据阈值生成22种分类器的输出
def func_cut(threshs):y_pres_all={}y_last_all={}for thresh in threshs:y_pres=[]y_last=[]for i in range(len(x)):if x[i]<thresh:y_pres.append(1)y_last.append(-1)else:y_pres.append(-1)y_last.append(1)y_pres_all[thresh]=y_pres #前向分类器y_last_all[thresh]=y_last #后向分类器return y_pres_all,y_last_all#求一个分类器误差率e
def sub_func_e(y,w_n,y_pres_all,thresh):e=0for i in range(len(y)):if y_pres_all[thresh][i]!=y[i]:e+=w_n[i];return e#求一类分类器误差率 
def sub_func_e_s(y,w_n,y_pres_all,threshs):e_s={}e_min=1n=0for thresh in threshs:e=sub_func_e(y,w_n,y_pres_all,thresh)e_s[thresh]=round(e,6)if e<e_min:e_min=round(e,6)n=threshreturn e_s,e_min,n#求两类分类器误差率 
def sub_func_e_all(y,w_n,y_pres_all,y_last_all,threshs):e_s1,e_min1,n1=sub_func_e_s(y,w_n,y_pres_all,threshs)e_s2,e_min2,n2=sub_func_e_s(y,w_n,y_last_all,threshs)if e_min1<=e_min2:return e_s1,e_min1,n1,y_pres_allelse:return e_s2,e_min2,n2,y_last_all
#输出最佳分类器
def func_pre_n(y_all,n):pre_n=y_all[n]return pre_n#求最佳分类器的误差率
def func_a_n(e_min):a_n=round(0.5*math.log((1-e_min)/e_min),6)return a_n
#求临时分布权值
def func_w_n_tmp(x,pre_n,w_n,a_n):w_n_tmp=[]for i in range(len(x)):w_new=round(w_n[i]*math.exp(-1*a_n*y[i]*pre_n[i]),6)w_n_tmp.append(w_new)return w_n_tmp
#求Z
def func_z_n(w_n_tmp):z_n=sum(w_n_tmp)return z_n
#求更新后的样本分布权值
def func_w_n(w_n_tmp,z_n):w_n=[round(i/z_n,5) for i in w_n_tmp]return w_n#求f(x)
def func_g_n(x,pre_n,a_n):g_n=[]for i in range(len(x)):g_n_single=a_n*pre_n[i]g_n.append(g_n_single)return g_n
#各子函数封装
def func_AdaBoost(x,y,T):a_n_s=[] #保存分类器系数w_n_s=[] #保存样本分布权值pre_n_s=[] #保存各个基分类器的输出e_n_s=[] #保存误差率g_n_s=[] #保存子分类器n_s=[] #保存阈值w_1=func_w_1(x) #初始化权值,都为0.1w_n_s.append(w_1)threshs=func_threshs(x)for i in range(T):w_n=w_n_s[i]y_pres_all,y_last_all=func_cut(threshs)e_s,e_min,n,y_all=sub_func_e_all(y,w_n,y_pres_all,y_last_all,threshs)pre_n=func_pre_n(y_all,n)a_n=func_a_n(e_min)w_n_tmp=func_w_n_tmp(x,pre_n,w_n,a_n)z_n=func_z_n(w_n_tmp)w_n=func_w_n(w_n_tmp,z_n)g_n=func_g_n(x,pre_n,a_n)a_n_s.append(a_n)w_n_s.append(w_n)pre_n_s.append(pre_n)g_n_s.append(g_n)n_s.append(n)e_n_s.append(e_min)return a_n_s,w_n_s,pre_n_s,g_n_s,n_s,e_n_s#主程序       
a_n_s,w_n_s,pre_n_s,g_n_s,n_s,e_n_s=func_AdaBoost(x,y,T)
#列表、显示结果
data={'x':x,'y':y,'w_1':w_n_s[0],'pre_1':pre_n_s[0],'g_1':g_n_s[0],'w_2':w_n_s[1],'pre_2':pre_n_s[1],'g_2':g_n_s[1],'w_3':w_n_s[2],'pre_3':pre_n_s[2],'g_3':g_n_s[2]}
df=pd.DataFrame(data)
df['sum']=df['g_1']+df['g_2']+df['g_3']
#输出预测值
df['G(x)']=np.sign(df['sum'])
df.T

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/294513.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI时代Python量化交易实战:ChatGPT引领新时代

文章目录 《AI时代Python量化交易实战&#xff1a;ChatGPT让量化交易插上翅膀》关键点内容简介作者简介购买链接 《AI时代架构师修炼之道&#xff1a;ChatGPT让架构师插上翅膀》关键点内容简介作者简介 赠书活动 《AI时代Python量化交易实战&#xff1a;ChatGPT让量化交易插上翅…

如何用低成本进行宣传?媒介盒子分享

企业创立之初想要用低成本取得较好的宣传效果可以实现吗&#xff1f;可以。软文营销就能帮助企业做到。 然而数字时代中用户接受到的信息数量远远超过他们的理解能力。所以只有那些用户喜欢看到的信息才会被注意到&#xff0c;宣传才能起到效果。今天媒介盒子就来和大家聊聊&a…

无人直播的关键:24小时直播能给商家带来什么优势?

24小时手机无人直播带货&#xff0c;是指通过手机进行直播销售&#xff0c;并在无需人工参与的情况下持续进行24小时的直播带货活动。这种形式的直播带货对商家来说有许多优势。 首先&#xff0c;24小时手机无人直播带货能够实现无间断的销售。传统的直播带货通常需要人员轮流…

APEX后台弱密码增强改造出现的问题及解决方法

为了加强APEX后台密码的安全性和可靠性&#xff0c;对其进行弱密码改造&#xff0c;通过改写登录函数&#xff0c;判断密码可靠性&#xff0c;在密码不符合条件&#xff08;密码长度必须大于8位小于16位&#xff0c;其包含数字、大小写字母与特殊符号&#xff09;时跳转到密码修…

大坑!!!String.valueOf()输出“null“【查看源码】

项目中使用String.valueOf()&#xff0c;结果在数据库中存入了 "null" 这个字符串&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 测试如下&#xff1a; 溯源&#xff1a;String.valueOf()被重载了多次&#xff0c;其中包含基本数据类型&#…

GPTs 官方榜单 Top10,第一个独属于中国传统文化的胜利

GPTs 发布已经快两个月了&#xff0c;很有可能成为下一阶段的 app 形态&#xff0c;现在已经有很多人在开发、使用 GPTs&#xff0c;最近官方数据也更新了使用量最多的 GPT&#xff0c;来看下中文榜单的 Top10&#xff1a; 排名标题创建者使用量1AI 算命Jerrold Bergnaum12100…

点击筛选框动态增加 多条可输入Table列 以及通过操作数组改造数据

点击筛选框动态增加 多条可输入Table列 以及通过操作数组改造数据 <el-col :span"8" class"tab_group"><el-form-item label"动态筛选"><el-select v-model.trim"ruleForm.flowType" placeholder"请选择" …

贪心法之活动安排问题

问题: 给定n个活动&#xff0c;每个活动有一个开始时间si和结束时间fi&#xff0c;选择出最大的互不相容的活动 集合。 思路&#xff1a; 将所有活动按照结束时间从小到大排序。 选择第一个活动&#xff0c;并将其加入最终的选择集合中。 依次考虑剩余的活动&#x…

【每日一题】移除石子使总数最小

文章目录 Tag题目来源解题思路方法一&#xff1a;贪心优先队列 写在最后 Tag 【贪心优先队列】【数组】【2023-12-23】 题目来源 1962. 移除石子使总数最小 解题思路 方法一&#xff1a;贪心优先队列 思路 本题比较简单&#xff0c;思路也十分清晰。对于 k 次操作&#xf…

【C++】理解string类的核心理念(实现一个自己的string类)

目录 一、引言 二、自我实现 1.成员变量的读写 2.构造与析构 3.迭代器 4.插入字符或字符串 尾插 中间插入 5.删除字符或子字符串 6.查找字符或子串 7.获取子串 三、完整代码 四、补充 一、引言 实现自己的 string 类是学习 C 语言和面向对象编程的一个好方法。通过…

【Python必做100题】之第二十六题(小球反弹问题)

题目&#xff1a;一小球从100米高度自由落体落下&#xff0c;每次落地后反跳回原来高度的一半再落下&#xff0c;求它在第10次落地时&#xff0c;共经过多少米&#xff1f;第10次反弹多高&#xff1f; 思路&#xff1a;初始为100米&#xff0c;落下反弹为原来的一半&#xff1…

数据结构和算法-二叉排序树(定义 查找 插入 删除 时间复杂度)

文章目录 二叉排序树总览二叉排序树的定义二叉排序树的查找二叉排序树的插入二叉排序树的构造二叉排序树的删除删除的是叶子节点删除的是只有左子树或者只有右子树的节点删除的是有左子树和右子树的节点 查找效率分析查找成功查找失败 小结 二叉排序树 总览 二叉排序树的定义 …