【机器学习】朴素贝叶斯 决策树 随机森林 线性回归

2024-08-23 22:36

本文主要是介绍【机器学习】朴素贝叶斯 决策树 随机森林 线性回归,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

机器学习分类算法

朴素贝叶斯

条件概率公式 P ( A ∣ B ) = P ( A ∩ B ) P ( B ) P(A \mid B)=\frac{P(A \cap B)}{P(B)} P(AB)=P(B)P(AB)

在B条件发生的情况下,A发生的概率。

事件 A 发生的概率定义为事件 A 发生的情况数除以所有可能情况的总数。

P(A) =(事件 A 发生的情况数)/(所有可能情况的总数 )

联合概率:事件 A 和事件 B 同时发生的概率 P(A∩B)P(AB) 可以看作是同时满足 A 和 B 的情况数除以所有可能情况的总数。

P(A∩B)=(事件 A 和 B 同时发生的情况数)/(/所有可能情况的总数)

条件概率:当我们知道事件 B 已经发生时,所有可能情况的总数就变成了事件 B 包含的所有情况数。事件 A 在事件 B 已经发生的条件下的概率可以表示为事件 A 和 B 同时发生的情况数除以事件 B 发生的情况数。

P(A∣B)=(事件 A 和 B 同时发生的情况数事件)/(B 发生的情况数)

贝叶斯公式
P ( A ∣ B ) = P ( B ∣ A ) ⋅ P ( A ) P ( B ) P(A \mid B)=\frac{P(B \mid A) \cdot P(A)}{P(B)} P(AB)=P(B)P(BA)P(A)

全概率公式

样本空间可以被分为多个完备事件组(互斥),一个事件发生的概率就是这个事件分别在这几个完备事件的条件概率下发生的概率之和

P ( B ) = ∑ i = 1 n P ( B ∣ A i ) ∗ P ( A i ) \left.P(B)=\sum_{i=1}^{n} P(B|A_{i}\right) *P{(A_i)} P(B)=i=1nP(BAi)P(Ai)

在n个分类中,有众多的 f 特征。

可以由训练数据得到样本数据的每个分类的概率 P ( c i ) P(c_i) P(ci)

在每个特征中,类别的条件概率 P ( C i ∣ f i ) P(C_i|f_i) P(Cifi)

每个特征的概率 P ( f i ) P(f_i) P(fi)

根据贝叶斯公式可以求,在指定特征条件下,预测样本是哪一种类别的概率,通过比较概率大小,得到分类的目的

P ( c i ∣ f i ) = ( P ( f i ∣ c i ) ∗ P ( c i ) ) / P ( f i ) P(c_i|f_i)=(P(f_i|c_i)*P(c_i))/P(f_i) P(cifi)=(P(fici)P(ci))/P(fi)

其中 P ( f i ∣ c i ) P(f_i|c_i) P(fici)是在指定的类别下,某个特征发生的概率,之后累乘,因为特征是同时发生在一个样本上

由于比较相同的特征集合下的不同分类的概率,所以上式中分母相同,只用比较分子大小

sklearn.naive_bayes.MultinomialNB

from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.model_selection import train_test_splitx,y = fetch_20newsgroups(return_X_y=True)
counter = CountVectorizer() # 文本特征提取
x = counter.fit_transform(x)train_x,test_x,train_y,test_y = train_test_split(x,y,test_size = 0.3,random_state=1,shuffle=True)model = MultinomialNB() # 贝叶斯分类器
model.fit(train_x,train_y)
model.score(test_x,test_y)

决策树

通过训练数据,构建一棵根据样本特征分类的树。

根据样本特征的差异,界定范围,就像程序分支一样控制决定的流动,最后到达树的叶节点,输出类别的判断

一些特征可以对样本进行很好的区分,这些特征决定了样本类别的不同。

使用信息增益建立决策树

信息熵,数据的混乱程度

H ( D ) = − ∑ k = 1 N p k log ⁡ 2 p k H(D)=-\sum_{k=1}^{N} p_{k} \log _{2} p_{k} H(D)=k=1Npklog2pk

P k P_k Pk是类别在样本中的概率,N是样本中的类别数量

信息增益

I G ( A ) = H ( D ) − H ( D ∣ A ) I G(A)=H(D)-H(D \mid A) IG(A)=H(D)H(DA)

H(D)是样本的信息熵

H(D|A) 是样本在根据A特征区分下的加权信息熵

通过信息增益确定特征判断的先后。信息增益描述了特征区分样本的能力。信息熵越大,根据这个特征区分

通过比较每个特征的信息增益,确定判断特征的顺序

之后对特征中的进行信息增益的判断,确定特征的边界

sklearn.tree.DecisionTreeClassifier

from sklearn.datasets import load_breast_cancer
from sklearn.preprocessing import StandardScaler
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_splitcancer = load_breast_cancer()x,y = cancer.data,cancer.target
scaler = StandardScaler()
x = scaler.fit_transform(x)train_x,test_x,train_y,test_y = train_test_split(x,y,test_size=0.3,random_state=1)model = DecisionTreeClassifier(criterion = 'gini')
model.fit(train_x,train_y)
acc = model.score(test_x,test_y)
print(acc)

集成学习方法随机森林分类器

通过多个模型进行的组合,实现一个效果更好的模型

随机森林就是有多个决策树分类器组合形成的模型

对数据集进行有放回的随机抽取,形成新的数据集

用新的数据集对决策树进行训练,每一个新的数据集训练一个决策树,训练时输入的样本特征也是随机抽取小于总样本特征数量的特征

最后根据多个决策树的结果的投票数,预测哪个分类的多,就把这个分类作为森林的结果

sklearn.ensemble.RandomForestClassfier

n_estimators 森林中的决策树数量 默认100

criterion 构建决策树的方法 gini 基尼系数 entropy 信息增益

max_depth 决策树的最大深度

from sklearn .ensemble import RandomForestClassifier
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.datasets import fetch_covtypedata = fetch_covtype()scaler = StandardScaler()  # 标准化
x = scaler.fit_transform(x)x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.2,random_state=1)  # 划分数据集model = RandomForestClassifier(n_estimators = 200, max_depth= 7)  # 创建决策树分类器
model.fit(x_train,y_train)model.score(x_test,y_test)# 0.7048182921267093

线性回归——最小二分法

参考了这篇博文一文让你彻底搞懂最小二乘法(超详细推导)-CSDN博客

回归,就是预测连续的值,分类是预测类别,分类输出的是指定的几个值,而回归是预测连续的值,比如某种物理量的值大小。

线性回归,简单的理解就是通过一些权重,乘以对应的样本特征,加上偏置,得到回归的预测值。

而回归的目的,就是找到最佳的权重和偏置,使得预测值和真实值的差距最小。

如对于一维的线性回归 y = w x + b y=wx+b y=wx+b 通过对样本特征x的输入,调整w和b的值,直到通过函数的输入得到的预测值和真实值差距最小,就可以通过对x的输入预测y的值。

  • 损失函数
    • 通过定义损失函数,评估w和b的好坏。可以理解为损失函数的大小,就是预测的y和真实的y的差异,损失值,就是差距的值,这个值越小,说明差距越小,模型性能越好,y预测越接近真实值。
    • 损失函数的定义,不同的模型有着不同的损失函数。线性回归中,通过预测值和真实值的差异,定义其损失函数。一组x的输入,对应了一个y的预测值输出,也对应了一个y的真实值,每一个样本的差值的平方,在求和,就得到了样本的预测的损失值。收到样本数量的影响,所以除以样本数。这就是均方差损失函数
    • 损失函数,这里设偏置b为0
    • e ˉ = 1 n ∑ i = 1 n x i 2 w 2 − 2 n ∑ i = 1 n x i y i w + 1 n ∑ i = 1 n y i 2 \bar e={\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} eˉ=n1i=1nxi2w2n2i=1nxiyiw+n1i=1nyi2

通过对样本的输入得到了关于w的损失函数,通过确定损失函数的最小值,就确定了最优的w,最小值处的w就是回归所求的最优w

这里是关于w的二次方程,通过导数等于零,可以得到损失函数的最小值

  • 矩阵求解

当输入的样本有多个特征时,每个特征的权重w应该不同,所以w也就变成了权重矩阵,x是样本的特征矩阵。

预测的函数(假设偏置b为0)
h = ∑ i n ( w i x i ) 也就是 h = X W h = \sum_i^n(w_ix_i)也就是h=XW h=in(wixi)也就是h=XW
损失函数
l o s s = ∣ ∣ h − y ∣ ∣ 2 loss = ||h-y||^2 loss=∣∣hy2
这里的 ∣ ∣ . ∣ ∣ 2 ||.||^2 ∣∣.∣2是欧几里得范数的平方,也就是矩阵中每个元素的平方和,这里是求每个预测值和真实值的差的平方和

展开
∣ ∣ X W − Y ∣ ∣ 2 = ( X W − Y ) T ( X W − Y ) ||XW-Y||^2 = (XW-Y)^T(XW-Y) ∣∣XWY2=(XWY)T(XWY)

对损失函数求导,导函数等于0时,就是损失函数的最小值

对矩阵求导,使得导函数等于0,可以得出
W = ( X T X ) − 1 X T Y W = (X^TX)^{-1}X^TY W=(XTX)1XTY

  • 链式求导(复合函数求导)

损失函数 l o s s = 1 n ( X W − y ) 2 loss = \frac{1}{n} (XW-y)^2 loss=n1(XWy)2

因为n是一个常数,并不会对求导的结果产生影响,这里定为2,求导可以简化计算

l o s s = 1 2 ( X W − y ) 2 loss=\frac{1}{2}(XW-y)^2 loss=21(XWy)2

l o s s = 1 2 u loss=\frac{1}{2}u loss=21u

u = X W − y u = XW-y u=XWy

u求导使用到矩阵的求导

KaTeX parse error: {equation} can be used only in display mode.

分别求导,在相乘得到

( X W − y ) X T (XW-y)X^T (XWy)XT

令表达式等于0,求出W

W = ( X T X ) − 1 X T Y W = (X^TX)^{-1}X^TY W=(XTX)1XTY

  • 机器学习API

sklearn.linear_model.LinearRegression

fit_intercept 是否计算偏置

模型属性

coef_ 权重

intercept_ 偏置

import numpy as np
from sklearn.linear_model import LinearRegressiondata=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]])model = LinearRegression(fit_intercept=False)
model.fit(data[:,:-1],data[:,-1])
print(model.coef_)
print(' ')
print(model.intercept_)
print(model.predict([[-3,-7,-2,-8,0,-6,-5,-9]]))'''
[ 0.4243965   7.32281732 15.05217218  3.5996297  12.05805264  1.7697295917.0276393  11.31212591]
0.0
[-309.]
'''

这篇关于【机器学习】朴素贝叶斯 决策树 随机森林 线性回归的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1100687

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个