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

数据挖掘(六)

数据挖掘(六)

文章目录

    • 数据挖掘(六)
      • 消除歧义
        • 从Twitter下载数据
        • 加载数据集并分类
      • 文本转换器
        • 词袋
        • N元语法
        • 其他特征
      • 朴素贝叶斯
        • 贝叶斯定理
        • 朴素贝叶斯算法
        • 算法应用实例
      • 应用
        • 抽取特征
        • 将字典转换为矩阵
        • 训练朴素贝叶斯分类器
        • 组装所有的部件
      • 完整代码

本文使用朴素贝叶斯进行社会媒体挖掘,消除社交媒体用语的其一。朴素贝叶斯算法在计算用于分类的概率时,为了简化计算假设各个特征之间是相互独立的,稍微扩展就能用于对其他类型数据集进行分类,且不依赖于数值特征。

消除歧义

文本称为无结构格式,虽然包含很多信息,但是却没有标题、特定格式,语法松散以及其他问题,导致难以从中提取有用信息。数据间联系紧密,行文中经常相互提及,交叉引用现象也很常见,因此从这种格式中提取信息难度很大。文本挖掘的一个难点在于歧义。

从Twitter下载数据
  1. 以区分Twitter消息中Python的意思为例,一条消息称为tweet,最多不能超过140个字符。“#”号经常用来表示消息的主题。实验的目的是根据消息的内容判断消息中的Python是不是编程语言。
  2. 从Twitter网站中下载语料,剔除垃圾信息后用于分类任务。由于访问外网的限制,数据是通过网络途径获取。
加载数据集并分类
  1. 消息存储格式近似于JSON,JSON格式不会对数据强加过多用于表示结构的信息,可以直接用JavaScript语言读取。JSON定义了如数字、字符串、数组、字典等基本对象,适合存储包含非数值类型的数据。如果数据集全都是数值类型,为了节省空间和事件,最好使用类似于numpy矩阵这样的格式来存储。我们的数据集和JSON对象的区别在于,每两条消息之间有一行空行,目的是防止新追加的消息和前面的消息混在一起。我们使用json库解析数据集,需要先根据空行把度进行的文件拆分成一个列表得到真正的消息对象。
import os 
import jsoninput_filename = os.path.join(os.getcwd(), 'data_mining', 'twitter', 'python_tweets.json')
classes_filename = os.path.join(os.getcwd(), 'data_mining', 'twitter', 'python_classes.json')
replicable_dataset = os.path.join(os.getcwd(), 'data_mining', 'twitter', 'replicable_dataset.json')
# tweets列表存储从文件中读进来的每条消息
tweets =[]
with open(input_filename) as inf:for line in inf:if len(line.strip()) == 0:continuetweets.append(json.loads(line)['text'])
print('加载了%d条tweets'%len(tweets))  

加载了95条tweets

  1. 对于像Twitter这样禁止直接分享数据集的情况,我们可以只分享消息编号,把消息编号及其类别保存下来。保存所有消息的类别很容易,遍历数据集抽取编号,然而我们无法确定以后能再次获得所有消息,因此类别和消息可能就无法对应,我们只输出实际能用到的类别。首先创建列表存储我们能再次获取到的消息的类别,然后创建字典为消息的编号和类别建立起映射关系。
tweets =[]
labels = []
with open(input_filename) as inf:for line in inf:if len(line.strip()) == 0:continuetweets.append(json.loads(line))         
with open(classes_filename) as inf:labels = json.load(inf)
dataset = [(tweet['id'], label) for tweet, label in zip(tweets, labels)]
# 把结果保存到replicable_dataset.json  
with open(replicable_dataset, 'w') as outf:json.dump(dataset, outf)

文本转换器

词袋
  1. 文本数据集包括图书、文章、网站、手稿、代码以及其他形式的文本,有多种测量方法可以吧文本转换成算法可以处理的形式。比如平均词长和平均句长可以用来预测文本的可读性,还有单词是否出现等。
  2. 一种最简单高效的模型是只统计数据集中每个单词的出现次数,我们创建一个矩阵,每行表示数据集中的一篇文档,每列代表一个词。矩阵中的每项为某个词在文档中的出现次数。
from collections import Counter
# 统计单词时通常把所有字母转换为小写
s = """She is such a charming woman, it's hard to forget""".lower()
words = s.split()
# Counter方法统计列表汇总各字符串出现次数
c = Counter(words)
# 输出出现次数最多的前5个单词
c.most_common(5)
  1. 词袋模型主要分为三种:第一种是使用词语实际出现次数作为词频,缺点是当文档长度差异明显时,词频差距会非常大。第二种是使用归一化后的词频,每篇文档中所有词语的词频之和为1,规避了文档长度对词频的影响。第三种是使用二值特征来表示,单词在文档中出现值为1,不出现值为0。更通用的规范化方法叫做词频逆文档频率法(tf-idf),该加权方法用词频来代替词的出现次数,然后再用词频除以包含该词的文档的数量。Python有很多用于处理文本的库,比如NLTK自然语言处理工具集库,在分词方面提供了更多选择。
N元语法
  1. 比起用单个词作特征,使用N元语法能更好地描述文档,N元语法指由几个连续的词组成的子序列,可以理解为每条消息里一组连续的词。N元语法的计算方法和计算单个词语方法相同,我们把构成N元语法的几个词看成是词袋中的一个词。N元语法作为特征的数据集中每一项就变成了N元语法在给定文档中的词频。
  2. N元语法中的参数n,对于英语而言,一开始取2到5个值就可以,有些应用可能要使用更高的值。比如说当n取3时,我们从*Always look on the bright side of life.*中抽取前几个N元语法。第一个三元语法是Always look on,第二个是look on the,第三个是on the bright。几个N元语法有重合,其中三个词有不同程度的重复。
  3. N元语法比起单个词的优点是不用通过大量的计算,就提供了有助于理解词语用法的上下文信息,缺点是特征矩阵变得更为稀疏。对于社交媒体所产生的的内容以及其他短文档,N元语法不可能出现在多篇不同的文档中,除非是转发。然而在长文档中,N元语法就很有效。文档的另一种N元语法关注的不是一组词而是一组字符,字符N元语法有助于发现拼写错误。
其他特征
  1. 除了N元语法外,还可以抽取句法特征比如特定词语在句子中的用法。对于需要理解文本含义的数据挖掘应用,往往会用到词性。

朴素贝叶斯

贝叶斯定理
  1. 朴素贝叶斯概率模型是对贝叶斯统计方法的朴素解释为基础的,特征类型和形式多样的数据集可以用它进行分类。从频率轮者角度出发看问题的思想,假定数据遵从某种分布,我们的目标是确定该种分布的几个参数,我们假定参数是固定的,然后用自己的模型来套用数据,甚至通过测试来证明数据与我们的模型相吻合。相反,贝叶斯统计实际上是根据普通人实际的推理方式来建模。我们用拿到的数据来更新模型对某事件即将发生的可能性的预测结果。
  2. 在贝叶斯统计学中,我们使用数据来描述模型,而不是使用模型来描述数据。贝叶斯定理只在计算在已知B发生的情况下,A发生的概率是多少,即P(A|B)的值。大多数情况下B是被观察事件,A是预测结果。对于数据挖掘来说,B通常是观察样本个体,A是被预测个体所属类别。

P ( A ∣ B ) = P ( B ∣ A ) P ( A ) P ( B ) P(A|B) = \frac{P(B|A)P(A)}{P(B)} P(AB)=P(B)P(BA)P(A)

相关文章:

数据挖掘(六)

数据挖掘(六) 文章目录 数据挖掘(六)消除歧义从Twitter下载数据加载数据集并分类文本转换器词袋N元语法其他特征朴素贝叶斯贝叶斯定理朴素贝叶斯算法算法应用实例应用抽取特征将字典转换为矩阵训练朴素贝叶斯分类器组装所有的部件完整代码本文使用朴素贝叶斯进行社会媒体挖…...

Netty 组件介绍 - Channel

主要作用 close()可以用来关闭 channelcloseFuture()用来处理 channel 的关闭sync方法作用是同步等待 channel 关闭而 addListener 方法是异步等待 channel 关闭pipeline()方法添加处理器write()方法将数据写入writeAndFlush()方法将数据写入并刷出...

时间序列预测(十)——长短期记忆网络(LSTM)

目录 一、LSTM结构 二、LSTM 核心思想 三、LSTM分步演练 (一)初始化 1、权重和偏置初始化 2、初始细胞状态和隐藏状态初始化 (二)前向传播 1、遗忘门计算(决定从上一时刻隐状态中丢弃多少信息) 2、…...

Flink CDC 同步 Mysql 数据

文章目录 一、Flink CDC、Flink、CDC各有啥关系1.1 概述1.2 和 jdbc Connectors 对比 二、使用2.1 Mysql 打开 bin-log 功能2.2 在 Mysql 中建库建表准备2.3 遇到的坑2.4 测试 三、番外 一、Flink CDC、Flink、CDC各有啥关系 Flink:流式计算框架,不包含 …...

【python实战】-- 根据文件名分类

系列文章目录 文章目录 系列文章目录前言一、根据文件名分类到不同文件夹总结 前言 一、根据文件名分类到不同文件夹 汇总指定目录下所有满足条件的文件到新文件夹 import os import shutil import globsource_dir rD:\Users\gxcaoty\Desktop\39642 # 源目录路径 destinatio…...

蓝桥双周赛 第21场 小白入门赛

1 动态密码 思路&#xff1a;可以直接填空也可以写程序 void solve() {int a 20241111;stack<int> stk;while(a){stk.push(a % 2);a / 2;}while(stk.size()){cout << stk.top();stk.pop();}} 2 购物车里的宝贝 思路&#xff1a;总体异或和为0即可说明可分成一样…...

Linux 进程间通信 共享内存_消息队列_信号量

共享内存 共享内存是一种进程间通信&#xff08;IPC&#xff09;机制&#xff0c;它允许多个进程访问同一块内存区域。这种方法可以提高效率&#xff0c;因为数据不需要在进程之间复制&#xff0c;而是可以直接在共享的内存空间中读写。 使用共享内存的步骤通常包括&#xff1a…...

Mybatis自定义日志打印

一&#xff0c;目标 替换?为具体的参数值统计sql执行时间记录执行时间过长的sql&#xff0c;并输出信息到文档&#xff08;以天为单位进行存储&#xff09; 平常打印出来的sql都是sql一行&#xff0c;参数一行。如图&#xff1a; 二&#xff0c;理论 这里我们主要通过Mybatis…...

【在Linux世界中追寻伟大的One Piece】Socket编程TCP(续)

目录 1 -> V2 -Echo Server多进程版本 2 -> V3 -Echo Server多线程版本 3 -> V3-1 -多线程远程命令执行 4 -> V4 -Echo Server线程池版本 1 -> V2 -Echo Server多进程版本 通过每个请求&#xff0c;创建子进程的方式来支持多连接。 InetAddr.hpp #pragma…...

面试高频问题:C/C++编译时内存五个分区

在面试时,C/C++编译时内存五个分区是经常问到的问题,面试官通过这个问题来考察面试者对底层的理解。在平时开发时,懂编译时内存分区,也有助于自己更好管理内存。 目录 内存分区的定义 内存分区的重要性 代码区 数据区 BSS区 堆区 栈区 静态内存分配 动态内存分配…...

阅读博士论文《功率IGBT模块健康状态监测方法研究》

IGBT的失效可以分为芯片级失效和封装级失效。其中封装级失效是IGBT模块老化的主要原因&#xff0c;是多种因素共同作用的结果。在DBC的这种结构中&#xff0c;流过芯片的负载电流通过键合线传导到 DBC上层铜箔&#xff0c;再经过端子流出模块。DBC与芯片和提供机械支撑的基板之…...

Spring ApplicationContext接口

ApplicationContext接口是Spring框架中更高级的IoC容器接口&#xff0c;扩展了BeanFactory接口&#xff0c;提供了更多的企业级功能。ApplicationContext不仅具备BeanFactory的所有功能&#xff0c;还增加了事件发布、国际化、AOP、资源加载等功能。 ApplicationContext接口的…...

[perl] 数组与哈希

数组变量以 符号开始&#xff0c;元素放在括号内 简单举例如下 #!/usr/bin/perl names ("a1", "a2", "a3");print "\$names[0] $names[0]\n"; print "size: ",scalar names,"\n";$new_names shift(names); …...

电机学习-SPWM原理及其MATLAB模型

SPWM原理及其MATLAB模型 一、SPWM原理二、基于零序分量注入的SPWM三、MATLAB模型 一、SPWM原理 SPWM其实是相电压的控制方式&#xff0c;定义三相正弦相电压的表达式&#xff1a; { V a m V m sin ⁡ ω t V b m V m sin ⁡ ( ω t − 2 3 π ) V c m V m sin ⁡ ( ω t 2…...

群控系统服务端开发模式-应用开发-腾讯云上传工厂及七牛云上传工厂开发

记住业务流程图&#xff0c;要不然不清楚自己封装的是什么东西。 一、腾讯云工厂开发 切记在根目录下要安装腾讯云OSS插件&#xff0c;具体代码如下&#xff1a; composer require qcloud/cos-sdk-v5 在根目录下extend文件夹下Upload文件夹下channel文件夹中&#xff0c;我们修…...

【深度学习滑坡制图|论文解读3】基于融合CNN-Transformer网络和深度迁移学习的遥感影像滑坡制图方法

【深度学习滑坡制图|论文解读3】基于融合CNN-Transformer网络和深度迁移学习的遥感影像滑坡制图方法 【深度学习滑坡制图|论文解读3】基于融合CNN-Transformer网络和深度迁移学习的遥感影像滑坡制图方法 文章目录 【深度学习滑坡制图|论文解读3】基于融合CNN-Transformer网络和…...

《计算机原理与系统结构》学习系列——处理器(下)

系列文章目录 目录 流水线冒险数据冒险数据相关与数据冒险寄存器先读后写旁路取数使用型冒险阻塞 控制冒险分支引发的控制冒险假设分支不发生动态分支预测双预测位动态分支预测缩短分支延迟带冒险控制的单周期流水线图 异常MIPS中的异常MIPS中的异常处理另一种异常处理机制非精…...

JDK新特性(8-21)数据类型-直接内存

目录 Jdk 新特性 JDK 8 特性 默认方法实现作用:可以使接口更加灵活&#xff0c;不破坏现有实现的情况下添加新的方法。 函数式接口 StreamAPI JDK 9 特性 JDK 10 特性 JDK 11 特性 JDK 14 特性 JDK 17 特性 JDK 21 特性 数据类型 基本数据类型和引用数据类型的区别…...

003-Kotlin界面开发之声明式编程范式

概念本源 在界面程序开发中&#xff0c;有两个非常典型的编程范式&#xff1a;命令式编程和声明式编程。命令式编程是指通过编写一系列命令来描述程序的运行逻辑&#xff0c;而声明式编程则是通过编写一系列声明来描述程序的状态。在命令式编程中&#xff0c;程序员需要关心程…...

QT pro项目工程的条件编译

QT pro项目工程的条件编译 前言 项目场景&#xff1a;项目中用到同一型号两个相机&#xff0c;同时导入两个版本有冲突&#xff0c;编译不通过&#xff0c; 故从编译就区分相机导入调用&#xff0c;使用宏区分 一、定义宏 在pro文件中定义宏&#xff1a; DEFINES USE_Cam…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...

免费数学几何作图web平台

光锐软件免费数学工具&#xff0c;maths,数学制图&#xff0c;数学作图&#xff0c;几何作图&#xff0c;几何&#xff0c;AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...

PHP 8.5 即将发布:管道操作符、强力调试

前不久&#xff0c;PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5&#xff01;作为 PHP 语言的又一次重要迭代&#xff0c;PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是&#xff0c;借助强大的本地开发环境 ServBay&am…...

Leetcode33( 搜索旋转排序数组)

题目表述 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...

MySQL的pymysql操作

本章是MySQL的最后一章&#xff0c;MySQL到此完结&#xff0c;下一站Hadoop&#xff01;&#xff01;&#xff01; 这章很简单&#xff0c;完整代码在最后&#xff0c;详细讲解之前python课程里面也有&#xff0c;感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...

DAY 26 函数专题1

函数定义与参数知识点回顾&#xff1a;1. 函数的定义2. 变量作用域&#xff1a;局部变量和全局变量3. 函数的参数类型&#xff1a;位置参数、默认参数、不定参数4. 传递参数的手段&#xff1a;关键词参数5 题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一…...