机器学习篇-day07-朴素贝叶斯和特征降维

news2024/10/23 3:17:58

一. 朴素贝叶斯算法

朴素贝叶斯算法介绍

利用概率值进行分类的一种机器学习算法

复习概率

相互独立:如果P(AB)= P(A)P(B),则称事件A与事件B相互独立

比如:女神喜欢程序员的概率,女神喜欢产品经理的概率,两个事件没有关系

简言之

  1. 条件概率:在去掉部分样本的情况下,计算某些样本的出现的概率,表示为:P(B|A)

  2. 联合概率:多个事件同时发生的概率是多少,表示为:P(AB) = P(B)*P(A|B)

贝叶斯公式

公式

举例解释

朴素贝叶斯

朴素贝叶斯在贝叶斯基础上增加:特征条件独立

假设,即:特征之间是互为独立的。此时,联合概率的计算即可简化为:

  1. P(程序员,超重|喜欢) = P(程序员|喜欢) * P(超重|喜欢)

  2. P(程序员,超重) = P(程序员) * P(超重)

条件不独立: P(AB) = P(A) * P(B|A) = P(B) * P(A|B)

条件独立: P(AB) = P(A) * P(B)

拉普拉斯平滑系数

为了避免概率值为 0,我们在分子和分母分别加上一个数值,这就是拉普拉斯平滑系数的作用

总结

案例-商品情感分类

API

流程

代码

import jieba  # 用来做分词
from sklearn.naive_bayes import MultinomialNB  # 贝叶斯模型
from sklearn.feature_extraction.text import CountVectorizer  # 词频统计
​
import numpy as np
import pandas as pd
​
​
def demo01_naive_bayes():
    # 数据获取
    data = pd.read_csv('data/书籍评价.csv', encoding='gbk')
    # data.info()
​
    # 数据基本处理
    # 处理标签      好评 1  差评 0
    data['评价'] = np.where(data['评价'] == '好评', 1, 0)
    y = data['评价']
    # print(data.head())
    # 停用词表
    stop_words = []
    with open('data/stopwords.txt', 'r', encoding='utf-8') as f:
        lines = f.readlines()
        stop_words = [line.strip() for line in lines]
    stop_words = list(set(stop_words))  # 去重
    # print(stop_words)
    # 评论文本分词
    comment_list = [','.join(jieba.lcut(line)) for line in data['内容']]
    # print(comment_list)
    # 统计词频, 作为特征
    transformer = CountVectorizer(stop_words=stop_words)
    x_train = transformer.fit_transform(comment_list)
    """
    fit_transform(comment_list) 方法首先会对输入的 comment_list 进行拟合,学习其中的词汇表。
    然后将每条评论转换为一个词频向量,形成一个稀疏矩阵 x_train。稀疏矩阵是一种高效的存储方式,适用于大部分元素为零的情况。
    矩阵中的每一行代表一条评论,每一列代表词汇表中的一个单词,矩阵中的值表示该单词在这条评论中出现的次数
    """
    # print(x_train)
    my_names = transformer.get_feature_names_out()
    # print(my_names)
​
    x = x_train.toarray()
    # 3-5 准备训练集测试集
    x_train = x[:10, :]         # 准备训练集
    y_train = y.values[0:10]
    x_test = x[10:, :]          # 准备测试集
    y_test = y.values[10:]
    print('x_train.shape-->',data.内容[10:])
    print('y_train.shape-->',y_test)
​
    # 4.模型训练
    # 4-1 实例化贝叶斯 # 添加拉普拉修正平滑参数
    mymultinomialnb = MultinomialNB()
    mymultinomialnb.fit(x_train, y_train)
    
    # 5.模型预测
    y_pred = mymultinomialnb.predict(x_test)
    print('预测值-->', y_pred)
    print('真实值-->', y_test)
    
    # 6.模型评估
    myscore = mymultinomialnb.score(x_test, y_test)
    print('myscore-->', myscore)
​
​
if __name__ == '__main__':
    demo01_naive_bayes()
​

二. 特征降维

特征降维

为什么要进行特征降维

特征对训练模型时非常重要的;用于训练的数据集包含一些不重要的特征,可能导致模型泛化性能不佳

  1. 某些特征的取值较为接近,其包含的信息较少

  2. 希望特征独立存在对预测产生影响,两个特征同增同减非常相关,不会给模型带来更多的信息

  3. 解决模型过拟合

目的

指在某些限定条件下,降低特征个数

特征降维涉及的知识面比较多,当前阶段常用的方法:

​ (1)低方差过滤法

​ (2)PCA(主成分分析)降维法

​ (3)相关系数(皮尔逊相关系数、斯皮尔曼相关系数)

低方差过滤法

低方差过滤法

指的是删除方差低于某些阈值的一些特征

  1. 特征方差小:特征值的波动范围小,包含的信息少,模型很难学习到信息

  2. 特征方差大:特征值的波动范围大,包含的信息相对丰富,便于模型进行学习

API

代码

# 1.导入依赖包
from sklearn.feature_selection import VarianceThreshold
import pandas as pd
​
# 2. 读取数据集
data = pd.read_csv('data/垃圾邮件分类数据.csv')
print(data.shape) # (971, 25734)
​
​
# 3. 使用方差过滤法
transformer = VarianceThreshold(threshold=0.1)
data = transformer.fit_transform(data)
print(data.shape) # (971, 1044)
​

主成分分析法(PCA)

主成分分析

PCA 通过对数据维数进行压缩,尽可能降低原数据的维数(复杂度)损失少量信息,在此过程中可能会舍弃原有数据、创造新的变量。

API

代码

# 1.导入依赖包
from sklearn.decomposition import PCA
from sklearn.datasets import load_iris
​
# 2. 加载数据集
x, y = load_iris(return_X_y=True)
print(x[:5])
​
​
# 3. PCA,保留指定比例的信息
transformer = PCA(n_components=0.95)
x_pca = transformer.fit_transform(x)
print(x_pca[:5])
​
​
# 4. PCA,保留指定数量特征
transformer = PCA(n_components=2)
x_pca = transformer.fit_transform(x)
print(x_pca[:5])
​
​

相关系数法

相关系数:反映特征列之间(变量之间)密切相关程度的统计指标

常见2个相关系数:皮尔逊相关系数、斯皮尔曼相关系数

去掉高度相关的特征(相关系数)

相关系数

皮尔逊相关系数
斯皮尔曼相关系数

代码

先看显著性(不相关概率 => 相关系数的可信度, 低于显著性的阈值表示可信的.), 再看相关系数,

# 1.导入依赖包
import pandas as pd
from sklearn.feature_selection import VarianceThreshold
from scipy.stats import pearsonr
from scipy.stats import spearmanr
from sklearn.datasets import load_iris
​
# 2.读取数据集(鸢尾花数据集)
data = load_iris()
data = pd.DataFrame(data.data, columns=data.feature_names)
​
# 3. 皮尔逊相关系数
corr = pearsonr(data['sepal length (cm)'], data['sepal width (cm)'])
print(corr, '皮尔逊相关系数:', corr[0], '不相关性概率:', corr[1])
# (-0.11756978413300204, 0.15189826071144918) 皮尔逊相关系数: -0.11756978413300204 不相关性概率: 0.15189826071144918
​
# 4. 斯皮尔曼相关系数
corr = spearmanr(data['sepal length (cm)'], data['sepal width (cm)'])
print(corr, '斯皮尔曼相关系数:', corr[0], '不相关性概率:', corr[1])
# SpearmanrResult(correlation=-0.166777658283235, pvalue=0.04136799424884587) 斯皮尔曼相关系数: -0.166777658283235 不相关性概率: 0.04136799424884587
​

总结

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

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

相关文章

詹妮弗洛佩兹的比基尼影集显示,与本阿弗莱克离婚期间她正处于最勇敢的时刻

詹妮弗洛佩兹已然正式终结了其饱含浓情蜜意的时代!此乃我……当下之时代,且于同本阿弗莱克离异之际,步入了迄今最为英勇无畏的时代,此番全新的摄影集便是有力的明证。 10 月 9 日,《采访》杂志展示了一系列洛佩兹用作…

水文监测系统的多功能性与作用深度剖析

在现代水利管理中,水文监测系统作为重要的技术手段,正发挥着日益关键的作用。这一系统,也被称为水文信息自动化采集系统,通过自动或半自动的方式,实现了对江河、湖泊、水库等水体以及地下水的实时监测,涵盖…

功能强大且简单易用的实时算法视频监控,智慧快消开源了。

智慧快消视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。 基于多年的深度…

jmeter 对 dubbo 接口测试是怎么实现的?有哪几个步骤

目录 前言 一.先了解下 dubbo 的原理,最好自己搭建一个案例可参考以下方式搭建 http://09792bb8.wiz03.com/share/s/09uiKU3j2kR120MIpT2AdLm70pfBmE1zFApv2jiDZ01GhE8j 二.编写 dubbo 测试脚本 前言 最近使用工作中使用jmeter调用dubbo接口进行接口测试&#xf…

SLAM中的加权最小二乘法

一、数学描述 机器人携带传感器在环境中运动可由 运动方程 和 观测方程 描述。 其中 表示时刻; 表示 时刻的位姿; 是运动传感器的读数或者输入; 为路标点; 表示观测数据。 为运动噪声,例如对机器人下达了前进 1m 的指…

大模型时代,云原生数据底座的创新和实践

本文整理自百度云智峰会 2024 —— 云原生论坛的同名演讲。 大模型毫无疑问是当前技术发展的热点,成为大家默认的提升生产力工具。 但是,大模型训练主要使用互联网上的公开数据为主,没有企业内部的数据,所以大模型本质上自带的都…

并行 parallel broadcast partition pruning 分区裁剪 optimizer_dynamic_sampling=7

insert into abc 没有PDML所以不是全部并行 只有select 的情况 全部并行,没有 px send broadcast ,所以rows没从103M变成103*8M select *from A,B where A.Pkey B.Pkey and A.Pkey XX A B表都会进行分区裁剪 ----并行为什么更…

定了!OPPO全旗舰新品10月24日发布

今日,OPPO宣布将于2024年10月24日19:00举办OPPO Find X8系列及旗舰生态新品发布会,以全新一代的年度影像旗舰 OPPO Find X8系列为核心,通过新一代的OPPO Enco X3旗舰耳机、OPPO Pad 3 Pro旗舰平板,以及再度升级的安卓全…

解决低版本pytorch和onnx组合时torch.atan2()不被onnx支持的问题

解决这个问题,最简单的当然是升级pytorch和onnx到比较高的版本,例如有人验证过的组合: pytorch2.1.1cu118, onnxruntime1.16.3 但是因为你的模型或cuda环境等约束,不能安装这么高的版本的pytorch和onnx组合时(例如我的环境是pytorch1.12&…

单细胞转录组亚群分析

1 单细胞转录组亚群常见分析内容 重磅综述:三万字长文读懂单细胞RNA测序分析的最佳实践教程 (原理、代码和评述) 如何使用Bioconductor进行单细胞分析? 单细胞转录组亚群分析的内容根据样品数目多少,可以分为单个样…

开源项目 - 轻量级人体姿态 人体关键点检测 机器视觉 深度学习

开源项目 - 轻量级人体姿态 人体关键点检测 机器视觉 深度学习 项目地址:https://gitcode.net/EricLee/light_pose 1、数据集来源:coco2017 数据集 * coco 数据集官方网站:https://cocodataset.org/#home * [数据集下载地址(百度网盘 Pa…

CogVideoX:Text-to-Video Diffusion Models with An Expert Transformer

研究背景 背景介绍: 这篇文章的研究背景是文本到视频模型的快速发展,特别是Transformer架构和扩散模型的应用。早期尝试预训练和扩展Transformer生成视频已经显示出巨大潜力,如CogVideo和Phenaki。扩散模型在多模态生成方面也取得了显著进展&#xff0c…

数据结构 -- 排序算法

一 排序 1.1 排序的概念 所谓排序,就是一种使一串数据记录,按照其中的某个或某些关键字的大小,递增或递减地组织起来的操作。 从排序方式上,排序算法一般被分为比较排序和非比较排序。从比较排序的内容上,它一般被分为…

Excel:vba实现拆分单元格成一字一单元格

我拿到的表格如下: 我想实现的表格效果如下: 要求就是:将A列的千字文拆分成一个单元格一个字,并整理成4列 我这里是将效果呈现到一个新的表里面,没有在原表里面(在原表里…

SpringBoot统一日志框架

在项目开发中,日志十分的重要,不管是记录运行情况还是定位线上问题,都离不开对日志的分析。 1.日志框架的选择 市面上常见的日志框架有很多,它们可以被分为两类:日志门面(日志抽象层)和日志实…

使用 PyTorch 构建 LSTM 股票价格预测模型

目录 引言准备工作1. 训练模型(train.py)2. 模型定义(model.py)3. 测试模型和可视化(test.py)使用说明模型调整结论 引言 在金融领域,股票价格预测是一个重要且具有挑战性的任务。随着深度学习…

【观察】超聚变:跨越智能算力“四座大山”,全方位重构“智算底座”

毫无疑问,今天在人工智能的推动下,企业数智化转型已进入规模化“倍增创新”的阶段,尤其是以大模型为代表的AI技术加速演进,以及应用场景的不断拓展加深,都让各类AI创新应用如雨后春笋般涌现,并加速惠及千行…

C++中cout的一些扩展

需要添加<iomanip>头文件 cout有许多扩展功能&#xff0c;比如一直很麻烦的保留小数数位的问题。 这里用几个问题来引入 cout实现保留小数数位 #include<iostream> #include<iomanip> using namespace std; int main(){double x123.345;double y342.324…

【未公开0day】金和OAC6 SignUpload SQL注入漏洞【附poc】

免责声明&#xff1a;本文仅用于技术学习和讨论。请勿使用本文所提供的内容及相关技术从事非法活动&#xff0c;若利用本文提供的内容或工具造成任何直接或间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果均与文章作者及本账号无关。 fofa语…

2024/10/14 英语每日一段

Advocates of the working pattern—100% of the work done in 80% of the time for 100% pay—claim the shorter working week boosts productivity, public health and builds a society “where we work to live, rather than live to work”. But the TaxPayers’ Allianc…