利用TfidfVectorizer+朴素贝叶斯进行文本分类

处理流程一般为:

     提取特征数据集 标签 并向量化

     选择合适的分类器构建模型

     对模型进行验证

案例:

from sklearn.datasets import fetch_20newsgroups
from sklearn.cross_validation import cross_val_score
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfVectorizer
import matplotlib.pyplot as plt
from sklearn.naive_bayes import MultinomialNB

news=fetch_20newsgroups(subset='all')
X,Y=news.data,news.target
k=list(range(10000,180000,10000))
k_count_score=[]
k_tfidf_score=[]
for i in k:
    #tfidf分类器
    tfidf=TfidfVectorizer(analyzer='word',stop_words='english' ,max_features=i)
    X_tfidf=tfidf.fit_transform(X)
    mnb_tfidf=MultinomialNB()
    scores_tfidf=cross_val_score(mnb_tfidf,X_tfidf,Y,cv=10,scoring='accuracy')
    score_tfidf=scores_tfidf.mean()
    k_tfidf_score.append(score_tfidf)
    #tf分类器
    count=CountVectorizer(analyzer='word',stop_words='english' ,max_features=i)
    X_count=count.fit_transform(X)
    mnb_count=MultinomialNB()
    scores_count=cross_val_score(mnb_count,X_count,Y,cv=10,scoring='accuracy')
    score_count=scores_count.mean()
    print(score_count)
    d=()
    d=X_count.get_shape()
    print("维数",d[1])
    k_count_score.append(score_count)
plt.xlabel('dimension')
plt.ylabel('accuracy')
plt.plot(k,k_count_score)
plt.plot(k,k_tfidf_score,color='red')
plt.legend()
plt.show()

 输出:

D:\F\Anaconda3\lib\site-packages\sklearn\cross_validation.py:44: DeprecationWarning: This module was deprecated in version 0.
  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 3、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。 人工智能大作业基于TF-IDF+手写朴素贝叶斯实现文本分类python源码+实验报告.zip 人工智能大作业基于TF-IDF+手写朴素贝叶斯实现文本分类python源码+实验报告.zip 人工智能大作业基于TF-IDF+手写朴素贝叶斯实现文本分类python源码+实验报告.zip 人工智能大作业基于TF-IDF+手写朴素贝叶斯实现文本分类python源码+实验报告.zip 人工智能大作业基于TF-IDF+手写朴素贝叶斯实现文本分类python源码+实验报告.zip 人工智能大作业基于TF-IDF+手写朴素贝叶斯实现文本分类python源码+实验报告.zip 人工智能大作业基于TF-IDF+手写朴素贝叶斯实现文本分类python源码+实验报告.zip 人工智能大作业基于TF-IDF+手写朴素贝叶斯实现文本分类python源码+实验报告.zip 人工智能大作业基于TF-IDF+手写朴素贝叶斯实现文本分类python源码+实验报告.zip 人工智能大作业基于TF-IDF+手写朴素贝叶斯实现文本分类python源码+实验报告.zip 人工智能大作业基于TF-IDF+手写朴素贝叶斯实现文本分类python源码+实验报告.zip 人工智能大作业基于TF-IDF+手写朴素贝叶斯实现文本分类python源码+实验报告.zip 人工智能大作业基于TF-IDF+手写朴素贝叶斯实现文本分类python源码+实验报告.zip
以下是使用 Python 和 jieba 库实现基于朴素贝叶斯文本分类的示例代码: 首先,需要安装 jieba 和 scikit-learn 库: ```python !pip install jieba scikit-learn ``` 然后,可以使用以下代码实现文本分类: ```python import os import jieba from sklearn.naive_bayes import MultinomialNB from sklearn.feature_extraction.text import TfidfVectorizer # 读取训练数据 def read_files(path): file_list = [] label_list = [] for root, dirs, files in os.walk(path): for file in files: file_path = os.path.join(root, file) with open(file_path, 'r', encoding='utf-8') as f: content = f.read() file_list.append(content) label_list.append(root.split('/')[-1]) return file_list, label_list # 分词 def cut_words(file_list): cut_list = [] for content in file_list: cut_content = jieba.cut(content) cut_list.append(' '.join(cut_content)) return cut_list # 训练模型 def train_model(file_list, label_list): vectorizer = TfidfVectorizer() tfidf = vectorizer.fit_transform(file_list) clf = MultinomialNB(alpha=0.001).fit(tfidf, label_list) return clf, vectorizer # 预测新数据 def predict_newdata(model, vectorizer, new_content): cut_content = jieba.cut(new_content) new_content = ' '.join(cut_content) new_tfidf = vectorizer.transform([new_content]) predicted = model.predict(new_tfidf) return predicted[0] # 读取训练数据 file_list, label_list = read_files('data') # 分词 cut_list = cut_words(file_list) # 训练模型 model, vectorizer = train_model(cut_list, label_list) # 预测新数据 new_content = '这是一篇关于体育的文章' predicted = predict_newdata(model, vectorizer, new_content) print(predicted) ``` 其中,`read_files` 函数用于读取训练数据,`cut_words` 函数用于将文本内容进行分词,`train_model` 函数用于训练模型,`predict_newdata` 函数用于预测新的数据。在代码中,我们使用了 TF-IDF 方法将文本转换为向量,并使用朴素贝叶斯算法进行分类。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值