Scikit-learn CountVectorizer与TfidfVectorizer

本文详述了Scikit-learn中的CountVectorizer和TfidfVectorizer。CountVectorizer用于统计文本中词汇的频率,构建词频矩阵,而TfidfVectorizer通过结合词频和逆文档频率(IDF)来衡量词汇的重要性,更适用于大量文本。TF-IDF值越高,词汇在文档中的重要性越大。
摘要由CSDN通过智能技术生成

本文主要介绍两个类的基本使用,CountVectorizer与TfidfVectorizer,这两个类都是特征数值计算的常见方法。对于每一个训练文本,CountVectorizer只考虑每种词汇在该训练文本中出现的频率,而TfidfVectorizer除了考量某一词汇在当前训练文本中出现的频率之外,同时关注包含这个词汇的其它训练文本数目的倒数。相比之下,训练文本的数量越多,TfidfVectorizer这种特征量化方式就更有优势。

1. sklearn.feature_extraction.text.CountVectorizer

这个类的主要作用是统计每一个训练文本中,每个单词出现的频率;然后构成一个特征矩阵,每一行表示一个训练文本的词频统计结果。其思想是,先根据所有训练文本,不考虑其出现顺序,只将训练文本中每个出现过的词汇单独视为一列特征,构成一个词汇表(vocabulary list),该方法又称为词袋法(Bag of Words)

#python2.7 sklearn version 0.18.1
from sklearn.feature_extraction.text import CountVectorizer
X_test = ['I sed about sed the lack',
'of any Actually']

count_vec=CountVectorizer(stop_words=None)
print count_vec.fit_transform(X_test).toarray()
print '\nvocabulary list:\n\n',count_vec.vocabulary_

>>
>>
[[1 0 0 1 1 0 2 1]
 [0 1 1 0 0 1 0 0]]
 
  (0, 4)	1
  (0, 7)	1
  (0, 0)	1
  (0, 6)	2
  (0, 3)	1
  (1, 1)	1
  (1, 2)	1
  (1, 5)	1
  
vocabulary list:

{
   u'about': 0, u'i': 3, u'of': 5, u'lack': 4, u'actually': 1, u'sed': 6, u'the': 7, u'any': 2}

关于上面的代码,有几点说明:
(1)第6行代码中,stop_words=None表示不去掉停用词,若改为stop_words='english’则去掉停用词;
(2)第12,13行,分别是X_test中,两段文本的词频统计结果;
(3)第15-22行,是稀疏矩阵的表示方式;
(4)CountVectorizer同样适用于中文

# -*- coding: utf-8 -*-
from sklearn.feature_extraction.text import CountVectorizer

X_test = [u'没有 你 的 地方 都是 他乡',u'没有 你 的 旅行 都是 流浪']

count_vec=CountVectorizer(token_pattern=r"(?u)\b\w\w+\b")
print count_vec.fit_transform(X_test).toarray()
print count_vec.fit_transform(X_test)
print '\nvocabulary list:\n'
for key,value in count_vec.vocabulary_.items(
  • 14
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
Scikit-learn是一个Python的机器学习库,提供了丰富的机器学习算法和工具。其中,文本分类是机器学习中一个重要的应用场景,而Scikit-learn也提供了许多文本分类的工具和算法。 下面详细解析如何使用Scikit-learn进行文本分类。 1. 数据准备 首先需要准备好文本数据,可以从文本文件中读取,也可以直接使用Python字符串。 对于分类问题,需要将文本数据与对应的标签组成二元组。例如: ``` data = [("This is a positive sentence", "positive"), ("I am happy today", "positive"), ("This is a negative sentence", "negative"), ("I am sad today", "negative")] ``` 2. 特征提取 在文本分类中,通常需要将文本数据转换为数值特征,以便机器学习算法进行处理。常用的特征提取方法有: - 词袋模型(Bag-of-Words):将文本表示为一个词汇表中单词的计数向量。 - TF-IDF模型:词频-逆文档频率(Term Frequency-Inverse Document Frequency),旨在衡量一个单词在文档中的重要程度。 - Word2Vec模型:将单词转换为密集向量表示。 在Scikit-learn中,可以使用CountVectorizerTfidfVectorizer进行特征提取。 ``` from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer # 词袋模型 vectorizer = CountVectorizer() X = vectorizer.fit_transform([d[0] for d in data]) # TF-IDF模型 vectorizer = TfidfVectorizer() X = vectorizer.fit_transform([d[0] for d in data]) ``` 3. 模型训练 在特征提取后,可以使用Scikit-learn提供的机器学习算法进行模型训练。常用的分类算法有: - 朴素贝叶斯(Naive Bayes) - 决策树(Decision Tree) - 支持向量机(Support Vector Machine) - 随机森林(Random Forest) 以朴素贝叶斯分类器为例: ``` from sklearn.naive_bayes import MultinomialNB from sklearn.model_selection import train_test_split # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, [d[1] for d in data], test_size=0.2) # 训练朴素贝叶斯分类器 clf = MultinomialNB() clf.fit(X_train, y_train) ``` 4. 模型评估 训练完成后,需要对模型进行评估。常用的评估指标有: - 准确率(Accuracy) - 精确率(Precision) - 召回率(Recall) - F1-score 以准确率为例: ``` from sklearn.metrics import accuracy_score # 在测试集上评估模型 y_pred = clf.predict(X_test) accuracy = accuracy_score(y_test, y_pred) print("Accuracy:", accuracy) ``` 5. 新数据预测 最后,可以使用训练好的模型对新数据进行预测。 ``` # 对新数据进行预测 new_data = ["I am not sure how I feel", "This sentence is neutral"] X_new = vectorizer.transform(new_data) y_pred = clf.predict(X_new) print(y_pred) ``` 以上就是使用Scikit-learn进行文本分类的详细解析。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值