zoukankan      html  css  js  c++  java
  • 机器学习-文本数据-文本的相关性矩阵 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-9s]', '', 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)
    复制代码

  • 相关阅读:
    WPF添加ResourceDictionary后【The Property "Resource" can only be set once】问题
    WPF中获取匿名(Anonymous)对象的键值方法(例如DataGrid绑定List<无名元素>时)
    安装Win10到移动硬盘的利器:WTGA
    xcodebuild 能在模拟器上运行测试啦
    Jenkins Mac slave 遇到 git: 'credential-osxkeychain' is not a git command. 错误
    远程调试UWP遇到新错误Could not generate the root folder for app package ......
    开始学习python
    文件打包
    统计 某个目录下 所有的文件的行数
    根据进程名称获取进程id
  • 原文地址:https://www.cnblogs.com/liuys635/p/12435910.html
Copyright © 2011-2022 走看看