如何在 Python 中将 PCA 用于术语文档矩阵?

Posted

技术标签:

【中文标题】如何在 Python 中将 PCA 用于术语文档矩阵?【英文标题】:How can I use the PCA for a term-document matrix in Python? 【发布时间】:2020-03-28 10:27:51 【问题描述】:

我有一个词干列表:

text = ['uplink platz windows zukunft spiel effizient virtuell zukunft thema spiel zukunft lang serv spiel gemeinsam episod nachhor herunterlad kiosk brows app ios android fruh episod podcast',
'monat linux zufall eingebaut start einsatz jeweil sogenannt jeweil linux hardwar blick schlecht intel cor intel c’t schlussel linux zufall security arm teil amds million national syst spat chips entwicklung intel system googl tatsach einsatz welt angab memory linux chips', 
'redakteur video test gerat test apps redakteur video ausfuhr test', 
'windows richtig test hannov programmi stark netzwerk haufig bewerb kolleg entwickl les haufig frag lieb stell eigent kolleg link schlecht vergang ergebnis woch mail',
'webseit video frag hilft bewerb frag video', 'vergang onlin vergang onlin moglich datei moglich onlin gesetz angab vorlieg zugriff moglich lieb moglich lieb moglich entwickelt tim zustand tag antwort', 
'c’t kaspersky person erschein verbind kaspersky weis kaspersky nutz inhalt verbind haufig serv brows ungefahr brows modern kaspersky zugriff jeweil sit kaspersky schutz probl microsoft websit cod websit webseit vergang kaspersky mitt august herstell offenbar patch idee nutz googl rahm weis verschied verbind ergebnis prozent prozent herstell alternativ kaspersky kaspersky offent tag herstell probl moglich probl kaspersky person datenleck ausgab zufall id websit nutz probl id websit id websit einzeln besuch brows kaspersky notig websit moglich probl kaspersky verbesser kaspersky kaspersky juni juni automat lang id nutz rei', 
'ifa stand ding helf ifa besuch entwicklung erhalt vergang mensch markt weltweit grosst weiss fest ifa person besitz herstell hom gerat ifa gerat bess system system verfug hoh ifa notig quell probl entsprech oled million samsung divers vorlieg verfugbar preis herstell ifa modell kunftig samsung ifa herstell ifa smartphon eingebaut samsung besuch zukunft ifa ifa zukunft euro euro euro euro euro euro tag euro euro euro euro euro', 
'les les geschicht inhalt weis podcast ausgab redaktion story folg technisch zukunft geschicht geschicht ulrich hilgefort stori rss-feed podcast onlin buch usa deutschland hannov hannov lokal kurz onlin onlin zustand verschied projekt sprech geschicht hannov regelmass',
'bess august vergang erschein million serv spiel stark updat passend kart spiel spiel spiel bess speziell august besitz welt klassisch stand patch spat entwickl verbessert erreich inhalt august stund vollig offenbar arm team zockt serv vergang updat angab notig spiel notig']

我正在使用此函数将列表转换为术语-文档矩阵:

import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer
def tdm(data):
    vec = CountVectorizer()
    X = vec.fit_transform(data)
    df = pd.DataFrame(X.toarray(), columns=vec.get_feature_names())
    return df

如何使用 PCA 来减少生成矩阵的维度?

【问题讨论】:

你要几维? 嗨@JerryM.,我不太确定这部分。如何确定哪些维度适合我的数据? 有几种方法可以解决降维问题。我建议通读这个github.com/tthustla/twitter_sentiment_analysis_part8/blob/… notebook,了解在文本数据上使用 PCA 的示例。至于在您的示例中使用 pca,我现在将发布一个示例。 【参考方案1】:

以下代码将PCA 应用于您的问题:

import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.decomposition import PCA

def tdm(data):
    vec = CountVectorizer()
    X = vec.fit_transform(data)
    df = pd.DataFrame(X.toarray(), columns=vec.get_feature_names())
    return df

def find_principal_components(n, data):
    pca = PCA(n_components = n)
    principalComponents = pca.fit_transform(data)
    return pd.DataFrame(pca.components_, columns=data.columns)

text = ['uplink platz windows zukunft spiel effizient virtuell zukunft thema spiel zukunft lang serv spiel gemeinsam episod nachhor herunterlad kiosk brows app ios android fruh episod podcast',
'monat linux zufall eingebaut start einsatz jeweil sogenannt jeweil linux hardwar blick schlecht intel cor intel c’t schlussel linux zufall security arm teil amds million national syst spat chips entwicklung intel system googl tatsach einsatz welt angab memory linux chips', 
'redakteur video test gerat test apps redakteur video ausfuhr test', 
'windows richtig test hannov programmi stark netzwerk haufig bewerb kolleg entwickl les haufig frag lieb stell eigent kolleg link schlecht vergang ergebnis woch mail',
'webseit video frag hilft bewerb frag video', 'vergang onlin vergang onlin moglich datei moglich onlin gesetz angab vorlieg zugriff moglich lieb moglich lieb moglich entwickelt tim zustand tag antwort', 
'c’t kaspersky person erschein verbind kaspersky weis kaspersky nutz inhalt verbind haufig serv brows ungefahr brows modern kaspersky zugriff jeweil sit kaspersky schutz probl microsoft websit cod websit webseit vergang kaspersky mitt august herstell offenbar patch idee nutz googl rahm weis verschied verbind ergebnis prozent prozent herstell alternativ kaspersky kaspersky offent tag herstell probl moglich probl kaspersky person datenleck ausgab zufall id websit nutz probl id websit id websit einzeln besuch brows kaspersky notig websit moglich probl kaspersky verbesser kaspersky kaspersky juni juni automat lang id nutz rei', 
'ifa stand ding helf ifa besuch entwicklung erhalt vergang mensch markt weltweit grosst weiss fest ifa person besitz herstell hom gerat ifa gerat bess system system verfug hoh ifa notig quell probl entsprech oled million samsung divers vorlieg verfugbar preis herstell ifa modell kunftig samsung ifa herstell ifa smartphon eingebaut samsung besuch zukunft ifa ifa zukunft euro euro euro euro euro euro tag euro euro euro euro euro', 
'les les geschicht inhalt weis podcast ausgab redaktion story folg technisch zukunft geschicht geschicht ulrich hilgefort stori rss-feed podcast onlin buch usa deutschland hannov hannov lokal kurz onlin onlin zustand verschied projekt sprech geschicht hannov regelmass']

df = tdm(text)

print(df) # 9 rows x 170 columns

principalDF = find_principal_components(2, df)

print(principalDF) # 9 rows x 2 columns

应该注意,这并没有起到多大作用——知道 什么 PCA 是,它是否有效等等是比the scope of Stack Overflow 更大的问题。

我建议检查以下内容:

https://towardsdatascience.com/pca-using-python-scikit-learn-e653f8989e60 https://towardsdatascience.com/another-twitter-sentiment-analysis-with-python-part-8-dimensionality-reduction-chi2-pca-c6d06fb3fcf3 https://github.com/tthustla/twitter_sentiment_analysis_part8/blob/master/Capstone_part4-Copy6.ipynb Recovering features names of explained_variance_ratio_ in PCA with sklearn

【讨论】:

感谢您的详细解答。我会调查的。

以上是关于如何在 Python 中将 PCA 用于术语文档矩阵?的主要内容,如果未能解决你的问题,请参考以下文章

PCA理论与实践

如何在python中将变量转换为字符串

如何在 Sklearn 的随机森林分类器中将训练模型用于另一个数据集?

PCA主成分分析

如何在 Python 中将 Word 文档转换为非常简单的 html? [关闭]

浅谈 PCA与SVD