sklearn做文本数据分析中遇到的问题

文本表示方面

CountVectorizer()类
使用

from sklearn.feature_extraction.text import CountVectorizer
vec=CountVectorizer()#sklearn函数的通用写法
corpus = [
     'This is the first document.',
    'This is the second second document.',
   'And the third one.',
   'Is this the first document?']
X = vec.fit_transform(corpus)#放入语料进行学习生成字典
#放入的语料要求用空格分开每一个字符串就是一条语句,参考英语的书写格式
a=X.toarray()#以词频矩阵的形式输出

在这里插入图片描述
x为一个复杂的数据结构主要为(a,b) x这样的形式a为第几个语句,b为在字典个中的位置 x为在这个语句中出现的次数,这里只显示出现的。

vec.get_feature_names()#输出学习之后的字典,如果不学习也可以自己指定
 ['and', 'document', 'first', 'is', 'one', 'second', 'the', 'third', 'this']

通过改变vec中的vocabulary_来自己定义分词矩阵字典
在这里插入图片描述
在这里插入图片描述
一个字典形式的数据后面字典操作就可以了

建立vocabulary后可以用transform()来对新文本进行矩阵化了

vec.transform(['this is']).toarray()
[[0, 0, 0, 1, 0, 0, 0, 0, 1]]
vec.transform(['too bad']).toarray()
[[0, 0, 0, 0, 0, 0, 0, 0, 0]]

sklearn学习后的使用

from sklearn import naive_bayes
#导入贝叶斯分类器
NBmodel = naive_bayes.MultinomialNB()
NBmodel.fit(x_tr,y_tr)
jg=NBmodel.predict(x_test)
gl=NBmodel.predict_proba(x_test)#在画ROC曲线时常用

#predict是训练后返回预测结果,是标签值。
predict_proba返回的是一个 n 行 k 列的数组, 第 i 行 第 j 列上的数值是模型预测 第 i 个预测样本为某个标签的概率,并且每一行的概率和为1。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用Scikit-Learn库的K-Means算法对20个新闻组数据集进行文本聚类分析的代码,同时绘制了聚类结果的散点图: ```python import numpy as np import matplotlib.pyplot as plt from sklearn.datasets import fetch_20newsgroups from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.cluster import KMeans from sklearn.decomposition import TruncatedSVD from sklearn.pipeline import make_pipeline from sklearn.preprocessing import Normalizer # 加载数据集 dataset = fetch_20newsgroups(subset='all', shuffle=True, random_state=42) # 获取停用词 stopwords = set() with open('stopwords.txt', 'r') as f: for line in f: stopwords.add(line.strip()) # 进行TF-IDF向量化 tfidf_vectorizer = TfidfVectorizer(stop_words=stopwords, max_df=0.5, min_df=2) tfidf = tfidf_vectorizer.fit_transform(dataset.data) # 使用TruncatedSVD进行降维 svd = TruncatedSVD(n_components=50) normalizer = Normalizer(copy=False) lsa = make_pipeline(svd, normalizer) tfidf_lsa = lsa.fit_transform(tfidf) # 进行聚类 num_clusters = 20 km = KMeans(n_clusters=num_clusters, init='k-means++', max_iter=100, n_init=1) km.fit(tfidf_lsa) # 绘制聚类结果 plt.figure(figsize=(10, 6)) plt.scatter(tfidf_lsa[:, 0], tfidf_lsa[:, 1], c=km.predict(tfidf_lsa), cmap='Set2', s=5) plt.title('20 Newsgroups Clustering Results') plt.xlabel('Dimension 1') plt.ylabel('Dimension 2') plt.show() ``` 在这个示例,我们使用了Scikit-Learn的fetch_20newsgroups数据集进行实验。首先,我们读取停用词文件,并使用TfidfVectorizer将文本数据转换为TF-IDF向量表示。然后,我们使用TruncatedSVD对向量化后的数据进行降维,以减少特征数量。接下来,我们使用K-Means算法对降维后的数据进行聚类,并绘制聚类结果的散点图。其,每个点的颜色表示所属的簇。可以看到,K-Means算法能够将不同主题的新闻文章聚类到不同的簇

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值