TF-IDF笔记(直接调用函数、手写)
首先TF-IDF 全称:term frequency–inverse document frequency,是一种用于信息检索与数据挖掘的常用加权技术。
TF是词频(Term Frequency),IDF是逆文本频率指数(Inverse Document Frequency)。
上面是百度的结果
我的理解就是用来筛选特征的,看看那些词用来当特征比较好。
词频(TF):就是一个词在一个文本里出现的次数除以文本词数。(文本内词出现次数 /文本内词总数)
逆文本频率指数(IDF):就是总文本数除以包含这个词的文本数的10的对数,有点饶哈哈。lg(总文本数/包含这个词的文本数)
TF-IDF = TF*IDF
先看下调用的:
# CountVectorizer会将文本中的词语转换为词频矩阵
vectorizer = CountVectorizer(max_features=1200, min_df=12)
# TfidfTransformer用于统计vectorizer中每个词语的TF-IDF值
tf_idf_transformer = TfidfTransformer()
# vectorizer.fit_transform()计算每个词出现的次数
# tf_idf_transformer.fit_transform将词频矩阵统计成TF-IDF值
tf_idf = tf_idf_transformer.fit_transform(vectorizer.fit_transform(train_features['features'].values.astype('U'))) # .values.astype('U')
x_train_weight = tf_idf.toarray() # 训练集TF-IDF权重矩阵
然后是我手写的:
参数格式是,[词1 词2 词3,词1 词2 词3,词1 词2 词3]
一个字符串列表,词与词间用空格隔开。
print("-"*5+"构建tf-idf权重矩阵中"+"-"*5)
def get_tf_idf(list_words):
# 构建词典
wordSet = list(set(" ".join(list_words).split()))
# 统计词数
def count_(words):
wordDict = dict.fromkeys(wordSet, 0)
for i in words:
wordDict[i] += 1
return wordDict
# 计算tf
def computeTF(words):
cnt_dic = count_(words)
tfDict = {}
nbowCount = len(words)
for word, count in cnt_dic.items():
tfDict[word] = count / nbowCount
return tfDict
# 计算idf
def get_idf():
filecont = dict.fromkeys(wordSet, 0)
for i in wordSet:
for j in list_words:
if i in j.split():
filecont[i] += 1
idfDict = dict.fromkeys(wordSet, 0)
le = len(list_words)
for word, cont in filecont.items():
idfDict[word] = math.log10(le/cont+1)
return idfDict
# 计算每个词的TF*IDF的值
def get_tf_idf(list_words):
idf_dic = get_idf()
ret = []
for words in list_words:
tf_dic = computeTF(words.split())
tf_idf_dic = {}
temp = []
for word, tf in tf_dic.items():
idf = idf_dic[word]
tf_idf = tf * math.log(len(list_words) / (idf+1))
tf_idf_dic[word] = tf_idf
for word in wordSet:
temp.append(tf_idf_dic.get(word, 0))
ret.append(temp)
return ret
return np.array(get_tf_idf(list_words))
tf-idf矩阵:
word_tf_idf = get_tf_idf(features)
慢的飞起,哈哈哈哈。
TF-IDF笔记(直接调用函数、手写)的更多相关文章
- JDBC学习笔记(10)——调用函数&存储过程
如何使用JDBC调用存储在数据库中的函数或存储过程: * 1.通过COnnection对象的prepareCall()方法创建一个CallableStatement * 对象的实例,在使用Con ...
- SVM学习笔记(二)----手写数字识别
引言 上一篇博客整理了一下SVM分类算法的基本理论问题,它分类的基本思想是利用最大间隔进行分类,处理非线性问题是通过核函数将特征向量映射到高维空间,从而变成线性可分的,但是运算却是在低维空间运行的.考 ...
- 【转】JDBC学习笔记(10)——调用函数&存储过程
转自:http://www.cnblogs.com/ysw-go/ 如何使用JDBC调用存储在数据库中的函数或存储过程: * 1.通过COnnection对象的prepareCall()方法创建一个C ...
- 5 TensorFlow入门笔记之RNN实现手写数字识别
------------------------------------ 写在开头:此文参照莫烦python教程(墙裂推荐!!!) ---------------------------------- ...
- tensorflow笔记(五)之MNIST手写识别系列二
tensorflow笔记(五)之MNIST手写识别系列二 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7455233.html ...
- 10分钟教你用python 30行代码搞定简单手写识别!
欲直接下载代码文件,关注我们的公众号哦!查看历史消息即可! 手写笔记还是电子笔记好呢? 毕业季刚结束,眼瞅着2018级小萌新马上就要来了,老腊肉小编为了咱学弟学妹们的学习,绞尽脑汁准备编一套大学秘籍, ...
- 一套手写ajax加一般处理程序的增删查改
倾述下感受:8天16次驳回.这个惨不忍睹. 好了不说了,说多了都是泪. 直接上代码 : 这个里面的字段我是用动软生成的,感觉自己手写哪些字段太浪费时间了,说多了都是泪 ajax.model层的代码: ...
- python笔记六(函数的参数、返回值)
一 调用函数 在写函数之前,我们先尝试调用现有的函数 >>> abs(-9) 9 除此之外,还有我们之前使用的len()等.可以用于数据类型转换的 int() float() str ...
- 第三节,TensorFlow 使用CNN实现手写数字识别(卷积函数tf.nn.convd介绍)
上一节,我们已经讲解了使用全连接网络实现手写数字识别,其正确率大概能达到98%,这一节我们使用卷积神经网络来实现手写数字识别, 其准确率可以超过99%,程序主要包括以下几块内容 [1]: 导入数据,即 ...
随机推荐
- 从零开始,开发一个 Web Office 套件(14):复制、粘贴、剪切、全选
这是一个系列博客,最终目的是要做一个基于 HTML Canvas 的.类似于微软 Office 的 Web Office 套件(包括:文档.表格.幻灯片--等等). 博客园:<从零开始, 开发一 ...
- ClassNotFoundException: javax.persistence.Converter
检查你的hibernate-jpa-2.0-api-1.0.0.final.jar,会发现javax.persitence包中没有Convert类. 解决办法:下载hibernate-jpa-2.1- ...
- 列举 IoC 的一些好处?
IoC 的一些好处是:它将最小化应用程序中的代码量.它将使您的应用程序易于测试,因为它不需要单元测试用例中的任何单例 或 JNDI 查找机制.它以最小的影响和最少的侵入机制促进松耦合.它支持即时的实例 ...
- python 基础数据类型汇总
数据类型小结(各数据类型常用操作) 一.数字/整型int int()强行转化数字 二.bool类型False&True bool()强行转化布尔类型. 0,None,及各个空的字符类型为Fal ...
- SpringDataJpa备忘录
单向多对一关系 //产品类型 一的一方 @Entity public class ProductDir { @Id @GeneratedValue private Long id; private S ...
- ACM - 图论 - P3385 负环
P3385 负环 题目描述 给定一个 \(n\) 个点的有向图,请求出图中是否存在从顶点 \(1\) 出发能到达的负环. 负环的定义是:一条边权之和为负数的回路. 输入格式 本题单测试点有多组测试数据 ...
- js技术之input只读功能可以通过js设置readonly
一.input标签 输入项标签,不同type属性,会有不同的显示效果和不同的作用 input标签的属性: disabled:表单项禁用,不可修改值,也不会被提交 readonly:表单项只读,不可修改 ...
- java弹框
Java弹窗操作 1.任务简介 本博客介绍两种Java弹窗操作的方法,第一个种是通过弹出对话框显示用户输入的信息,第二种是通过用户输入数字的不同打开不同的程序. 2.弹出对话框的操作 1)任务内容编程 ...
- 谈谈关于CSS中transform属性之scale
谈谈关于scale属性 scale是什么? 根据W3C定义 ,scale主要是进行缩放和转化: scale能做什么? 1.1px细线 <div class="wrap"> ...
- task0002(四)- 练习:数据处理、轮播及交互
转载自我的个人博客 欢迎大家批评指正 包括5部分: 小练习1-处理用户输入 小练习2-日期对象的使用 小练习3:轮播图 小练习4:输入提示框 小练习5:界面拖拽交互 源码地址task0002 在线De ...