机器学习---adaboost二分类、回归

1. adaboost二分类

import numpy as np
import matplotlib.pyplot as pltfrom sklearn.ensemble import AdaBoostClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import make_gaussian_quantiles# 几个关键参数有n_samples(生成样本数), n_features(正态分布的维数),mean(特征均值), 
# cov(样本协方差的系数), n_classes(数据在正态分布中按分位数分配的组数)
X1, y1 = make_gaussian_quantiles(cov=2.,n_samples=200, n_features=2,n_classes=2, random_state=1)
# plt.scatter(X1[:, 0], X1[:, 1], marker='o', c=y1)
# print(X1)
# print("----------------------------------------------------")
# print(y1)
X2, y2 = make_gaussian_quantiles(mean=(3, 3), cov=1.5,n_samples=300, n_features=2,n_classes=2, random_state=1)
# 数组拼接
X = np.concatenate((X1, X2)) # 500*2
# print(np.shape(X1), np.shape(X2), np.shape(X))
y = np.concatenate((y1, - y2 + 1))# Create and fit an AdaBoosted decision tree
# SAMME和SAMME.R。两者的主要区别是弱学习器权重的度量,SAMME使用二元分类Adaboost算法的扩展,
# 即用对样本集分类效果作为弱学习器权重,而SAMME.R使用了对样本集分类的预测概率大小来作为弱学习器权重。
# 由于SAMME.R使用了概率度量的连续值,迭代一般比SAMME快,因此AdaBoostClassifier的默认算法algorithm的值也是SAMME.R。
# 我们一般使用默认的SAMME.R就够了,但是要注意的是使用了SAMME.R, 则弱分类学习器参数base_estimator必须限制使用支持概率预测的分类器。
# SAMME算法则没有这个限制。
bdt = AdaBoostClassifier(DecisionTreeClassifier(max_depth=1),algorithm="SAMME",n_estimators=200)bdt.fit(X, y)plot_colors = "br"
plot_step = 0.02
class_names = "AB"plt.figure(figsize=(10, 5))# Plot the decision boundaries
plt.subplot(121)
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1 # X shape 500 * 2
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, plot_step),np.arange(y_min, y_max, plot_step))# # ravel() 和 flatten()函数,将多维数组降为一维,ravel返回视图,flatten返回拷贝
# np.r_是按列连接两个矩阵,就是把两矩阵上下相加,要求列数相等,类似于pandas中的concat()。
# np.c_是按行连接两个矩阵,就是把两矩阵左右相加,要求行数相等,类似于pandas中的merge()。
Z = bdt.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
cs = plt.contourf(xx, yy, Z, cmap=plt.cm.Paired)
plt.axis("tight")# Plot the training points
for i, n, c in zip(range(2), class_names, plot_colors):idx = np.where(y == i)plt.scatter(X[idx, 0], X[idx, 1],c=c, cmap=plt.cm.Paired,s=20, edgecolor='k',label="Class %s" % n) # s size of point
plt.xlim(x_min, x_max)
plt.ylim(y_min, y_max)
plt.legend(loc='upper right')
plt.xlabel('x')
plt.ylabel('y')
plt.title('Decision Boundary')# Plot the two-class decision scores
twoclass_output = bdt.decision_function(X)
plot_range = (twoclass_output.min(), twoclass_output.max())
plt.subplot(122)
for i, n, c in zip(range(2), class_names, plot_colors):plt.hist(twoclass_output[y == i],bins=10,range=plot_range,facecolor=c,label='Class %s' % n,alpha=.5,edgecolor='k')
x1, x2, y1, y2 = plt.axis()
plt.axis((x1, x2, y1, y2 * 1.2))
plt.legend(loc='upper right')
plt.ylabel('Samples')
plt.xlabel('Score')
plt.title('Decision Scores')plt.tight_layout()
plt.subplots_adjust(wspace=0.35) # 调整图像边框,使得各个图之间的间距为0.35
plt.show()

使用 make_gaussian_quantiles 生成了两组高斯分位数数据。X1、y1 是其中一组数据,X2、y2

是另一组数据。通过合并这两组数据得到 X 和 y,创建了一个用于二分类的合成数据集。

AdaBoost 分类器初始化:用 AdaBoostClassifier 实例化了一个 AdaBoost 分类器 (bdt)。

它以 DecisionTreeClassifier 作为基本估计器,最大深度为 1。选择的算法是 "SAMME"(多类别指

数损失函数的逐步增强建模)。使用生成的合成数据 (X 和 y) 对分类器 (bdt) 进行训练。

通过对整个数据范围进行网格预测,绘制了决策边界。使用 contourf 绘制了网格预测结果。

基于其类别,用不同颜色('b' 表示一类,'r' 表示另一类)绘制了训练数据点。

绘制了两个类别的决策分数(decision_function 的输出),呈现为直方图。每个直方图代表每个类

别的决策分数分布情况。使用 Matplotlib 显示了绘制的图形(决策边界和直方图)。

这段代码通过可视化的方式展示了 AdaBoost 如何为合成数据创建决策边界,并为数据赋予决策分

数。这是一个很好的方法,可以理解 AdaBoost 的工作原理,以及它如何基于多个弱学习器(在这

里是决策树)做出决策。 

2. adaboost回归

import numpy as np
import matplotlib.pyplot as plt
from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import AdaBoostRegressor# Create the dataset
# 这里看以看到,1这个数字是伪随机数产生器的种子,也就是“the starting point for a sequence of pseudorandom number”
rng = np.random.RandomState(1)
X = np.linspace(0, 6, 100)[:, np.newaxis] # array, (500,) (500,1)
# 
y = np.sin(X).ravel() + np.sin(6 * X).ravel() + rng.normal(0, 0.1, X.shape[0]) 
# 该段代码的目的是产生一个X.shape[0]的assarray,其中的每个元素都是均值为0,方差为0.1的高斯分布# Fit regression model
regr_1 = DecisionTreeRegressor(max_depth=4)regr_2 = AdaBoostRegressor(DecisionTreeRegressor(max_depth=4),n_estimators=300, random_state=rng)regr_1.fit(X, y)
regr_2.fit(X, y)# Predict
y_1 = regr_1.predict(X)
y_2 = regr_2.predict(X)# Plot the results
plt.figure()
plt.scatter(X, y, c="k", label="training samples")
plt.plot(X, y_1, c="g", label="n_estimators=1", linewidth=2)
plt.plot(X, y_2, c="r", label="n_estimators=300", linewidth=2)
plt.xlabel("data")
plt.ylabel("target")
plt.title("Boosted Decision Tree Regression")
plt.legend()
plt.show()

生成一个长度为 100 的等间距数列 X,并将其转换成一列。y 由 sin(X) 和 sin(6*X) 的和构成,加

上服从均值为 0、方差为 0.1 的高斯噪声。regr_1 是一个深度为 4 的单独决策树回归模型。

regr_2 是一个基于 AdaBoost 的回归模型,它使用了深度为 4 的决策树作为基础估计器,设定了

300 个弱分类器,并使用了指定的随机状态 random_state=rng。

分别使用 X 和 y 对 regr_1 和 regr_2 进行训练。使用训练好的模型 regr_1 和 regr_2 对 X 进行预

测,得到预测结果 y_1 和 y_2。绘制了原始数据点的散点图。

绘制了 regr_1(使用单一决策树)和 regr_2(使用 AdaBoost 回归器)的预测结果曲线。

添加了图例、横纵坐标标签以及标题,最后展示了回归结果的图像。

这段代码展示了如何使用单一决策树和基于 AdaBoost 的回归模型对具有噪声的正弦波数据进行拟

合,并对比了两种模型的表现。

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

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

相关文章

Python list列表中每一个数字乘于2的两种多功能函数代码设计

Python list列表中每一个数字乘于2或一个数字 要让Python中list列表中的每一个数字乘于2,可以有两种方法,一是使用列表推导式来完成,另一种是使用map()函数来完成。下面将通过实例代码来之一进行介绍。 列表推导式法 为了让列表推导式的代…

基于JSP+Servlet+Mysql的宠物管理系统(简单增删改查)

基于JSPServletMysql的宠物管理系统_简单增删改查 一、系统介绍二、功能展示1.主页2.增加3.修改4.查询5.删除 四、其它1.其他系统实现五.获取源码 一、系统介绍 项目名称:基于JSPServletMysql的宠物管理系统(简单增删改查) 项目架构:B/S架构 开发语言…

FonePaw iOS Transfer for Mac: 让您的IOS设备数据无忧传输

在数字世界里,随着我们的生活与科技越来越紧密,数据传输成为了我们日常生活中的重要部分。尤其对于广大的苹果用户来说,如何方便、快速地传输数据成为了他们关注的焦点。今天,我要为大家介绍一款专门为Mac用户设计的IOS数据传输工…

Objectiv-C设计模式笔记

文章目录 通用知识点对象创建原型模式定义适用场景示例 工厂方法定义适用场景示例 抽象工厂定义适用场景示例 生成器模式定义适用场景示例 单例模式定义适用场景示例 接口适配适配器定义适用场景示例 桥接定义适用场景示例 外观模式定义适用场景示例 对象去耦中介者定义适用场景…

60.0/PhotoShop制作简单的网页效果

目录 60.1 网页的页面元素 60.1.1 网页的概念 60.2网站设计的步骤 60.2.1草案 ​编辑 60.2.2 丰富内容 60.2.3 利用切片划分功能区域 60.3.0 Gif动画的制作 60.1 网页的页面元素 60.1.1 网页的概念 是指通过浏览器能访问到的 Web 页面,是一种超文本文件&am…

SpringBoot3 核心原理

1. 事件和监听器 1. 生命周期监听 场景:监听应用的生命周期 1. 监听器-SpringApplicationRunListener 自定义SpringApplicationRunListener来监听事件; 编写SpringApplicationRunListener 实现类在 META-INF/spring.factories 中配置 org.springfram…

同城配送小程序解决方案

前言 同城配送小程序解决方案。 一、用户用车 用户打开小程序后发货地址自动定位到用户当前位置,用户可通过地址后的>号在地图上选择新的发货地址和卸货地址,小程序会自动规划出行线路,计算距离和运费价格。 用户仅用简单操作后就可以…

冒泡排序(C语言)

void BubbleSort(int arr[], int len) {int i, j, temp;for (i 0; i < len; i){for (j len - 1; j > i; j--){if (arr[j] > arr[j 1]){temp arr[j];arr[j] arr[j 1];arr[j 1] temp;}}} } 优化&#xff1a; 设置标志位flag&#xff0c;如果发生了交换flag设置…

sql查找至少连续出现三次的数字

表&#xff1a;logss ---------------------- | column name | type | ---------------------- | id | int | | num | varchar | ----------------------id 是这个表的主键。 编写一个 sql 查询&#xff0c;查找所有至少连续出现三次的数字。 返回的…

C++ 文件操作篇

C 文件操作篇 文章目录 C 文件操作篇1 简介1.1 继承关系1.2 流1.3 缓冲区输入输出流中的缓冲streambuf 2 文件操作步骤2.1 头文件2.2 创建流对象2.3 打开文件2.4 读取数据第一种&#xff1a;**按元素直接读**第二种&#xff1a;**使用getline按行读**第三种&#xff1a;**使用*…

软文发稿:雅虎媒体套餐投放内容有哪些

在当今数字时代&#xff0c;软文发稿成为企业推广的重要手段之一。雅虎媒体套餐作为软文发稿的一个独特平台&#xff0c;吸引了众多企业的关注。本文将深入探讨雅虎媒体套餐投放的内容&#xff0c;以揭示其在软文推广中的独特价值。 雅虎作为全球著名的互联网公司之一&#xf…

ubuntu多用户环境dockerbug,卸载重装docker流程

之前不小心误操作删除重装docker&#xff0c;结果删除没成功&#xff0c;更没法重装&#xff0c;每次apt install都会报一个docker错误&#xff0c;虽然不影响软件的常规安装&#xff5e;但是现在还是需要装一个完整docker&#xff0c;还是选择删除一下&#xff0c;重点是关闭服…

❀My排序算法学习之选择排序❀

目录 选择排序(Selection Sort):) 一、定义 二、具体实现方法 三、算法性能 时间复杂度 稳定性 四、参考代码

探索中国制造API接口:解锁无限商机,引领制造业数字化转型

一、概述 中国制造API接口是一种应用程序接口&#xff0c;专门为中国制造行业提供数据和服务。通过使用API接口&#xff0c;开发者可以轻松地获取中国制造的商品信息、供应商数据、生产能力等&#xff0c;从而为他们的应用程序或网站提供更加丰富的内容和功能。 二、API接口的…

k8s---kubernets

目录 一、Kurbernetes 1.2、K8S的特性&#xff1a; 1.3、docker和K8S&#xff1a; 1.4、K8S的作用&#xff1a; 1.5、K8S的特性&#xff1a; 二、K8S集群架构与组件&#xff1a; 三、K8S的核心组件&#xff1a; 一、master组件&#xff1a; 1、kube-apiserver&#xff1…

【网络安全 | MD5截断比较】PHP、Python脚本利用

前言 在解题中&#xff0c;当遇到类似 substr(md5(a),-6,6) 7788这样的MD5截断比较的题目时&#xff0c;只有求出a的值才能进行接下来的操作。 一个一个去猜是不可能的&#xff0c;通常使用脚本解决&#xff0c;文末给出实战案例。 PHP循环脚本 <?phpfor($i1;$i<9…

51和32单片机读取FSR薄膜压力传感器压力变化

文章目录 简介线性电压转换模块51单片机读取DO接线方式51代码实验效果 32单片机读取AO接线方式32代码实验效果 总结 简介 FSR薄膜压力传感器是可以将压力变化转换为电阻变化的一种传感器&#xff0c;单片机可以读取然后作为粗略测量压力&#xff08;仅提供压力变化&#xff0c;…

清理 Oracle Arch 目录中的日志文件

清理Oracle Arch目录中的文件需要遵循以下步骤&#xff1a; 1、登陆Oracle数据库服务器&#xff1a;确保你有权限访问Oracle数据库服务器&#xff0c;并且能够登录到服务器操作系统。 ssh 192.168.1.200 su - oracle2、启动RMAN&#xff08;Recovery Manager&#xff09;&…

SpringBoot整合Spring-Security 认证篇(保姆级教程)

本文项目基于以下教程的代码版本&#xff1a; https://javaxbfs.blog.csdn.net/article/details/135195636 代码仓库: https://gitee.com/skyblue0678/springboot-demo 为了跟shiro区别开&#xff0c;新建了一个分支&#xff1a; 目录 &#x1f339;1、友善问候一下 Spring …

短视频矩阵系统:赋予用户创造与分享的力量

在如今快节奏的社交网络时代&#xff0c;人们对于信息获取和娱乐方式的需求也逐渐发生了变化。作为当下最受欢迎的短视频平台之一&#xff0c;抖音短视频矩阵系统正以其独特的魅力和吸引力&#xff0c;深深地打动着亿万用户。 抖音短视频矩阵系统是一种基于移动端的短视频分享…