RS推荐系统-P5

该博客介绍了如何运用TF-IDF计算文本内容权重,并结合KMeans进行文本聚类。通过示例展示了对体育、购物、化妆和游戏等主题的句子进行聚类,以及观察不同K值下SSE变化曲线来确定最佳簇数。同时,还展示了TF-IDF在处理脱敏数据上的应用。
摘要由CSDN通过智能技术生成

本次主要讲解在文本分类中,通过TF-IDF计算不同文本的内容权重,然后引入KMean对不同文本的TF-IDF的权重向量进行聚类。此方法广泛应用在推荐系统中基于内容的推荐

TF-IDF

在讲解例子之前,想了解一下什么是TF-IDF。

  • TF:Term Frequency,词频

在这里插入图片描述

  • IDF:Inverse Document Frequency,逆向文档率
    一个单词在文档中的区分度。这个单词出现的文档数越少,区分度越大,IDF越大。
    在这里插入图片描述

下面通过一个小例子,加深一下了解:

import numpy as np
import pandas as pd
import jieba
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.cluster import KMeans

s_1 = '我喜欢和同学打篮球,打篮球属于一种运动。'
s_2 = '我想和同学去买水果。'
s_3 = '昨天我和妈妈去买水果。'
s_4 = '同学喊我跟他一起做运动,比如打篮球。'
s_5 = '今天画了个好看美妆,准备去约会。'
s_6 = '我同学帮我画了个妆,比我自己画的好看'
s_7 = '英雄联盟S11版本上分英雄推荐。'
s_8 = '英雄联盟S11赛季得世界赛时间公布'

#将文本转换为dataframe的形式
data = pd.DataFrame({'sentence':[s_1,s_2,s_3,s_4,s_5,s_6,s_7,s_8]})

#定义函数,使用jieba进行分词,并去除停用词
def func(x):
    x = jieba.cut(x)
    stop_word = [',','。']
    return ' '.join([i for i in x if i not in stop_word])

#将句子进行函数转换
data['sentence'] = data['sentence'].apply(func)

#引入TF-IDF接口,对句子进行转换
tf = TfidfVectorizer()
res = tf.fit_transform(data['sentence'])

#获取词袋模型中的所有词语 
res_name = tf.get_feature_names()

#将tf-idf矩阵抽取出来,元素w[i][j]表示j词在i类文本中的tf-idf权重
res_weight = res.toarray()

#使用KMeans根据不同词袋的权重进行聚类
kmean = KMeans(n_clusters=4)
kmean.fit(res_weight)

#获取KMean的簇类
clusters = kmean.labels_
data['cluster'] = clusters
data

result
在这里插入图片描述
接着,我们可以根据KMeans中K值的不同,打印其SSE的变化曲线。

import  matplotlib.pyplot as plt
import seaborn as sns
SSE = []
for i in range(1,9):
    km = KMeans(n_clusters=i,random_state = 2021)
    km.fit(res_weight)
    #获取K-means算法的SSE
    SSE.append(km.inertia_)
    
#根据不同K值画出对应的SSE
plt.figure(figsize = (10,8))
plt.plot(SSE)
plt.ylabel('SSE',size = 20)
plt.xlabel('K',size = 20)

在这里插入图片描述
除此之外,TF-IDF也能对脱敏数据进行处理:

#脱敏数据同样可以处理
s_10 = '2 80 9 11 330'
s_11 = '3 11 330 15 313'
s_12 = '10 222 26 23 16'
s_13 = '7 230 25 26 10 '

#将文本转换为dataframe的形式
data_2 = pd.DataFrame({'sentence':[s_10,s_11,s_12,s_13]})

#这是不需要jieba,直接调用TF-IDF进行处理
tf = TfidfVectorizer()
res_2 = tf.fit_transform(data_2['sentence'])

#获取词袋模型中的所有词语
res_2_name = tf.get_feature_names()
res_2_weight = res_2.toarray()

#引入KMeans接口进行聚类
kmean = KMeans(n_clusters=2)
kmean.fit(res_2_weight)

#获取KMeans的簇类结果
clusters = kmean.labels_
data_2['cluster'] = clusters
data_2

result
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.Wiggles

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值