小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Python之機(jī)器學(xué)習(xí)-樸素貝葉斯(垃圾郵件分類)

 麥可網(wǎng)絡(luò) 2021-04-16

目錄

  • 樸素貝葉斯(垃圾郵件分類)

    • 郵箱訓(xùn)練集下載地址

    • 模塊導(dǎo)入

    • 文本預(yù)處理

    • 遍歷郵件

    • 訓(xùn)練模型

    • 測(cè)試模型

樸素貝葉斯(垃圾郵件分類)

參考案例http://www./article/13777

郵箱訓(xùn)練集可以加我微信:chenyoudea

模塊導(dǎo)入

import re
import os
from jieba import cut
from itertools import chain
from collections import Counter
import numpy as np
from sklearn.naive_bayes import MultinomialNB

文本預(yù)處理

def get_words(filename):
    """讀取文本并過(guò)濾無(wú)效字符和長(zhǎng)度為1的詞"""
    words = []
    with open(filename, 'r', encoding='utf-8') as fr:
        for line in fr:
            line = line.strip()
            # 過(guò)濾無(wú)效字符
            line = re.sub(r'[.【】0-9、——。,!~\*]', '', line)
            # 使用jieba.cut()方法對(duì)文本切詞處理
            line = cut(line)
            # 過(guò)濾長(zhǎng)度為1的詞
            line = filter(lambda word: len(word) > 1, line)
            words.extend(line)

    return words

遍歷郵件

all_words = []


def get_top_words(top_num):
    """遍歷郵件建立詞庫(kù)后返回出現(xiàn)次數(shù)最多的詞"""
    filename_list = ['郵件_files/{}.txt'.format(i) for i in range(151)]
    # 遍歷郵件建立詞庫(kù)
    for filename in filename_list:
        all_words.append(get_words(filename))

    # itertools.chain()把a(bǔ)ll_words內(nèi)的所有列表組合成一個(gè)列表
    # collections.Counter()統(tǒng)計(jì)詞個(gè)數(shù)
    freq = Counter(chain(*all_words))

    return [i[0] for i in freq.most_common(top_num)]


top_words = get_top_words(100)

# 構(gòu)建詞-個(gè)數(shù)映射表
vector = []
for words in all_words:
    '''
    words:
    ['國(guó)際', 'SCI', '期刊', '材料', '結(jié)構(gòu)力學(xué)', '工程', '雜志', '國(guó)際', 'SCI', '期刊', '先進(jìn)', '材料科學(xué)', 
    '材料', '工程', '雜志', '國(guó)際', 'SCI', '期刊', '圖像處理', '模式識(shí)別', '人工智能', '工程', '雜志', '國(guó)際', 
    'SCI', '期刊', '數(shù)據(jù)', '信息', '科學(xué)雜志', '國(guó)際', 'SCI', '期刊', '機(jī)器', '學(xué)習(xí)', '神經(jīng)網(wǎng)絡(luò)', '人工智能',
    '雜志', '國(guó)際', 'SCI', '期刊', '能源', '環(huán)境', '生態(tài)', '溫度', '管理', '結(jié)合', '信息學(xué)', '雜志', '期刊',
    '網(wǎng)址', '論文', '篇幅', '控制', '以上', '英文', '字?jǐn)?shù)', '以上', '文章', '撰寫(xiě)', '語(yǔ)言', '英語(yǔ)', '論文', 
    '研究', '內(nèi)容', '詳實(shí)', '方法', '正確', '理論性', '實(shí)踐性', '科學(xué)性', '前沿性', '投稿', '初稿', '需要', 
    '排版', '錄用', '提供', '模版', '排版', '寫(xiě)作', '要求', '正規(guī)', '期刊', '正規(guī)', '操作', '大牛', '出版社', 
    '期刊', '期刊', '質(zhì)量', '放心', '檢索', '穩(wěn)定', '邀請(qǐng)函', '推薦', '身邊', '老師', '朋友', '打擾', '請(qǐng)諒解']
    '''
    word_map = list(map(lambda word: words.count(word), top_words))
    '''
    word_map:
    [0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 
    10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 
    0, 1, 0, 0, 0, 0, 0, 0, 0, 0]
    '''
    vector.append(word_map)

訓(xùn)練模型

vector = np.array(vector)
# 0-126.txt為垃圾郵件標(biāo)記為1;127-151.txt為普通郵件標(biāo)記為0
labels = np.array([1]*127 + [0]*24)

model = MultinomialNB()
model.fit(vector, labels)

測(cè)試模型

def predict(filename):
    """對(duì)未知郵件分類"""
    # 構(gòu)建未知郵件的詞向量
    words = get_words(filename)
    current_vector = np.array(
        tuple(map(lambda word: words.count(word), top_words)))

    # 預(yù)測(cè)結(jié)果
    result = model.predict(current_vector.reshape(1, -1))

    return '**垃圾郵件**' if result == 1 else '普通郵件'


print('151.txt分類情況:{}'.format(predict('郵件_files/151.txt')))
print('152.txt分類情況:{}'.format(predict('郵件_files/152.txt')))
print('153.txt分類情況:{}'.format(predict('郵件_files/153.txt')))
print('154.txt分類情況:{}'.format(predict('郵件_files/154.txt')))
print('155.txt分類情況:{}'.format(predict('郵件_files/155.txt')))

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多