博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
作业,朴素贝叶斯垃圾邮件识别
阅读量:6614 次
发布时间:2019-06-24

本文共 3044 字,大约阅读时间需要 10 分钟。

1. 数据准备:收集数据与读取

2. 数据预处理:处理数据

3. 训练集与测试集:将先验数据按一定比例进行拆分。

4. 提取数据特征,将文本解析为词向量 。

5. 训练模型:建立模型,用训练数据训练模型。即根据训练样本集,计算词项出现的概率P(xi|y),后得到各类下词汇出现概率的向量 。

6. 测试模型:用测试数据集评估模型预测的正确率。

混淆矩阵

准确率、精确率、召回率、F值

7. 预测一封新邮件的类别。

 

要点:

理解朴素贝叶斯算法

理解机器学习算法建模过程

理解文本常用处理流程

理解模型评估方法

import csvfrom sklearn.model_selection import train_test_splitimport nltkfrom nltk.corpus import stopwordsfrom nltk.stem import WordNetLemmatizerfrom sklearn.naive_bayes import  MultinomialNBdef preprocessing(text):    # text = text.decode("utf-8")    tokens = [word for sent in nltk.sent_tokenize(text) for word in nltk.word_tokenize(sent)]    stops = stopwords.words('english')    tokens = [token for token in tokens if token not in stops]    tokens = [token.lower() for token in tokens if len(token) >= 3]    lmtzr = WordNetLemmatizer()    tokens = [lmtzr.lemmatize(token) for token in tokens]    preprocessed_text = ' '.join(tokens)    return preprocessed_textdef read_data():    '''读取文件并进行预处理'''    sms=open(r'd:/SMSSpamCollectionjsn.txt','r',encoding='utf-8')    sms_data = []    sms_label = []    csv_reader=csv.reader(sms,delimiter='\t')    nltk.download('punkt')    nltk.download('wordnet')    for line in csv_reader:        print(line)        sms_label.append(line[0])        sms_data.append(preprocessing(line[1]))    sms.close()    x_train,x_test,y_train,y_test = train_test_split(sms_data,sms_label,test_size=0.3,random_state=0,stratify=sms_label)    print(len(sms_data),len(x_train),len(x_test))    print(x_train)    return sms_data,sms_label,x_train,x_test,y_train,y_testdef xiangliang(x_train,x_test):    # 向量化    from sklearn.feature_extraction.text import TfidfVectorizer    vectorizer = TfidfVectorizer(min_df=2, ngram_range=(1, 2), stop_words='english',                                 strip_accents='unicode')  # ,norm='12'    x_train = vectorizer.fit_transform(x_train)    x_test = vectorizer.transform(x_test)    return x_train,x_test,vectorizerdef beiNB(x_train, y_train,x_test):    # 朴素贝叶斯分类器    clf = MultinomialNB().fit(x_train, y_train)    y_nb_pred = clf.predict(x_test)    return y_nb_pred,clfdef result(vectorizer,clf):    # 分类结果    from sklearn.metrics import confusion_matrix    from sklearn.metrics import classification_report    print(y_nb_pred.shape, y_nb_pred)    print('nb_confusion_matrix:')    cm = confusion_matrix(y_test, y_nb_pred)    print(cm)    cr = classification_report(y_test, y_nb_pred)    print(cr)    feature_names = vectorizer.get_feature_names()    coefs = clf.coef_    intercept = clf.intercept_    coefs_with_fns = sorted(zip(coefs[0], feature_names))    n = 10    top = zip(coefs_with_fns[:n], coefs_with_fns[:-(n + 1):-1])    for (coef_1, fn_1), (coef_2, fn_2) in top:        print('\t%.4f\t%-15s\t\t%.4f\t%-15s' % (coef_1, fn_1, coef_2, fn_2))if __name__ == '__main__':    sms_data,sms_lable,x_train,x_test,y_train,y_test = read_data()    X_train,X_test,vectorizer = xiangliang(x_train,x_test)    y_nb_pred,clf = beiNB(X_train, y_train,X_test)    result(vectorizer,clf)

运行结果:

 

转载于:https://www.cnblogs.com/smallgrass/p/10057219.html

你可能感兴趣的文章
做好数据分析必备的5种典型可视化图表
查看>>
Windows I/O模型、同步/异步、阻塞/非阻塞
查看>>
SpringBoot权限控制
查看>>
网络遭受APTs攻击的五个信号
查看>>
C语言算法--统计字符串中单词的个数
查看>>
30万奖金!还带你奔赴加拿大相约KDD!?阿里聚安全算法挑战赛带你飞起!
查看>>
英特尔凌琦:大数据带来的机遇和挑战
查看>>
2017——Linux崛起的时代
查看>>
Devstack — screen 调试工具的使用
查看>>
壮士断腕!WordPress宣布停止使用React
查看>>
WCF版的PetShop之二:模块中的层次划分[提供源代码下载]
查看>>
RabbitMQ常用命令
查看>>
阿里云中间件技术 促进互联网高速发展
查看>>
Fusion-io: 全闪存超大规模数据中心时代的到来
查看>>
LSI针对富士通服务器推出高密度SAS存储设备
查看>>
XtremIO推第二代设备 在块存储上增加文件特性
查看>>
什么是高可用性(HA)?HA是什么
查看>>
82岁成都“极客”老人将族谱“上云” 还想去杭州云栖大会见马云
查看>>
智能时代悄然到来 物联网称王将引爆传感器产业
查看>>
Palo Alto Networks推出云应用框架
查看>>