当前位置:网站首页>数据科学【九】:SVD(二)
数据科学【九】:SVD(二)
2022-07-02 06:10:00 【swy_swy_swy】
数据科学【九】:SVD(二)
数据准备
我们这次研究文本数据。我们可以从sklearn.datasets获得fetch_20newsgroups,即20个不同范畴的新闻文本集;这里我们选取四个范畴。
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer
from nltk.stem.snowball import SnowballStemmer
categories = ['alt.atheism', 'soc.religion.christian', 'comp.graphics', 'sci.med']
news_data = fetch_20newsgroups(subset='train', categories=categories)
分词
每一篇文章可视为一个字符串。这个字符串由空格、换行符以及词组成。需要注意的是,同一个词可能有多种变形,比如时态、复数、变格等等,视语言而定。从诸多变形中“提取”词语,即为分词。我们可以调用SnowballStemmer()实现:
stemmer = SnowballStemmer('english')
stemmed_articles = []
for article in news_data.data:
stemmed_words = []
for word in article.split():
stemmed_words.append(stemmer.stem(word))
stemmed_articles.append(" ".join(stemmed_words))
词的重要性
给定一个词和一个文本集,如何量化这个词的重要性?一个指标是tf-idf特征。tf-idf特征有两部分构成,分别为:
- TF(t, a):词语t在文章a中出现的比率,即t出现的次数/文章总词数。
- IDF(t, s):文章集合的文章数比出现词语t的文章数的对数,即log10(文章总数/出现该词的文章数)
- tf-idf: TF 与IDF的乘积。
通过以上定义,我们知道在一个文本集中,对每一篇文本都有一个特征向量。
我们可以使用from sklearn.feature_extraction.text import TfidfVectorizer来获得tf-idf特征向量。
import pandas as pd
tfidfvctr = TfidfVectorizer(max_df = 0.25, min_df = 0.05)
tfidf_mat = tfidfvctr.fit_transform(stemmed_articles)
tfidf_df = pd.DataFrame(tfidf_mat.toarray())
tfidf_df.to_csv("tfidf.csv", index=False)
对tf-idf使用SVD降维
我们对上文得到的SVD矩阵降维,保留不同秩的特征值,并通过disagreemet distance评价聚类效果。
disagreement_distance = []
original_dataset = pd.read_csv("tfidf.csv", low_memory=False).values
for k in range(1,25):
dim_reduced_dataset = PCA(k).fit_transform(original_dataset)
kmeans = KMeans(n_clusters=4, init='k-means++', max_iter=100, n_init=10, random_state=0)
kmeans.fit_predict(dim_reduced_dataset)
labelsk = kmeans.labels_
disagreement_distance.append(disagreement_dist(labelsk, news_data.target))
plt.plot(range(1,25), disagreement_distance)
plt.ylabel('Disagreement')
plt.xlabel('Dimension')
plt.show()

边栏推荐
- 队列(线性结构)
- 链表(线性结构)
- WLAN相关知识点总结
- 492. Construction rectangle
- On Web server
- Lambda expressions and method references
- Stc8h8k series assembly and C51 actual combat - serial port sending menu interface to select different functions
- BGP routing optimization rules and notification principles
- Classic literature reading -- deformable Detr
- 深入学习JVM底层(三):垃圾回收器与内存分配策略
猜你喜欢

日志(常用的日志框架)

LeetCode 78. subset

Invalid operation: Load into table ‘sources_orderdata‘ failed. Check ‘stl_load_errors‘ system table

From design delivery to development, easy and efficient!

Contest3147 - game 38 of 2021 Freshmen's personal training match_ G: Flower bed

Frequently asked questions about jetpack compose and material you

uni-app开发中遇到的问题(持续更新)

来自读者们的 I/O 观后感|有奖征集获奖名单

深入学习JVM底层(五):类加载机制

神机百炼3.52-Prim
随机推荐
LeetCode 39. Combined sum
经典文献阅读之--SuMa++
Compte à rebours de 3 jours pour l'inscription à l'accélérateur de démarrage Google Sea, Guide de démarrage collecté à l'avance!
Support new and old imperial CMS collection and warehousing tutorials
Linear DP (split)
WLAN相关知识点总结
495. Timo attack
BGP 路由優選規則和通告原則
队列(线性结构)
Bgp Routing preference Rules and notice Principles
亚马逊aws数据湖工作之坑1
Flutter hybrid development: develop a simple quick start framework | developers say · dtalk
线性dp(拆分篇)
ES6的详细注解
Contest3147 - game 38 of 2021 Freshmen's personal training match_ 1: Maximum palindromes
Little bear sect manual query and ADC in-depth study
栈(线性结构)
LeetCode 47. 全排列 II
VLAN experiment of switching technology
Contest3147 - game 38 of 2021 Freshmen's personal training match_ F: Polyhedral dice