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

函数说明:

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, 对两两样本之间做相关性矩阵,使用的是余弦相似度计算公式

import pandas as pd
import numpy as np
import re
import nltk #pip install nltk

corpus = [‘The sky is blue and beautiful.‘,
          ‘Love this blue and beautiful sky!‘,
          ‘The quick brown fox jumps over the lazy dog.‘,
          ‘The brown fox is quick and the blue dog is lazy!‘,
          ‘The sky is very blue and the sky is very beautiful today‘,
          ‘The dog is lazy but the brown fox is quick!‘
]

labels = [‘weather‘, ‘weather‘, ‘animals‘, ‘animals‘, ‘weather‘, ‘animals‘]

# 第一步:构建DataFrame格式数据
corpus = np.array(corpus)
corpus_df = pd.DataFrame({‘Document‘: corpus, ‘categoray‘: labels})

# 第二步:构建函数进行分词和停用词的去除
# 载入英文的停用词表
stopwords = nltk.corpus.stopwords.words(‘english‘)
# 建立词分割模型
cut_model = nltk.WordPunctTokenizer()
# 定义分词和停用词去除的函数
def Normalize_corpus(doc):
    # 去除字符串中结尾的标点符号
    doc = re.sub(r‘[^a-zA-Z0-9\s]‘, ‘‘, string=doc)
    # 是字符串变小写格式
    doc = doc.lower()
    # 去除字符串两边的空格
    doc = doc.strip()
    # 进行分词操作
    tokens = cut_model.tokenize(doc)
    # 使用停止用词表去除停用词
    doc = [token for token in tokens if token not in stopwords]
    # 将去除停用词后的字符串使用‘ ‘连接,为了接下来的词袋模型做准备
    doc = ‘ ‘.join(doc)

    return doc

# 第三步:向量化函数和调用函数
# 向量化函数,当输入一个列表时,列表里的数将被一个一个输入,最后返回也是一个个列表的输出
Normalize_corpus = np.vectorize(Normalize_corpus)
# 调用函数进行分词和去除停用词
corpus_norm = Normalize_corpus(corpus)

# 第四步:使用TfidVectorizer进行TF-idf词袋模型的构建
from sklearn.feature_extraction.text import TfidfVectorizer

Tf = TfidfVectorizer(use_idf=True)
Tf.fit(corpus_norm)
vocs = Tf.get_feature_names()
corpus_array = Tf.transform(corpus_norm).toarray()
corpus_norm_df = pd.DataFrame(corpus_array, columns=vocs)
print(corpus_norm_df.head())

from sklearn.metrics.pairwise import cosine_similarity

similarity_matrix = cosine_similarity(corpus_array)
similarity_matrix_df = pd.DataFrame(similarity_matrix)
print(similarity_matrix_df)

原文地址:https://www.cnblogs.com/my-love-is-python/p/10325005.html

时间: 2024-08-28 15:24:25

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

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

背景介绍 从学sklearn时,除了算法的坎要过,还得学习matplotlib可视化,对我的实践应用而言,可视化更重要一些,然而matplotlib的易用性和美观性确实不敢恭维.陆续使用过plotly.seaborn,最终定格在了Bokeh,因为它可以与Flask完美的结合,数据看板的开发难度降低了很多. 前阵子看到这个库可以较为便捷的实现数据探索,今天得空打算学习一下.原本访问的是英文文档,结果发现已经有人在做汉化,虽然看起来也像是谷歌翻译的,本着拿来主义,少费点精力的精神,就半抄半学,还是发

文本数据的机器学习自动分类方法(转)

http://blog.csdn.net/jdbc/article/details/50586042 本文为第一部分,着重介绍文本预处理以及特征抽取的方法. 随着互联网技术的迅速发展与普及,如何对浩如烟海的数据进行分类.组织和管理,已经成为一个具有重要用途的研究课题.而在这些数据中,文本数据又是数量最大的一类."文本分类是指在给定分类体系下,根据文本内容自动确定文本类别的过程"(达观数据科技联合创始人,张健).文本分类有着广泛的应用场景,例如: 新闻网站包含大量报道文章,基于文章内容,

机器学习入门-文本数据-使用聚类增加文本的标签属性

通过对特征做一个kmeans聚类,将聚类的结果做为文本的标签值,可以使得样本的特征更多 我们从sklearn.cluster中导入Kmeans建立模型进行聚类 代码: 第一步:使用Dataframe格式化数据和使用数据格式化数据 第二步:对字符串进行分词和去除停用词,并使用' '.join完成连接 第三步:使用np.vectorizer向量化函数,调用函数进行分词和去除停用词 第四步:使用Tfidfvectorizer构造词袋模型 第五步:使用cosine_similarity构造相关性矩阵 第

文本数据的机器学习自动分类方法

文本数据的机器学习自动分类方法(上): http://www.infoq.com/cn/articles/machine-learning-automatic-classification-of-text-data?utm_source=tuicool&utm_medium=referral 文本数据的机器学习自动分类方法(下): http://www.infoq.com/cn/articles/machine-learning-automatic-classification-of-text-

机器学习入门-文本数据-构造词频词袋模型 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-9\s]' 配对的模式,^表示起始位置,\s表示终止位置,[]表示取中间部分,这个的意思是找出除字符串大小写或者数字组成以外的东西,repl表示使用什么进行替换,这里使用'',即直接替换,string表示输入的字符串 2. stopwords = nltk.corpus.stopwords.word

Spark机器学习实战 (十一) - 文本情感分类项目实战

0 相关源码 将结合前述知识进行综合实战,以达到所学即所用.文本情感分类这个项目会将分类算法.文本特征提取算法等进行关联,使大家能够对Spark的具体应用有一个整体的感知与了解. 1 项目总体概况 2 数据集概述 数据集 3 数据预处理 4 文本特征提取 官方文档介绍提取,转换和选择特征本节介绍了使用特征的算法,大致分为以下几组: 提取:从"原始"数据中提取特征 转换:缩放,转换或修改特征 选择:从中选择一个子集一组更大的特征局部敏感散列(LSH):这类算法将特征变换的各个方面与其他算

JAVASE02-Unit08: 文本数据IO操作 、 异常处理

Unit08: 文本数据IO操作 . 异常处理 * java.io.ObjectOutputStream * 对象输出流,作用是进行对象序列化 package day08; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; import java.util.ArrayList; import java.util.List; /** * java.io.Ob

JDBC学习笔记(三)大文本数据的读写

一.用JDBC向数据库插入大文本数据 String sql = "insert into my_clob values (null, ?)"; ps = conn.prepareStatement(sql); File f = new File("D:\\BaiduNetdiskDownload\\mysql\\jdbc.sql"); Reader reader = new BufferedReader(new FileReader(f)); ps.setChara

JAVASE02-Unit07: 基本IO操作 、 文本数据IO操作

基本IO操作 . 文本数据IO操作 java标准IO(input/output)操作 package day07; import java.io.FileOutputStream; import java.io.IOException; /** * java标准IO(input/output)操作 * 输入流InputStrean:用于从数据源读取数据到程序中 * 输出流OutputStream:用于将数据发送至目标 * * 流划分为:节点流,处理流 * 节点流:又叫做低级流,特点:数据源明确,