机器学习基础05_随机森林线性回归

一、随机森林

机器学习中有一种大类叫集成学习(Ensemble Learning),集成学习的基本思想就是将多个分类器组合,从而实现一个预测效果更好的集成分类器。集成算法大致可以分为:Bagging,Boosting 和 Stacking 三大类型。

(1)每次有放回地从训练集中取出 n 个训练样本,组成新的训练集;

(2)利用新的训练集,训练得到M个子模型;

(3)对于分类问题,采用投票的方法,得票最多子模型的分类类别为最终的类别。

随机森林则是基于决策树的集成学习算法,是通过构建一个包含多个决策树(通常称为基学习器或弱学习器)的森林,每棵树都在不同的数据子集和特征子集上进行训练,最终通过投票或平均预测结果来产生更准确和稳健的预测。

这种方法不仅提高了预测精度,也降低了过拟合风险,并且能够处理高维度和大规模数据集。

思想步骤:

假设训练集 T 的大小为 N ,特征数目为 M ,随机森林的大小为 K;

遍历随机森林的大小 K 次:
  从训练集 T 中有放回抽样的方式,取样N 次形成一个新子训练集 D
  随机选择 m 个特征,其中 m < M
  使用新的训练集 D 和 m 个特征,学习出一个完整的决策树,得到随机森林

 m 的选择:对于分类问题,可以在每次划分时使用\sqrt{M}个特征,对于回归问题, 选择 \frac{M}{3} 但不少于 5 个特征

api

sklearn.ensemble.RandomForestClassifier

参数:

n_estimators    int, default=100

森林中树木的数量。(决策树个数)

criterion   {“gini”, “entropy”}, default=”gini” 决策树属性划分算法选择

    当criterion取值为“gini”时采用 基尼不纯度(Gini impurity)算法构造决策树,

    当criterion取值为 “entropy” 时采用信息增益( information gain)算法构造决策树.

   

max_depth   int, default=None 树的最大深度

# 泰坦尼克号人员数据集 随机森林分类
from sklearn.ensemble import RandomForestClassifier
from sklearn.feature_extraction import DictVectorizer
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
import pandas as pddata = pd.read_csv('../src/titanic/titanic.csv')
data.fillna(data['age'].mode()[0],inplace=True)
# data.tail()
y = data[['survived']].to_numpy()
data.drop(['survived'],axis=1,inplace=True)dict1 = data.to_dict(orient='records')
transfer = DictVectorizer(sparse=False)
x = transfer.fit_transform(dict1)
# print(x)# 划分数据集
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.25,random_state=20)
# 标准化
scaler = StandardScaler()
x_train = scaler.fit_transform(x_train)
x_test = scaler.transform(x_test)
# 训练模型
estimator = RandomForestClassifier(n_estimators=100,max_depth=8,criterion='gini')
estimator.fit(x_train,y_train)
# 模型评估
score = estimator.score(x_test,y_test)
print(f'得分{score}')
# 得分0.8206686930091185

二、线性回归

回归分析在统计学中是研究多组变量间关系的方法,在机器学习中也应用广泛。前面介绍了很多分类算法,分类的目标变量是标称型数据,回归是对连续型数据做出预测。

标称型数据(Nominal Data)是统计学和数据分析中的一种数据类型,它用于分类或标记不同的类别或组别,数据点之间并没有数值意义上的距离或顺序。例如,颜色(红、蓝、绿)、性别(男、女)或产品类别(A、B、C)。

标称数据的特点:

  1. 无序性:标称数据的各个类别之间没有固有的顺序关系。例如,“性别”可以分为“男”和“女”,但“男”和“女”之间不存在大小、高低等顺序关系。

  2. 非数值性:标称数据不能进行数学运算,因为它们没有数值含义。你不能对“颜色”或“品牌”这样的标称数据进行加减乘除。

  3. 多样性:标称数据可以有很多不同的类别,具体取决于研究的主题或数据收集的目的。

  4. 比如西瓜的颜色,纹理,敲击声响这些数据就属于标称型数据,适用于西瓜分类。

连续型数据(Continuous Data)表示在某个范围内可以取任意数值的测量,这些数据点之间有明确的数值关系和距离。例如,温度、高度、重量等

连续型数据的特点包括:

  1. 可测量性:连续型数据通常来源于物理测量,如长度、重量、温度、时间等,这些量是可以精确测量的。

  2. 无限可分性:连续型数据的取值范围理论上是无限可分的,可以无限精确地细分。例如,你可以测量一个物体的长度为2.5米,也可以更精确地测量为2.53米,甚至2.5376米,等等。

  3. 数值运算:连续型数据可以进行数学运算,如加、减、乘、除以及求平均值、中位数、标准差等统计量。

回归,一般都是指线性回归(linear regression)。线性回归意味着可以将输入项分别乘以一些常量,再将结果加起来得到输出。线性回归是机器学习中一种有监督学习的算法,回归问题主要关注的是因变量(需要预测的值)和一个或多个数值型的自变量(预测变量)之间的关系。

1、损失函数

对于多个样本点x_i,y_i,假设 y = w x+b,代入y_1,y_2,...y_n;x_1,x_2...x_n:

y_1^,=wx_1+b

...

y_n^,=wx_n+b

则损失函数 loss: \frac{1}{n} \textstyle\sum_{i=1}^{n}(y_{i}-w x_{i} - b)^{2}

先在 b=0 的情况下讨论:要使得 loss 最小,因为 x_i,y_i 已知,故求满足条件的 w 的值即可:

{\frac{1}{n}}\sum_{i=1}^{n}x_{i}^{2}w^{2}-{\frac{2}{n}}\sum_{i=1}^{n} x_{i}y_{i}w+{\frac{1}{n}}\sum_{i=1}^{n} y_{i}^{2}

实际情况下,往往影响结果y的因素不止1个,这时x就从一个变成了n个:

2、最小二乘法

loss 表达优化为:

loss=[(h_1(x)-y_1)^2+(h_2(x)-y_2)^2+...(h_n(x)-y_n)^2]/n\\=\frac{1}{n} \textstyle\sum_{i=1}^{n}(h(x_{i})-y_{i})^{2}\\=\frac{1}{n}||(XW-y)||^2\\=\frac{1}{2}||(XW-y)||^2

这就是最小二乘法公式, ||A||^2 是欧几里得范数的平方,也就是每个元素的平方相加。

将x,y,w 分别用矩阵表示,在矩阵形式下进行运算:

 要求最小loss值,可求loss求导导数为0的w:

loss=\frac{1}{2}||(XW-y)||^2 求导:loss'=X^TXW-X^Ty 得:W=(X^TX)^{-1}X^Ty

  链式方式求导:内部函数是 f(W) = XW - y ,外部函数是:g(u) = \frac{1}{2} u^2 ,其中 u = f(W) 。

  外部函数的导数:\frac{\partial g}{\partial u} = u = XW - y

  内部函数的导数:\frac{\partial f}{\partial W} = X^T

  链式方式:\frac{\partial L}{\partial W} = \left( \frac{\partial g}{\partial u} \right) \left( \frac{\partial f}{\partial W} \right) = (XW - y) X^T

api

sklearn.linear_model.LinearRegression()

功能: 普通最小二乘法线性回归, 权重和偏置是直接算出来的,对于数量大的不适用,因为计算量太大,计算量太大的适合使用递度下降法

参数:

fit_intercept   bool, default=True

    是否计算此模型的截距(偏置)。如果设置为False,则在计算中将不使用截距(即,数据应中心化)。

属性:  

coef_ 回归后的权重系数

intercept_ 偏置

print("权重系数为:\n", estimator.coef_)  #权重系数与特征数一定是同样的个数。

print("偏置为:\n", estimator.intercept_)

from sklearn.inear_model import LinearRegression
import numpy as npdata=np.array([[0,14,8,0,5,-2,9,-3,399],[-4,10,6,4,-14,-2,-14,8,-144],[-1,-6,5,-12,3,-3,2,-2,30],[5,-2,3,10,5,11,4,-8,126],[-15,-15,-8,-15,7,-4,-12,2,-395],[11,-10,-2,4,3,-9,-6,7,-87],[-14,0,4,-3,5,10,13,7,422],[-3,-7,-2,-8,0,-6,-5,-9,-309]])
x = data[:, 0:8]
y = data[:, -1:]estimator = LinearRegression(fit_intercept=False)
estimator.fit(x,y)
print("权重系数为:\n", estimator.coef_)  # 权重系数与特征数一定是同样的个数
print("偏置为:\n", estimator.intercept_)x_new = [[-4,10,6,4,-14,-2,-14,8]]
y_predict = estimator.predict(x_new)
print(f'y_predict:\n{y_predict}')
print(-4*0.4243965+10*7.32281732+6*15.05217218+4*3.5996297-14*12.05805264-2*1.76972959-14*17.0276393+8*11.31212591)

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

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

相关文章

Linux驱动开发(9):pinctrl子系统和gpio子系统--led实验

在前面章节&#xff0c;我们有过使用寄存器去编写字符设备的经历了。这种直接在驱动代码中&#xff0c; 通过寄存器映射来对外设进行使用的编程方式&#xff0c;从驱动开发者的角度可以说是灾难。 因为每当芯片的寄存器发生了改动&#xff0c;那么底层的驱动几乎得重写。 那么…

23种设计模式速记法

前言 在软件开发的过程中&#xff0c;设计模式作为解决常见问题的通用模板&#xff0c;一直是开发者的重要工具。尤其是在面临复杂系统架构和需求变化时&#xff0c;设计模式不仅能够提升代码的可复用性和扩展性&#xff0c;还能大大提高团队之间的协作效率。然而&#xff0c;…

IntelliJ+SpringBoot项目实战(十二)--设计项目多模块依赖关系和跨模块调用服务和接口

在非微服务的项目中&#xff0c;一个应用里有多个子系统&#xff0c;例如在一个电商系中&#xff0c;有系统管理子系统、内容管理子系统和电商管理子系统&#xff0c;我们想实现这样的效果&#xff1a; &#xff08;1&#xff09;只需要启动一个SpringBoot应用&#xff0c;不需…

MACOS开发、使用常见问题汇总

MACOS常见问题 本文记录使用macos遇到的常见问题&#xff0c;后面会持续更新&#xff0c;觉得有用的可以收藏一下。 打不开xxx.app&#xff0c;因为它来自身份不明的开发者解决方法(开启任何来源) 打开终端&#xff08;Terminal&#xff09;程序 拷贝sudo spctl --master-di…

【实用数据】上市公司数字化转型双重差分准自然实验数据(2007-2022年)

测算方式&#xff1a; 参考《管理评论》丁相安&#xff08;2024&#xff09;老师研究的做法&#xff0c;企业分批逐步推动自身数字化转型是一个很好的准自然实验&#xff0c;这符合双重差分法的使用情境。 因此&#xff0c;本文使用多时点双重差分模型&#xff08;&#xff24…

PostgreSQL常用字符串函数与示例说明

文章目录 coalesce字符串位置(position strpos)字符串长度与大小写转换去掉空格(trim ltrim rtrim)字符串连接(concat)字符串替换简单替换(replace)替换指定位置长度(overlay)正则替换(regexp_replace) 字符串匹配字符串拆分split_part(拆分数组取指定位置的值)string_to_array…

一次需升级系统的wxpython安装(macOS M1)

WARNING: The scripts libdoc, rebot and robot are installed in /Users/用户名/Library/Python/3.8/bin which is not on PATH. 背景&#xff1a;想在macos安装Robot Framework &#xff0c;显示pip3不是最新&#xff0c;更新pip3后显示不在PATH上 参看博主文章末尾 MAC系统…

细说STM32单片机DMA中断收发RTC实时时间并改善其鲁棒性的另一种方法

目录 一、工程配置 二、软件代码 1、软件代码 2、usart.h 3、usart.c 4、rtc.c 三、运行与调试 1、合规的指令 2、proBuffer[0]不是 ‘#’ 或proBuffer[4]不是 ‘;’ 3、指令长度小于5 4、proBuffer[2]或proBuffer[3]至少一个不是数字 5、; 位于proBuffer…

离散数学---概率, 期望

本文根据 MIT 计算机科学离散数学课程整理&#xff08;Lecture 22 ~ Lecture 24&#xff09;。 1 非负整数期望性质 用 N 表示非负整数集合&#xff0c;R 是 N 上的随机变量&#xff0c;则 R 的期望可以表示成&#xff1a; 证明&#xff1a; 换一个形式&#xff0c;把每一列…

AI一键生成原创花卉印花图案——创新与效率的结合

引言 在时尚界&#xff0c;印花图案一直是设计师们表达创意和个性的重要手段。随着人工智能技术的发展&#xff0c;AI在设计领域的应用越来越广泛&#xff0c;其中就包括了一键生成原创花卉印花图案。本文将探讨AI如何帮助设计师们提高效率&#xff0c;同时保持设计的创新性和…

QT实操中遇到的一些(C++)疑惑点汇总

QT实操中 遇到的一些C疑惑点汇总 1.实例化对象的两种方法及其访问方式 1.1 示例 1.2 总结 2.基类成员的访问 2.1 直接访问继承的基类成员 2.1.1示例代码 2.1.2 输出结果 2.2 使用作用域解析符来显式调用基类成员函数 2.2.1 示例代码 2.2.2 输出结果 2.3 使用 this 指针访问基类…

图形学笔记 - 4. 几何 -网格操作和阴影映射

文章目录 网格操作&#xff1a;几何处理细分Loop细分Catmull-Clark细分&#xff08;一般网格&#xff09;网格简化 阴影 Shadows可视化阴影映射阴影映射阴影贴图的问题 网格操作&#xff1a;几何处理 网格细分网格简化网格正则化 网格细分&#xff08;上采样&#xff09; 网…

OBOO鸥柏车载广告屏:28.6寸液晶一体机的技术革新与应用前景

在数字化迅速发展的今天&#xff0c;OBOO鸥柏推出的28.6寸车载长条形液晶广告屏一体机成为了市场的一大亮点。这款产品不仅具有超窄边框的高亮设计&#xff0c;还利用异形激光切割技术&#xff0c;支持多种形状如圆形、方形及三角形展示&#xff0c;极大地提升了商用和工业屏幕…

Spring Cloud Alibaba、Spring Cloud 与 Spring Boot各版本的对应关系

参考spring-cloud-alibaba github wiki说明&#xff1a;版本说明 下面截取说明&#xff1a; 2022.x 分支 2021.x 分支 2.2.x 分支 组件版本关系

Springboot + vue 健身房管理系统项目部署

1、前言 ​ 许多人在拿到 Spring Boot 项目的源码后&#xff0c;不知道如何运行。我以 Spring Boot Vue 健身房管理系统的部署为例&#xff0c;详细介绍一下部署流程。大多数 Spring Boot 项目都可以通过这种方式部署&#xff0c;希望能帮助到大家。 ​ 2、项目查看 ​ 首…

SOL链上的 Meme 生态发展:从文化到创新的融合#dapp开发#

一、引言 随着区块链技术的不断发展&#xff0c;Meme 文化在去中心化领域逐渐崭露头角。从 Dogecoin 到 Shiba Inu&#xff0c;再到更多细分的 Meme 项目&#xff0c;这类基于网络文化的加密货币因其幽默和社区驱动力吸引了广泛关注。作为近年来备受瞩目的区块链平台之一&…

基于大数据爬虫数据挖掘技术+Python的网络用户购物行为分析与可视化平台(源码+论文+PPT+部署文档教程等)

#1024程序员节&#xff5c;征文# 博主介绍&#xff1a;CSDN毕设辅导第一人、全网粉丝50W,csdn特邀作者、博客专家、腾讯云社区合作讲师、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老…

主机管理工具 WGCLOUD v3.5.6 更新了哪些特性

WGCLOUD-v3.5.6 更新说明&#xff0c;2024-11-20发布 1. 新增&#xff0c;个性化采集&#xff0c;查看 2. 新增&#xff0c;支持达梦数据库做数据源来存贮监控数据&#xff0c;查看说明(8) 3. 新增&#xff0c;日志监控支持配置自动处理指令&#xff0c;当发现日志出现告警关键…

设计模式之 享元模式

享元模式&#xff08;Flyweight Pattern&#xff09;是一种结构型设计模式&#xff0c;用于减少系统中对象的数量&#xff0c;从而节省内存和提升性能。它通过共享相同的对象来避免重复创建类似的对象。该模式尤其适用于对象数量庞大、且重复内容较多的场景。 核心思想&#x…

yolov5 数据集分享:纯干货

数据集分享&#xff1a;纯干货 1. 遇见数据集&#xff1a;这是一个国内的数据集搜索引擎&#xff0c;索引了国内外的大部分网站&#xff0c;提供最新的数据集推荐。[遇见数据集网站](https://www.selectdataset.com/) 2. Kaggle&#xff1a;一个领先的数据科学和机器学习爱好者…