日志分类以及TFIDF
TF的概念是Term Frequent,是一个单词出现的频率,是一个局部概念,就是这个单词在指定文件中出现的频率,公式如下:

但是呢,这个TF其实很没有说服力,比如the,a之类的频率很高,但是其实不能实现很好地分类标志,尽管可以在停用词中进行禁用,但是很多单词还是无法全部禁用干净;这个时候就引入了IDF,Inverse Document Frequent,反向文档频率(我称之为区分度公式),公式是
idf = log(N/d)
N是文档数量,存在该单词的文档的个数,这里IDF是一个全局概念,是一个单词在全局的分布情况,分布的越少,idf的值越高;IDF实现了"对于出现频率低"的单词赋予比较高的权重,比如"越位",是一个专业术语,一般只是出现在足球相关的文章中,那么,这个词的IDF就会比较大,或者说这个词的区分度会比较大。
TFIDF = TF(t, d) * IDF(t)
这里强调一下,TFIDF是一种评分,TFIDF计算出来的结果是要作为特征值写入到稀疏矩阵的。
下面说一下对于新闻分类的套路;首先是加载所有的新闻训练样本,然后进行分词,将分词(term)放入到一张大表中,这是第一张大表:Term(特征)字典表;Term字典表的形成过程:计算每个Term的TFIDF(看到了,TFIDF是term的,在NPL中,每个term就是一个特征,或者说一个维度);这样就形成了一张key-value表,key就是term的hash值,value就是term的tfidf的值;这里解释一下,所谓的Hash算法,是指对于每个分词进行Hash取值,这个值就是分词的索引;在这个字典表的索引;在文本挖掘里面,每个分词就是特征,对于分词取Hash之后,其实就是特征索引值,然后找到对应的特征做统计;为什么要做这么做?简化流程,否则需要遍历整张表来查找匹配Term;如果采用Hash的方式,取要查找的分词的hansh值,直接过去到了索引,将term的比较转化为了索引值的定位,简化的查询的过程;
第一张字典表有了,下面就是形成第二张大表:样本表;新闻分类是要进行训练的;来了一条样本之后,需要进行分词,然后取各个分词的hash值,拿着hash值到字典表中找对应的tfidf值,然后把tfidf填充到样本表中同字典表索引的位置;如此形成一行;所以一条样本(新闻)其实不会填充几个term,很多单元格都是空着的;如果多条记录之后,形成了什么?形成了稀疏矩阵。
采用hash算法获取索引,那么碰撞了怎么办?所以这张哈希表一定要大,默认的是2.18,分析云用的是2.20
比如"美国",这个特征,取hash值为242,首先到字典表索引242中找到tfidf值;然后在样本(稀疏表)的列索引242的位置设置tfidf值;这样,就形成了一个特征向量(一个稀疏的向量/矩阵)。
train的这些样本都是可以作为未来比较的原始样本;设想新来了一条新闻记录,然后从任意类别中抽出来一个(特征向量),将两个特征向量基于余弦相似度衡量,根据余弦值来判断是否是同类新闻;什么是余弦相似度?
cos(x) = x * y / ||x|| * ||y||
对于稀疏矩阵场景,需要使用余弦定理,对于为0的特征,分子是0,所以适用(不过两者都是0就跪了)
对于新闻场景还可以继续进行训练,就是基于贝叶斯来计算一段文字是某个分类新闻的概率;这个原理就是,计算某段文字中各个单词是每一种分类的概率,然后把这些概率做相乘;那么怎么计算概率呢?这里采用其实是一半贝叶斯公式,我们知道贝叶斯公式如下:

在这里,B代表类别,A代表具体的某个文档(由各个分词组成);在贝叶斯公式中,文档A是分类B的概率的计算是可以转化为P(A1|B) * P(A2|B) * P(A3|B)...*P(B),Ai是文档A的分词;根据条件我们是可以把类别B某个具体分词的概率统计出来,分类B占全局分类的概率P(B)也是可以求出来;对于P(A),因为所有的元素P(A)的概率都是一样的,所以这里可以忽略不记。直接比较分子,谁大,那么谁就是该分类。
在我们日志分析云中并没有采用这种(朴素贝叶斯)方式,因为该方式是应用于分类已经很清晰的场景下;而我们的场景下是会有新的日志类型产生。
日志分类以及TFIDF的更多相关文章
- mysql日志分类
mysql的日志分类: (1)错误日志:记录mysql服务的启动,运行,停止mysql服务时出现的问题 [mysqld] log_error=[/path/filename] (2)通用查询日志:记录 ...
- IntelliJ IDEA中日志分类显示设置
说明:很遗憾,IDEA中无法实现日志分类查看,比如只能显示INFO级别的,但是可以有搜索功能[Ctrl]+[F].好像找不到好用的插件,Andorid Studio好像有一个插件可以. 解决方式: 直 ...
- 美团店铺评价语言处理以及分类(tfidf,SVM,决策树,随机森林,Knn,ensemble)
第一篇 数据清洗与分析部分 第二篇 可视化部分, 第三篇 朴素贝叶斯文本分类 支持向量机分类 支持向量机 网格搜索 临近法 决策树 随机森林 bagging方法 import pandas as pd ...
- Log4Net日志分类和自动维护
背景 在程序中,我们调试运行时信息,Log4Net是一个不错的解决方案.不知道是我用的不好,用到最后反而都不想看日志了.原因是因为我n个功能使用的默认的Logger来记录日志,这样以来,所有功能记录的 ...
- 文本分类(TFIDF/朴素贝叶斯分类器/TextRNN/TextCNN/TextRCNN/FastText/HAN)
目录 简介 TFIDF 朴素贝叶斯分类器 贝叶斯公式 贝叶斯决策论的理解 极大似然估计 朴素贝叶斯分类器 TextRNN TextCNN TextRCNN FastText HAN Highway N ...
- tomcat日志分类
综合:Tomcat下相关的日志文件 Cataline引擎的日志文件,文件名catalina.日期.log Tomcat下内部代码丢出的日志,文件名localhost.日期.log(jsp页面内部错误的 ...
- 大数据学习——flume日志分类采集汇总
1. 案例场景 A.B两台日志服务机器实时生产日志主要类型为access.log.nginx.log.web.log 现在要求: 把A.B 机器中的access.log.nginx.log.web.l ...
- Oracle-归档日志详解(运行模式、分类)
一.Oracle日志分类 分三大类: Alert log files--警报日志,Trace files--跟踪日志(用户和进程)和 redo log 重做日志(记录数据库的更改 ...
- 文本分类四之权重策略:TF-IDF方法
接下来,目的就是要将训练集所有文本文件(词向量)统一到同一个词向量空间中.在词向量空间中,事实上不同的词,它的权重是不同的,它对文本分类的影响力也不同,为此我们希望得到的词向量空间不是等权重的空间,而 ...
随机推荐
- Linux操作系统-CentOS6启动流程和服务管理
Linux操作系统-CentOS6启动流程和服务管理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Linux组成 1>.Linux: kernel+rootfs ker ...
- 手写二叉树-先序构造(泛型)-层序遍历(Java版)
如题 先序构造 数据类型使用了泛型,在后续的更改中,更换数据类型只需要少许的变更代码 层序遍历 利用Node类的level属性 所有属性的权限全为public ,为了方便先这么写吧,建议还是用priv ...
- evpp tcp server服务端
// netserver.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <evpp/tcp_server.h> ...
- 史上最完整promise源码手写实现
史上最完整的promise源码实现,哈哈,之所以用这个标题,是因为开始用的标题<手写promise源码>不被收录 promise自我介绍 promise : "君子一诺千金,承诺 ...
- tensorflow API _ 4 (Logging with tensorflow)
TensorFlow用五个不同级别的日志信息.为了升序的严重性,他们是调试DEBUG,信息INFO,警告WARN,错误ERROR和致命FATAL的.当你配置日志记录在任何级别,TensorFlow将输 ...
- IDEA设置类注释和方法注释模板
背景 在日常开发中,类和方法上希望有属于自己风格的注释模板,此文将记录如何设置IDEA类和方法注释模板. 注意:如果公司有统一的规范模板,请按照公司提供的规范模板去设置,这样可以统一代码注释风格.当然 ...
- 洛谷 P4281 [AHOI2008] 紧急集合 题解
挺好的一道题,本身不难,就把求两个点的LCA变为求三个点两两求LCA,不重合的点才是最优解.值得一提的是,最后对答案的处理运用差分的思想:假设两点 一点深度为d1,另一点 深度为d2,它们LCA深度为 ...
- .net web开发——文件的上传和下载
以ASP.NET Core WebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API ,包括文件的上传和下载. 准备文件上传的API #region 文件上传 ...
- Switch ……case语句
Switch(变量){ case 1: 如果变量和1的值相同,执行该处代码 break; case 2: 如果变量和2的值相同,执行该处代码 break; case 3: 如果变量和3的值相同,执行该 ...
- C博客作业01--分支顺序结构
1.展示PTA总分 2.本章学习总结 ①C语言数据类型 ② if-else语句 if (条件) { 语句A; } else { 语句B; } 在if (条件)后不加":" 要用&q ...