当前位置:   article > 正文

使用多项式朴素贝叶斯对中文垃圾短信进行分类_基于朴素贝叶斯实现垃圾短信分类代码

基于朴素贝叶斯实现垃圾短信分类代码

The finals

 使用多项式朴素贝叶斯对中文垃圾短信进行分类
  1. # 1. 导入所需函数库
  2. import pandas as pd
  3. import jieba
  4. from sklearn.feature_extraction.text import CountVectorizer
  5. from sklearn.model_selection import train_test_split
  6. from sklearn.metrics import classification_report
  7. from sklearn.naive_bayes import MultinomialNB
  8. from wordcloud import WordCloud
  9. from scipy.sparse import csr_matrix
  10. import matplotlib.pyplot as plt
  11. plt.rcParams['font.sans-serif'] = ['SimHei'] #黑体
  12. # 2. 读取数据
  13. data = pd.read_csv('../data/message80W/message80W.csv', header=None,names=['number', 'label','news'])
  14. # 3. 去重
  15. data = data.drop_duplicates()
  16. # 4. 加载自定义词典
  17. # jieba.load_userdict('your_custom_dict.txt')
  18. # 5. 分词
  19. data['分词内容'] = data['news'].apply(lambda x: ' '.join(jieba.cut(x)))
  20. # 6. 去停
  21. with open('../data/stopwords/stopwords-master/hit_stopwords.txt','r', encoding='utf-8') as f:
  22. stopwords = [line.strip() for line in f.readlines()]
  23. data['分词内容'] = data['分词内容'].apply(lambda x: ' '.join([word for word in x.split() if word not in stopwords]))
  24. data['分词内容'] = data['分词内容'].apply(lambda x: x.replace('x', ''))
  25. # 7. 词频统计
  26. vectorizer = CountVectorizer()
  27. X = vectorizer.fit_transform(data['分词内容'])
  28. X_1 = vectorizer.transform(data[data['label'] == 1]['分词内容'])
  29. X_0 = vectorizer.transform(data[data['label'] == 0]['分词内容'])
  30. # 将词频矩阵转换为稀疏矩阵
  31. X_sparse = csr_matrix(X)
  32. # 统计词频
  33. word_freq = pd.DataFrame({'词语': vectorizer.get_feature_names(), '词频': X_sparse.sum(axis=0).tolist()[0]})
  34. # 按词频降序排序
  35. word_freq = word_freq.sort_values(by='词频', ascending=False)
  36. # 展示词频统计结果
  37. print("全部的词频:")
  38. print(word_freq.head(10))
  39. X_sparse_1 = csr_matrix(X_1)
  40. # 统计词频
  41. word_freq_1 = pd.DataFrame({'词语': vectorizer.get_feature_names(), '词频': X_sparse_1.sum(axis=0).tolist()[0]})
  42. # 按词频降序排序
  43. word_freq_1 = word_freq_1.sort_values(by='词频', ascending=False)
  44. # 展示词频统计结果
  45. print("垃圾短信词频:")
  46. print(word_freq_1.head(10))
  47. X_sparse_0 = csr_matrix(X_0)
  48. # 统计词频
  49. word_freq_0 = pd.DataFrame({'词语': vectorizer.get_feature_names(), '词频': X_sparse_0.sum(axis=0).tolist()[0]})
  50. # 按词频降序排序
  51. word_freq_0 = word_freq_0.sort_values(by='词频', ascending=False)
  52. # 展示词频统计结果
  53. print("非垃圾短信词频:")
  54. print(word_freq_0.head(10))
  55. # 8. 绘制垃圾短信词云图
  56. spam_words = ' '.join(data[data['label'] == 1]['分词内容'])
  57. # spam_words
  58. spam_wordcloud = WordCloud(font_path='simhei.ttf',width=800, height=400, background_color='white').generate(spam_words)
  59. plt.imshow(spam_wordcloud, interpolation='bilinear')
  60. plt.title('垃圾短信词云图')
  61. plt.axis('off')
  62. plt.show()
  63. ham_words = ' '.join(data[data['label'] == 0]['分词内容'])
  64. # ham_words
  65. # 9. 绘制非垃圾短信词云图
  66. ham_words = ' '.join(data[data['label'] == 0]['分词内容'])
  67. ham_wordcloud = WordCloud(font_path='simhei.ttf',width=800, height=400, background_color='white').generate(ham_words)
  68. plt.imshow(ham_wordcloud, interpolation='bilinear')
  69. plt.title('非垃圾短信词云图')
  70. plt.axis('off')
  71. plt.show()
  72. # 10. 加载、划分训练集和测试集
  73. X_train, X_test, y_train, y_test = train_test_split(X, data['label'], test_size=0.2, random_state=42)
  74. # 11. 计算条件概率
  75. classifier = MultinomialNB()
  76. classifier.fit(X_train, y_train)
  77. # 12. 判断所属分类
  78. y_pred = classifier.predict(X_test)
  79. print("处理的数据条数:",len(data))
  80. print("准确率:",classifier.score(X_test,y_test))
  81. print(classification_report(y_test, y_pred, target_names=['垃圾短信', '非垃圾短信']))
 
 
 全部的词频:
         词语     词频
 192917  手机  33399
 242851  活动  24488
 118954  南京  17539
 263987  电脑  17491
 352274  飞机  16675
 74142   中国  16628
 100411  公司  16357
 239646  没有  13232
 85539   今天  12818
 259982  现在  12684
 
 垃圾短信词频:
         词语     词频
 242851  活动  18887
 187875  您好  11338
 88880   优惠  10761
 231309  欢迎   8936
 100411  公司   7113
 141591  地址   6955
 264103  电话   6904
 99271   全场   6693
 152777  女人   5584
 201334  推出   5385
 
 非垃圾短信词频:
           词语     词频
 192917    手机  31705
 118954    南京  17391
 263987    电脑  17129
 352274    飞机  16667
 74142     中国  15510
 239646    没有  12774
 85539     今天  11818
 267084    百度  11470
 5225    2015  11333
 243687    浙江  11305

 处理的数据条数: 800000
 准确率: 0.97909375
               precision    recall  f1-score   support
 ​
         垃圾短信       1.00      0.98      0.99    143939
        非垃圾短信       0.85      0.97      0.90     16061
 ​
     accuracy                           0.98    160000
    macro avg       0.92      0.97      0.95    160000
 weighted avg       0.98      0.98      0.98    160000

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/533526
推荐阅读
相关标签
  

闽ICP备14008679号