当前位置: 首页 > news >正文

机器学习2 (笔记)(朴素贝叶斯,集成学习,KNN和matlab运用)

朴素贝叶斯模型

贝叶斯定理:

常见类型

算法流程

优缺点

集成学习算法

基本原理

常见方法

 KNN(聚类模型)

算法性质:

核心原理:

算法流程

优缺点

matlab中的运用


朴素贝叶斯模型

朴素贝叶斯模型是基于贝叶斯定理与特征条件独立假设的分类方法,在众多领域有广泛应用。

贝叶斯定理

贝叶斯定理解决的核心问题是,当出现新的信息或证据时,如何修正对某个事件发生概率的原有认知。它提供了一种基于先验知识和新证据来更新概率的方法,体现了概率推理的动态过程。

特征条件独立假设:假设给定类别下各个特征之间相互独立。

常见类型

高斯朴素贝叶斯:适用于特征变量为连续型数据,且这些数据服从高斯分布(正态分布)的情况。例如,在根据身高、体重等连续特征判断人的性别时,可假设这些特征在男性和女性群体中分别服从不同参数的高斯分布。

多项式朴素贝叶斯:常用于文本分类等场景,特征变量通常是离散的计数数据。比如在判断一篇文档是否属于某一主题时,以单词在文档中出现的次数作为特征,这些特征符合多项式分布。

伯努利朴素贝叶斯:适用于特征为二值变量的情况,即特征只有两种取值,如真 / 假、是 / 否等。例如在判断邮件是否为垃圾邮件时,可将邮件中某特定关键词的出现(是 / 否)作为二值特征。

算法流程

数据准备:收集数据并进行预处理,包括数据清洗、特征提取等。例如在文本分类中,需要对文本进行分词、去除停用词等操作。

计算先验概率:统计每个类别在训练数据集中出现的频率P(C),作为先验概率。比如在垃圾邮件分类中,统计垃圾邮件和正常邮件在训练集中所占的比例。

计算似然概率:根据特征条件独立假设,计算每个特征在不同类别下的条件概率

。例如在判断一封邮件是否为垃圾邮件时,计算某个关键词在垃圾邮件和正常邮件中出现的概率。

预测:对于新的样本,根据贝叶斯定理计算每个类别下的后验概率

,选择后验概率最大的类别作为预测结果。

,由于

对所有类别相同,所以只需比较分子部分。

优缺点

优点

算法简单高效:基于简单的概率计算,训练和预测速度快,对大规模数据集有较好的适应性。

所需数据量少:在数据较少的情况下仍能表现出较好的性能,且对数据的缺失值不太敏感。

可解释性强:通过计算概率来进行分类决策,结果相对容易理解,可解释每个类别预测的依据。

缺点

特征独立性假设强:实际应用中,特征之间往往存在一定相关性,这可能导致模型性能下降。例如在文本中,某些词汇可能存在语义关联,并不完全独立。

对输入数据的表达形式敏感:不同的特征表示方式可能会对模型效果产生较大影响,如文本分类中不同的分词方法。

集成学习算法

一种机器学习范式,它通过组合多个基学习器(Base Learner)来创建一个更强大、更稳健的模型,以提高模型的泛化能力和预测性能。以下从其原理、常见方法、应用场景、优缺点展开介绍:

基本原理

集成学习的核心思想基于 “三个臭皮匠,赛过诸葛亮” 的理念。不同的基学习器可能在处理数据的不同方面或特征上具有优势,通过将它们结合起来,可以互相补充,减少单一模型的偏差和方差,从而提升整体性能。例如,在预测房价的任务中,一个基学习器可能擅长捕捉房屋面积与价格的关系,另一个可能对房屋所在区域的影响把握更准,集成学习能综合二者优势,做出更准确的预测。

常见方法

Bagging(自举汇聚法)

原理:从原始训练数据集中有放回地随机采样,生成多个与原始数据集大小相同的子数据集,每个子数据集用于训练一个基学习器。由于采样的随机性,不同基学习器基于不同的数据子集进行训练,从而引入了多样性。例如,对于一个包含 1000 个样本的原始数据集,每次有放回地抽取 1000 个样本组成子数据集,多次抽取得到多个不同的子数据集。

代表算法:随机森林(Random Forest)是基于 Bagging 的典型算法,它以决策树为基学习器。在构建每棵决策树时,不仅对样本进行有放回采样,还在节点分裂时随机选择特征子集,进一步增加了决策树之间的差异。最终通过投票(分类任务)或平均(回归任务)的方式综合各决策树的结果。

Boosting(提升法)

原理:基学习器按顺序依次训练,每个新的基学习器会重点关注前一个基学习器预测错误的样本,通过不断调整样本权重,使得后续学习器能够更聚焦于难以分类或预测的样本。例如,在初始阶段,所有样本权重相同,当第一个基学习器训练完成后,将预测错误的样本权重增大,这样下一个基学习器在训练时就会更关注这些样本。

代表算法:Adaboost(自适应提升算法)是最早的 Boosting 算法之一,它通过迭代训练多个弱分类器,并为每个弱分类器赋予不同的权重,最终将这些弱分类器线性组合成一个强分类器。另一个重要的算法是梯度提升树(Gradient Boosting Tree,GBT),它以决策树为基学习器,通过不断拟合残差(即真实值与当前模型预测值的差值)来提升模型性能。

 KNN(聚类模型)

算法性质:

K - Means 属于无监督学习算法,旨在将数据集中的样本划分为 K 个不同的簇,使同一簇内样本相似度高,不同簇间样本相似度低。

核心原理:

随机选择 K 个点作为初始聚类中心,然后将每个样本分配到与其距离最近的聚类中心所在的簇。分配完成后,重新计算每个簇的中心(通常是簇内所有样本的均值)。不断重复样本分配和中心更新步骤,直到聚类中心不再变化或达到预设的迭代次数,此时认为聚类收敛。

算法流程

初始化:随机选择 K 个样本点作为初始聚类中心。

分配样本:计算每个样本到 K 个聚类中心的距离,将样本分配到距离最近的聚类中心所在的簇。

更新聚类中心:计算每个簇内样本的均值,以此更新聚类中心位置。

判断收敛:检查聚类中心是否变化,若变化则返回步骤 2 继续迭代;若不变或达到最大迭代次数,则结束算法。

优缺点

优点:原理简单,计算效率高,能快速处理大规模数据集;对处理数值型数据效果较好。

缺点:需事先指定聚类数 K,K 值选择往往依赖经验且可能影响结果;对初始聚类中心敏感,不同初始值可能导致不同聚类结果;对非凸形状的数据分布或存在噪声的数据聚类效果不佳。

matlab中的运用

1,导入数据*注意这里的变量名训练的和预测的名字要一致

2,matlab工具箱->分类学习器(或者classificationLearner)

(如果是回归学习器,就是reegressionLearner)

3,导入数据

有如下的训练方法

4,并行训练即可

5,导出模型就可以进行预测了

6,预测

第五步也可以采用导出代码来预测

在模型导出的时候选择

然后注释函数行,然后赋值trainingData就可以了

trainingData=x            %%%%%%%x为对应的数据

inputTable = trainingData;

predictorNames = {'VarName1', 'VarName2', 'VarName3', 'VarName4'};

predictors = inputTable(:, predictorNames);

response = inputTable.VarName5;

isCategoricalPredictor = [false, false, false, false];

classNames = categorical({'变色鸢尾'; '山鸢尾'; '维吉尼亚鸢尾'});

% 训练分类器

% 以下代码指定所有分类器选项并训练分类器。

template = templateLinear(...

'Learner', 'Logistic', ...

'Lambda', 'auto', ...

'BetaTolerance', 0.0001);

classificationLinear = fitcecoc(...

predictors, ...

response, ...

'Learners', template, ...

'ClassNames', classNames);

% 使用预测函数创建结果结构体

predictorExtractionFcn = @(t) t(:, predictorNames);

classificationLinearPredictFcn = @(x) predict(classificationLinear, x);

trainedClassifier.predictFcn = @(x) classificationLinearPredictFcn(predictorExtractionFcn(x));

% 向结果结构体中添加字段

trainedClassifier.RequiredVariables = {'VarName1', 'VarName2', 'VarName3', 'VarName4'};

trainedClassifier.ClassificationLinear = classificationLinear;

trainedClassifier.About = '此结构体是从分类学习器 R2023a 导出的训练模型。';

trainedClassifier.HowToPredict = sprintf('要对新表 T 进行预测,请使用: \n [yfit,scores] = c.predictFcn(T) \n将 ''c'' 替换为作为此结构体的变量的名称,例如 ''trainedModel''。\n \n表 T 必须包含由以下内容返回的变量: \n c.RequiredVariables \n变量格式(例如矩阵/向量、数据类型)必须与原始训练数据匹配。\n忽略其他变量。\n \n有关详细信息,请参阅 <a href="matlab:helpview(fullfile(docroot, ''stats'', ''stats.map''), ''appclassification_exportmodeltoworkspace'')">How to predict using an exported model</a>。');

% 提取预测变量和响应

% 以下代码将数据处理为合适的形状以训练模型。

%

inputTable = trainingData;

predictorNames = {'VarName1', 'VarName2', 'VarName3', 'VarName4'};

predictors = inputTable(:, predictorNames);

response = inputTable.VarName5;

isCategoricalPredictor = [false, false, false, false];

classNames = categorical({'变色鸢尾'; '山鸢尾'; '维吉尼亚鸢尾'});

% 执行交叉验证

KFolds = 5;

cvp = cvpartition(response, 'KFold', KFolds);

% 将预测初始化为适当的大小

validationPredictions = response;

numObservations = size(predictors, 1);

numClasses = 3;

validationScores = NaN(numObservations, numClasses);

for fold = 1:KFolds

trainingPredictors = predictors(cvp.training(fold), :);

trainingResponse = response(cvp.training(fold), :);

foldIsCategoricalPredictor = isCategoricalPredictor;

% 训练分类器

% 以下代码指定所有分类器选项并训练分类器。

template = templateLinear(...

'Learner', 'Logistic', ...

'Lambda', 'auto', ...

'BetaTolerance', 0.0001);

classificationLinear = fitcecoc(...

trainingPredictors, ...

trainingResponse, ...

'Learners', template, ...

'ClassNames', classNames);

% 使用预测函数创建结果结构体

classificationLinearPredictFcn = @(x) predict(classificationLinear, x);

validationPredictFcn = @(x) classificationLinearPredictFcn(x);

% 向结果结构体中添加字段

% 计算验证预测

validationPredictors = predictors(cvp.test(fold), :);

[foldPredictions, foldScores] = validationPredictFcn(validationPredictors);

% 按原始顺序存储预测

validationPredictions(cvp.test(fold), :) = foldPredictions;

validationScores(cvp.test(fold), :) = foldScores;

end

% 计算验证准确度

correctPredictions = (validationPredictions == response);

isMissing = ismissing(response);

correctPredictions = correctPredictions(~isMissing);

validationAccuracy = sum(correctPredictions)/length(correctPredictions);

决策树的可视化:

figure(1)

view ( trainingModel.ClassificationTree,’Mode’,’graph’)

相关文章:

机器学习2 (笔记)(朴素贝叶斯,集成学习,KNN和matlab运用)

朴素贝叶斯模型 贝叶斯定理&#xff1a; 常见类型 算法流程 优缺点 集成学习算法 基本原理 常见方法 KNN&#xff08;聚类模型&#xff09; 算法性质&#xff1a; 核心原理&#xff1a; 算法流程 优缺点 matlab中的运用 朴素贝叶斯模型 朴素贝叶斯模型是基于贝叶斯…...

ubuntu解决普通用户无法进入root

项目场景&#xff1a; 在RK3566上移植Ubuntu20.04之后普通用户无法进入管理员模式 问题描述 在普通用户使用sudo su试图进入管理员模式的时候报错 解决方案&#xff1a; 1.使用 cat /etc/passwd 查看所有用户.最后一行是 若无用户&#xff0c;则使用 sudo useradd -r -m -s /…...

Time Constant | RC、RL 和 RLC 电路中的时间常数

注&#xff1a;本文为 “Time Constant” 相关文章合辑。 机翻&#xff0c;未校。 How To Find The Time Constant in RC and RL Circuits June 8, 2024 &#x1f4a1; Key learnings: 关键学习点&#xff1a; Time Constant Definition: The time constant (τ) is define…...

数据结构测试题2

一、单选题&#xff08;每题 2 分&#xff0c;共20分&#xff09; 1. 栈和队列的共同特点是( A )。 A.只允许在端点处插入和删除元素 B.都是先进后出 C.都是先进先出 D.没有共同点 2. 用链接方式存储的队列&#xff0c;在进行插入运算时( C ) A. 仅修改头指针 B. 头…...

在虚拟机里运行frida-server以实现对虚拟机目标软件的监测和修改参数(一)(android Google Api 35高版本版)

frida-server下载路径 我这里选择较高版本的frida-server-16.6.6-android-x86_64 以root身份启动adb 或 直接在android studio中打开 adb root 如果使用android studio打开的话&#xff0c;最好选择google api的虚拟机&#xff0c;默认以root模式开启 跳转到下载的frida-se…...

mysql_store_result的概念和使用案例

mysql_store_result() 是 MySQL C API 中的一个函数&#xff0c;用于检索一个完整的结果集到一个客户端。当执行一个查询&#xff08;通常是 SELECT 查询&#xff09;并希望处理所有返回的数据时&#xff0c;可以使用此函数。 概念 mysql_store_result() 函数的原型如下&…...

Linux进程调度与等待:背后的机制与实现

个人主页&#xff1a;chian-ocean 文章专栏-Linux 前言&#xff1a; 当一个进程发起某种操作&#xff08;如I/O请求、信号、锁的获取等&#xff09;&#xff0c;但该操作需要的资源暂时不可用时&#xff0c;进程会被操作系统挂起&#xff0c;进入“等待队列”或“阻塞状态”。…...

网易云音乐歌名可视化:词云生成与GitHub-Pages部署实践

引言 本文将基于前一篇爬取的网易云音乐数据, 利用Python的wordcloud、matplotlib等库, 对歌名数据进行深入的词云可视化分析. 我们将探索不同random_state对词云布局的影响, 并详细介绍如何将生成的词云图部署到GitHub Pages, 实现数据可视化的在线展示. 介绍了如何从原始数据…...

单片机基础模块学习——DS18B20温度传感器芯片

不知道该往哪走的时候&#xff0c;就往前走。 一、DS18B20芯片原理图 该芯片共有三个引脚&#xff0c;分别为 GND——接地引脚DQ——数据通信引脚VDD——正电源 数据通信用到的是1-Wier协议 优点&#xff1a;占用端口少&#xff0c;电路设计方便 同时该协议要求通过上拉电阻…...

《网络数据安全管理条例》施行,企业如何推进未成年人个人信息保护(下)

文章目录 前言三、全流程推进未成年人个人信息保护1、处理前:未成年人个人信息处理的告知同意2、处理中:加强个人信息处理流程管理3、处理后:落实个人信息保护合规审计四、大型网络平台应每年发布社会责任报告前言 《网数条例》颁布前,我国已针对未成年人个人信息保护陆续…...

书生大模型实战营3

文章目录 L0——入门岛git基础Git 是什么&#xff1f;Git 中的一些基本概念工作区、暂存区和 Git 仓库区文件状态分支主要功能 Git 平台介绍GitHubGitLabGitee Git 下载配置验证下载 Git配置 Git验证 Git配置 Git常用操作Git简易入门四部曲Git其他指令 闯关任务任务1: 破冰活动…...

Spring Boot 集成 WebClient 实战教程 实现同步、异步请求处理以及响应式编程、响应式流、响应式Mono

该项目介绍springboot集成WebClient 实现服务的请求操作 示例中演示了,如何配置WebClient的请求头,请求参数等相关参数,实现同步、异步请求处理以及响应式编程、响应式流、响应式Mono。 为什么使用WebClient 不用RestTemplate 在 Spring Framework 5.0 及更高版本中,Res…...

C语言深入解析 printf的底层源码实现

深入解析 printf 的底层源码实现 printf 是 C 标准库中最常用的函数之一&#xff0c;用于格式化输出字符串。它的底层实现复杂且高效&#xff0c;包含多个模块化的函数和机制。本文结合 GNU C Library&#xff08;glibc&#xff09;的源码&#xff0c;详细分析 printf 的实现原…...

go 循环处理无限极数据

数据表结构&#xff1a; CREATE TABLE permission (id int(11) NOT NULL AUTO_INCREMENT COMMENT 权限ID,permission_name varchar(255) DEFAULT NULL COMMENT 权限名称,permission_url varchar(255) DEFAULT NULL COMMENT 权限路由,status tinyint(1) DEFAULT NULL COMMENT 权…...

C# Dynamic关键字

一、引言&#xff1a;开启动态编程之门 在 C# 的编程世界里&#xff0c;长久以来我们习惯了静态类型语言带来的严谨与稳定。在传统的 C# 编程中&#xff0c;变量的类型在编译时就已经确定&#xff0c;这就像是给每个变量贴上了一个固定的标签&#xff0c;在整个代码执行过程中…...

ReactNative react-devtools 夜神模拟器连调

目录 一、安装react-devtools 二、在package.json中配置启动项 三、联动 一、安装react-devtools yarn add react-devtools5.3.1 -D 这里选择5.3.1版本&#xff0c;因为高版本可能与夜神模拟器无法联动&#xff0c;导致部分功能无法正常使用。 二、在package.json中配置启…...

【教学类-89-02】20250128新年篇02——姓名藏头对联(星火讯飞+Python,五言对联,有横批)

背景需求&#xff1a; 过年了&#xff0c;我想用幼儿的名字写对联&#xff0c;但是我根本不会写&#xff0c;于是尝试让AI来写。 1.我班的孩子的名字都是2字和3字的 2.惊喜发现&#xff0c;AI它很快就能生成带名字的对联 但是观察发现&#xff0c;如果是二个名字的对联&#…...

装机爱好者的纯净工具箱

对于每一位电脑用户来说&#xff0c;新电脑到手后的第一件事通常是检测硬件性能。今天为大家介绍一款开源且无广告的硬件检测工具——入梦工具箱。 主要功能 硬件信息一目了然 打开入梦工具箱&#xff0c;首先看到的是硬件信息概览。这里不仅包含了内存、主板、显卡、硬盘等常…...

【新春不断更】数据结构与算法之美:二叉树

Hello大家好&#xff0c;我是但凡&#xff01;很高兴我们又见面啦&#xff01; 眨眼间已经到了2024年的最后一天&#xff0c;在这里我要首先感谢过去一年陪我奋斗的每一位伙伴&#xff0c;是你们给予我不断前行的动力。银蛇携福至&#xff0c;万象启新程。蛇年新春之际&#xf…...

网站结构优化:加速搜索引擎收录的关键

本文来自&#xff1a;百万收录网 原文链接&#xff1a;https://www.baiwanshoulu.com/9.html 网站结构优化对于加速搜索引擎收录至关重要。以下是一些关键策略&#xff0c;旨在通过优化网站结构来提高搜索引擎的抓取效率和收录速度&#xff1a; 一、合理规划网站架构 采用扁…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

uniapp 字符包含的相关方法

在uniapp中&#xff0c;如果你想检查一个字符串是否包含另一个子字符串&#xff0c;你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的&#xff0c;但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...

比较数据迁移后MySQL数据库和OceanBase数据仓库中的表

设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...

BLEU评分:机器翻译质量评估的黄金标准

BLEU评分&#xff1a;机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域&#xff0c;衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标&#xff0c;自2002年由IBM的Kishore Papineni等人提出以来&#xff0c;…...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...