朴素贝叶斯分类器基本代码 && n折交叉优化
自己也是刚刚入门。。
没脸把自己的代码放上去,先用别人的。
加上自己的解析,挺全面的,希望有用。
import re
import pandas as pd
import numpy as np
from sklearn.metrics import roc_auc_score
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB as MNB #朴素贝叶斯公式
from sklearn.model_selection import cross_val_score
def proces(review):
#把review转成词序列
review_text=re.sub("[^a-zA-Z]"," ",review) #非大小写字母的字符替换成空格
#re.sub是正则表达式的函数,实现比普通字符串更强大的替换功能
#print(review_text)
words=review_text.lower().split() #全转换为小写后,根据空格分割单词
#print(words)
return words
train=pd.read_csv('train.csv',lineterminator='\n') #使用pandas的read读取文件,以换行符号为止为一段数据
'''
官方文件:
pandas.read_csv(filepath_or_buffer, sep=', ', delimiter=None, header='infer',
names=None, index_col=None, usecols=None, squeeze=False, prefix=None,
mangle_dupe_cols=True, dtype=None, engine=None, converters=None,
true_values=None, false_values=None, skipinitialspace=False,
skiprows=None, nrows=None, na_values=None, keep_default_na=True,
na_filter=True, verbose=False, skip_blank_lines=True,
parse_dates=False, infer_datetime_format=False, keep_date_col=False,
date_parser=None, dayfirst=False, iterator=False, chunksize=None,
compression='infer', thousands=None, decimal=b'.', lineterminator=None,
quotechar='"', quoting=0, escapechar=None, comment=None, encoding=None,
dialect=None, tupleize_cols=None, error_bad_lines=True, warn_bad_lines=True,
skipfooter=0, doublequote=True, delim_whitespace=False,
low_memory=True, memory_map=False, float_precision=None) https://blog.csdn.net/sinat_35562946/article/details/81058221
这个博客讲的还行
'''
print(train.head(5))
x=train['review']
#print(x)
y=train['label']
#print(y)
'''
x与y分离train中的记录和标签
'''
class_mapping = {'Negative': 0, 'Positive': 1} y=y.map(class_mapping)
#把label中的Negative,Positive转换成0,1标签
test=pd.read_csv('test.csv', lineterminator='\n')
z=test['review']
w=test['label']
'''
x与y分离test中的记录和标签
'''
w=w.map(class_mapping)
train_data=[]
for i in range(len(x)):
train_data.append(' '.join(proces(x[i]))) #用空格将train.data的list里的words串联在一起
pass
test_data=[]
for i in range(len(z)):
test_data.append(' '.join(proces(z[i]))) #用空格将test_data的list里的words串联在一起
pass data_all=train_data+test_data #所有词合并成大表data
#print(data_all)
#TF-IDF倾向于过滤掉常见的词语,保留重要的词语。
count_vec = TfidfVectorizer(min_df=2, #严格忽略低于给出阈值的文档频率的词条,语料指定的停用词。
analyzer='word', #定义特征为词(word)
ngram_range=(1, 3), #ngram_range(min,max)是指将text分成min,min+1,min+2,.........max 个不同的词组
use_idf=1, #使用idf重新计算权重
smooth_idf=1, #分母加一
sublinear_tf=1, #线性缩放TF
stop_words='english' #忽略英文停用词
)
'''
min_df:float in range [0.0, 1.0] or int, optional, 1.0 by default
当构建词汇表时,严格忽略低于给出阈值的文档频率的词条,语料指定的停用词。
如果是浮点值,该参数代表文档的比例,整型绝对计数值,如果词汇表不为None,此参数被忽略。 analyzer:string,{‘word’, ‘char’} or callable
定义特征为词(word)或n-gram字符,如果传递给它的调用被用于抽取未处理输入源文件的特征序列 ngram_range: tuple(min_n, max_n)
要提取的n-gram的n-values的下限和上限范围,在min_n <= n <= max_n区间的n的全部值
中ngram_range(min,max)是指将text分成min,min+1,min+2,.........max 个不同的词组 比如'Python is useful'中ngram_range(1,3)之后可得到:
'Python' 'is' 'useful' 'Python is' 'is useful' 和'Python is useful'如果是ngram_range (1,1) 则只能得到单个单词'Python' 'is'和'useful' use_idf:boolean, optional
启动inverse-document-frequency重新计算权重 smooth_idf:boolean,optional
通过加1到文档频率(底数)平滑idf权重,为防止除零 <-> 加入一个额外的文档 sublinear_tf:boolean, optional
应用线性缩放TF,例如,使用1+log(tf)覆盖tf。注意,python中log默认取自然对数!
'''
lenth=len(train_data)
count_vec.fit(data_all)
data_all=count_vec.transform(data_all)
train_data=data_all[:lenth]
test_data=data_all[lenth:] #训练朴素贝叶斯分类器
model=MNB()
model.fit(train_data,y)
pred=model.predict(test_data)
MNB(alpha=1.0, class_prior=None, fit_prior=True)
#print("roc_auc",roc_auc_score(w, pred))
MX = 0;
for i in range(5, 10):
MX = max(MX, np.mean(cross_val_score(model, train_data, y, cv=i, scoring='roc_auc'))) #2分类模型
print("多项式贝叶斯分类器10折交叉验证得分: ", MX)
'''
不同的训练集、测试集分割的方法导致其准确率不同.
而交叉验证的基本思想是:将数据集进行一系列分割,生成一组不同的训练测试集,然后分别训练模型并计算测试准确率,
最后对结果进行平均处理。这样来有效降低测试准确率的差异。
'''
朴素贝叶斯分类器基本代码 && n折交叉优化的更多相关文章
- 朴素贝叶斯分类器基本代码 && n折交叉优化 2
这个代码基于上一个代码 不同的是:读取了txt文件,改变了min_ft与max_ft的参数 import re import pandas as pd import warnings import n ...
- 记intel杯比赛中各种bug与debug【其五】:朴素贝叶斯分类器的实现和针对性的优化
咱这个项目最主要的就是这个了 贝叶斯分类器用于做可以统计概率的二元分类 典型的例子就是垃圾邮件过滤 理论基础 对于贝叶斯算法,这里附上两个链接,便于理解: 朴素贝叶斯分类器的应用-阮一峰的网络日志 基 ...
- 文本分类(TFIDF/朴素贝叶斯分类器/TextRNN/TextCNN/TextRCNN/FastText/HAN)
目录 简介 TFIDF 朴素贝叶斯分类器 贝叶斯公式 贝叶斯决策论的理解 极大似然估计 朴素贝叶斯分类器 TextRNN TextCNN TextRCNN FastText HAN Highway N ...
- 数据挖掘十大经典算法(9) 朴素贝叶斯分类器 Naive Bayes
贝叶斯分类器 贝叶斯分类器的分类原理是通过某对象的先验概率,利用贝叶斯公式计算出其后验概率,即该对象属于某一类的概率,选择具有最大后验概率的类作为该对象所属的类.眼下研究较多的贝叶斯分类器主要有四种, ...
- 用scikit-learn实现朴素贝叶斯分类器 转
原文:http://segmentfault.com/a/1190000002472791 朴素贝叶斯(Naive Bayes Classifier)是一种「天真」的算法(假定所有特征发生概率是独立的 ...
- 十大经典数据挖掘算法(9) 朴素贝叶斯分类器 Naive Bayes
贝叶斯分类器 贝叶斯分类分类原则是一个对象的通过先验概率.贝叶斯后验概率公式后计算,也就是说,该对象属于一类的概率.选择具有最大后验概率的类作为对象的类属.现在更多的研究贝叶斯分类器,有四个,每间:N ...
- 机器学习---朴素贝叶斯分类器(Machine Learning Naive Bayes Classifier)
朴素贝叶斯分类器是一组简单快速的分类算法.网上已经有很多文章介绍,比如这篇写得比较好:https://blog.csdn.net/sinat_36246371/article/details/6014 ...
- 朴素贝叶斯分类器及Python实现
贝叶斯定理 贝叶斯定理是通过对观测值概率分布的主观判断(即先验概率)进行修正的定理,在概率论中具有重要地位. 先验概率分布(边缘概率)是指基于主观判断而非样本分布的概率分布,后验概率(条件概率)是根据 ...
- 朴素贝叶斯分类器(Naive Bayes)
1. 贝叶斯定理 如果有两个事件,事件A和事件B.已知事件A发生的概率为p(A),事件B发生的概率为P(B),事件A发生的前提下.事件B发生的概率为p(B|A),事件B发生的前提下.事件A发生的概率为 ...
随机推荐
- python 爬虫写入txt:UnicodeEncodeError: ‘gbk’ codec can’t encode character 错误的解决办法
原链接:https://blog.csdn.net/vito21/article/details/53490435 今天爬一个网站的内容,在写入TXT文件时,某些页面总是报UnicodeEncodeE ...
- java 面向对象(四十一):反射(五)反射应用二:获取运行时类的完整结构
我们可以通过反射,获取对应的运行时类中所有的属性.方法.构造器.父类.接口.父类的泛型.包.注解.异常等....典型代码: @Test public void test1(){ Class clazz ...
- 数据可视化之powerBI基础(十一)Power BI中的数据如何导出到Excel中?
https://zhuanlan.zhihu.com/p/64415543 把Excel中数据加载到PowerBI中我们都已经熟悉了,但是怎么把在PowerBI中处理好的数据导出到Excel中呢?毕竟 ...
- 数据可视化之powerBI基础(三)编辑交互,体验更灵活的PowerBI可视化
https://zhuanlan.zhihu.com/p/64412190 PowerBI可视化与传统图表的一大区别,就是可视化分析是动态的,通过页面上筛选.钻取.突出显示等交互功能,可以快速进行访问 ...
- JavaScript之setinterval的具体使用
关于setInterval在api文档中也有很详细的解释,比如下面那两个: setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式. setInterval() 方法会不停 ...
- 大话深度学习:B站Up主麦叔教你零代码实现图像分类神经网络
之前,我在B站发布了“大话神经网络,10行代码不调包,听不懂你打我!”的视频后,因为简单易懂受到了很多小伙伴的喜欢! 但也有小伙伴直呼不够过瘾,因为大话神经网络只有4个神经元. 也有小伙伴问不写代码, ...
- 创建MongoDB副本集教程
今天有时间搞了一下mongoDB的副本集,遇到好多坑,写下此文,方便日后查阅! 本教程是在windows环境下安装测试的(我是本机一台 + 两台虚拟机) 本机:10.53.8.159 虚拟机一:10. ...
- InceptionV4
目录 1. inception v4 2. Inception-resnet-v1 & Inception-resnet-v2 2.1 Inception-resnet-v1的组成模块 2.2 ...
- 如果你还不知道如何控制springboot中bean的加载顺序,那你一定要看此篇
1.为什么需要控制加载顺序 springboot遵从约定大于配置的原则,极大程度的解决了配置繁琐的问题.在此基础上,又提供了spi机制,用spring.factories可以完成一个小组件的自动装配功 ...
- 主机无法访问虚拟机中运行的Django项目
在虚拟机中的linux上运行了Django项目,虚拟机中可以访问,但外部主机无法访问(连接超时),但主机能ping同虚拟机,虚拟机也能ping通主机 需检查三个地方:(后面发现虚拟机的ip地址存在改变 ...