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

devtools/2024/11/22 21:24:28/

一、随机森林

机器学习中有一种大类叫集成学习(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.ppmy.cn/devtools/136125.html

相关文章

【Canvas与图标】蓝色数据库图标

【成图】 120*120的png图标&#xff1a; 各种大小图&#xff1a; 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>数据库图标 …

在ubuntu中查看csv

在 Ubuntu 中查看 CSV 文件的内容有多种方法。以下是一些常用的方法&#xff1a; 使用命令行工具 cat 命令 如果文件不大&#xff0c;可以使用 cat 命令快速查看文件内容&#xff1a; cat 10_11_query.csvless 命令 对于较大的文件&#xff0c;less 是一个更好的选择&#xf…

嵌入式Linux驱动开发日记

目录 让我们从环境配置开始 目标平台 从Ubuntu开始 从交叉编译器继续 arm-linux-gnueabihf-gcc vscode 没学过ARM汇编 正文开始——速度体验一把 写一个链接脚本 写一个简单的Makefile脚本 使用正点原子的imxdownload下载到自己的SD卡上 更进一步的笔记和说明 从IM…

【网站推荐】the top trending open-source startups, every quarter

每季度最热门的开源初创公司 我们根据 GitHub 存储库自 2020 年以来的明星增长情况发布热门开源项目&#xff0c;并将其称为 Runa 开源初创公司 (ROSS) 指数。 una Capital actively invests in open-source startups (like Nginx and MariaDB) and considers an active deve…

红日靶场-1详细解析(适合小白版)

红日靶场涉及内网知识&#xff0c;和前期靶场不太一样&#xff0c;前期靶场大部分都是单个靶机获得root权限&#xff0c;而这一次更综合&#xff0c;后期也会继续学习内网知识&#xff0c;继续打红日靶场&#xff0c;提高自己的综合技能。 环境搭建 首先本题的网络拓扑结构如…

VMware Workstation 17.6.1

概述 目前 VMware Workstation Pro 发布了最新版 v17.6.1&#xff1a; 本月11号官宣&#xff1a;针对所有人免费提供&#xff0c;包括商业、教育和个人用户。 使用说明 软件安装 获取安装包后&#xff0c;双击默认安装即可&#xff1a; 一路单击下一步按钮&#xff1a; 等待…

windows下编译ffmpeg4.4版本

最近在做一个利用ffmpeg库播放rtsp流的一个项目&#xff0c;需要自己编译ffmpeg源码&#xff1b;记录一下编译源码的过程&#xff0c;仅供参考&#xff1b; 目标&#xff1a; 开发环境&#xff1a;windows10系统&#xff1b; ffmpeg:ffmpeg4.4版本&#xff0c;https://downlo…

图解 TCP 四次挥手|深度解析|为什么是四次|为什么要等2MSL

写在前面 今天我们来图解一下TCP的四次挥手、深度解析为什么是四次&#xff1f; 上一片文章我们已经介绍了TCP的三次握手 解析四次挥手 数据传输完毕之后&#xff0c;通信的双方都可释放连接。现在客户端A和服务端B都处于ESTABLISHED状态。 第一次挥手 客户端A的应用进…