函数说明:

1. cosing_similarity(array)   输入的样本为array格式,为经过词袋模型编码以后的向量化特征,用于计算两两样本之间的相关性

当我们使用词频或者TFidf构造出词袋模型,并对每一个文章内容做词统计以后,

我们如果要判断两个文章内容的相关性,这时候我们需要对数字映射后的特征做一个余弦相似度的匹配:即a.dot(b) / sqrt(a^2 + b^2)

在sklearn中使用metrics.pairwise import cosine_similarity

代码:

第一步: 对数据使用DataFrame化,并进行数组化

第二步:对数据进行分词,并去除停用词,使用' '.join连接列表

第三步:np.vectorizer向量化函数,调用函数进行分词和停用词的去除

第四步:使用TF-idf词袋模型,对特征进行向量化数字映射

第五步:使用 from sklearn.metrics.pairwise import cosine_similarity, 对两两样本之间做相关性矩阵,使用的是余弦相似度计算公式

  1. import pandas as pd
  2. import numpy as np
  3. import re
  4. import nltk #pip install nltk
  5.  
  6. corpus = ['The sky is blue and beautiful.',
  7. 'Love this blue and beautiful sky!',
  8. 'The quick brown fox jumps over the lazy dog.',
  9. 'The brown fox is quick and the blue dog is lazy!',
  10. 'The sky is very blue and the sky is very beautiful today',
  11. 'The dog is lazy but the brown fox is quick!'
  12. ]
  13.  
  14. labels = ['weather', 'weather', 'animals', 'animals', 'weather', 'animals']
  15.  
  16. # 第一步:构建DataFrame格式数据
  17. corpus = np.array(corpus)
  18. corpus_df = pd.DataFrame({'Document': corpus, 'categoray': labels})
  19.  
  20. # 第二步:构建函数进行分词和停用词的去除
  21. # 载入英文的停用词表
  22. stopwords = nltk.corpus.stopwords.words('english')
  23. # 建立词分割模型
  24. cut_model = nltk.WordPunctTokenizer()
  25. # 定义分词和停用词去除的函数
  26. def Normalize_corpus(doc):
  27. # 去除字符串中结尾的标点符号
  28. doc = re.sub(r'[^a-zA-Z0-9\s]', '', string=doc)
  29. # 是字符串变小写格式
  30. doc = doc.lower()
  31. # 去除字符串两边的空格
  32. doc = doc.strip()
  33. # 进行分词操作
  34. tokens = cut_model.tokenize(doc)
  35. # 使用停止用词表去除停用词
  36. doc = [token for token in tokens if token not in stopwords]
  37. # 将去除停用词后的字符串使用' '连接,为了接下来的词袋模型做准备
  38. doc = ' '.join(doc)
  39.  
  40. return doc
  41.  
  42. # 第三步:向量化函数和调用函数
  43. # 向量化函数,当输入一个列表时,列表里的数将被一个一个输入,最后返回也是一个个列表的输出
  44. Normalize_corpus = np.vectorize(Normalize_corpus)
  45. # 调用函数进行分词和去除停用词
  46. corpus_norm = Normalize_corpus(corpus)
  47.  
  48. # 第四步:使用TfidVectorizer进行TF-idf词袋模型的构建
  49. from sklearn.feature_extraction.text import TfidfVectorizer
  50.  
  51. Tf = TfidfVectorizer(use_idf=True)
  52. Tf.fit(corpus_norm)
  53. vocs = Tf.get_feature_names()
  54. corpus_array = Tf.transform(corpus_norm).toarray()
  55. corpus_norm_df = pd.DataFrame(corpus_array, columns=vocs)
  56. print(corpus_norm_df.head())
  57.  
  58. from sklearn.metrics.pairwise import cosine_similarity
  59.  
  60. similarity_matrix = cosine_similarity(corpus_array)
  61. similarity_matrix_df = pd.DataFrame(similarity_matrix)
  62. print(similarity_matrix_df)

机器学习-文本数据-文本的相关性矩阵 1.cosing_similarity(用于计算两两特征之间的相关性)的更多相关文章

  1. Python机器学习之数据探索可视化库yellowbrick

    # 背景介绍 从学sklearn时,除了算法的坎要过,还得学习matplotlib可视化,对我的实践应用而言,可视化更重要一些,然而matplotlib的易用性和美观性确实不敢恭维.陆续使用过plot ...

  2. R如何检验类别变量(nominal variable)与其他变量之间的相关性

    1.使用Pearson积差相关系性进行检验的话可以判断两个变量之间的相关性是否显著以及相关性的强度 显著性检验 (significant test) 连续变量 vs 类别变量 (continuous ...

  3. 机器学习入门-文本数据-构造词频词袋模型 1.re.sub(进行字符串的替换) 2.nltk.corpus.stopwords.words(获得停用词表) 3.nltk.WordPunctTokenizer(对字符串进行分词操作) 4.np.vectorize(对函数进行向量化) 5. CountVectorizer(构建词频的词袋模型)

    函数说明: 1. re.sub(r'[^a-zA-Z0-9\s]', repl='', sting=string)  用于进行字符串的替换,这里我们用来去除标点符号 参数说明:r'[^a-zA-Z0- ...

  4. NLP相关问题中文本数据特征表达初探

    1. NLP问题简介 0x1:NLP问题都包括哪些内涵 人们对真实世界的感知被成为感知世界,而人们用语言表达出自己的感知视为文本数据.那么反过来,NLP,或者更精确地表达为文本挖掘,则是从文本数据出发 ...

  5. 文本数据预处理:sklearn 中 CountVectorizer、TfidfTransformer 和 TfidfVectorizer

    文本数据预处理的第一步通常是进行分词,分词后会进行向量化的操作.在介绍向量化之前,我们先来了解下词袋模型. 1.词袋模型(Bag of words,简称 BoW ) 词袋模型假设我们不考虑文本中词与词 ...

  6. scikit-learning教程(三)使用文本数据

    使用文本数据 本指南的目标是探讨scikit-learn 一个实际任务中的一些主要工具:分析二十个不同主题的文本文档(新闻组帖子)集合. 在本节中,我们将看到如何: 加载文件内容和类别 提取适用于机器 ...

  7. 如何使用 scikit-learn 为机器学习准备文本数据

    欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 文本数据需要特殊处理,然后才能开始将其用于预测建模. 我们需要解析文本,以删除被称为标记化的单词.然后,这些词还需要被编码为整型或浮点型,以用作 ...

  8. Bulk Insert:将文本数据(csv和txt)导入到数据库中

    将文本数据导入到数据库中的方法有很多,将文本格式(csv和txt)导入到SQL Server中,bulk insert是最简单的实现方法 1,bulk insert命令,经过简化如下 BULK INS ...

  9. C#大数据文本高效去重

    C#大数据文本高效去重 转载请注明出处 http://www.cnblogs.com/Huerye/ TextReader reader = File.OpenText(@"C:\Users ...

随机推荐

  1. if的各种真假判断

  2. uoj#272. 【清华集训2016】石家庄的工人阶级队伍比较坚强

    http://uoj.ac/problem/272 这题的式子形式是异或卷积的三进制推广,因此可以设计一个类似fwt的变换,这里需要一个三次单位根$w$,满足$w^3\%p==1$且$(1+w+w^2 ...

  3. python列表中的值转换为字符串,及列表里的所有值拼接成一个字符串 的方法

    后记: ls3='%'.join(ls2) 会把%加入拼接成的字符里面,同理,加入其它字符也一样,''空就是什么都不加,如上图 最后输出 1%我%22

  4. jQuery对象的获取与操作方法总结

    一.文章概述: 众所周知,jQuery 是一个 JavaScript 库,包含多个可重用的函数,用来辅助我们简化javascript开发,它极大地简化了 JavaScript 编程.但是需要注意的一点 ...

  5. [UE4]关卡蓝图

  6. http和https的区别联系

    超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂 ...

  7. T-SQL 逻辑控制语句 ifelse while casewhen

    ifelse,如果逻辑语句有多行,用begin end 包裹 use StudentManageDB go --查询成绩 declare @cAvg int select @cAvg=avg(CSha ...

  8. Java分布式锁的三种实现方案(redis)

    方案一:数据库乐观锁 乐观锁通常实现基于数据版本(version)的记录机制实现的,比如有一张红包表(t_bonus),有一个字段(left_count)记录礼物的剩余个数,用户每领取一个奖品,对应的 ...

  9. “javac”不是内部或外部命令的解决办法(JDK1.5 ~ JDK10)

    配置环境变量:计算机 -> 属性 -> 高级系统设置 -> 环境变量 JDK9以后版本(9-10): JAVA_HOME D:\Java\jdk-10 //jdk所在目录 JRE_H ...

  10. django---单表操作之增删改

    首先找到操作的首页面‘ 代码如下 <!DOCTYPE html> <html lang="en"> <head> <meta charse ...