- 使用sklearn数据包进行数据分析,sklearn.datasets 是sklearn自带的模块,提供了一些导入、在线下载及本地生成数据集的方法:
- load_<dataset_name> 本地加载数据,如:
Iris = datasets.load_iris #鸢尾花数据集
- fetch_<dataset_name> 远程加载数据
- make_<dataset_name> 构造数据集
- load_<dataset_name> 本地加载数据,如:
- scikit-learn根据不同场景提供了三种常用的朴素贝叶斯算法:GaussianNB,MultinomialNB,BernoulliNB
- GaussianNB 高斯分布朴素贝叶斯模型,多应用于样本特征的分布大部分是连续值的情况
- MultinomialNB 多项式分布不素贝叶斯模型,多应用于样本特征的分大部分是多元离散值
- BernoulliNB 伯努利分布朴素贝叶斯,适用于伯努利分布,多应用与样本特征是二元离散值或者很稀疏的多元离散值
- 导入 GaussianNB 模型
from sklearn.naive_bayes import GaussianNB
- 生成训练模型的实例
g_NB = GaussianNB()
- 从鸢尾花数据集中抽取数据 X_train,Y_train,并用于训练
#获得本地iris数据 iris = datasets.load_iris() #生成150个数据序列 index = np.arange(0,150) #打乱该序列 np.random.shuffle(index) #抽取训练集数据 X_train = iris.data[index[:-10]] #抽取测试集数据 x_test = iris.data[index[-10:]] #对应训练集数据,获得相应标记数据 Y_train = iris.target[index[:-10]] #获得测试集中的相应标记数据 y_test = iris.target[index[-10:]] #训练模型g_NB g_NB.fit(X_train,Y_train) #显示训练模型在测试集上的准确度,score()函数Returns the mean accuracy on the given test data #and labels. g_NB.score(x_test,y_test)
- 鸢尾花数据集:Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集。通过花萼长度,花萼宽度,花瓣长度,花瓣宽度4个属性预测鸢尾花卉属于(Setosa,Versicolour,Virginica)三个种类中的哪一类。
- 数据来源:http://archive.ics.uci.edu/ml/datasets/Iris
- (具体可参考博客原文:https://blog.csdn.net/heuguangxu/article/details/80426437 )
- sklearn 0.18中文版文档:http://cwiki.apachecn.org/pages/viewpage.action?pageId=10030181
- sklearn.featrue_extraction 模块的作用是feature selection(模型选择)
- Univariate feature selection : 单变量的特征选择,原理是分别单独计算每个变量的某个统计指标,根据该指标来判断哪些指标重要,然后剔除哪些不重要的指标。
- Recursive feature elimination:循环特征选择:不单独的检验某个变量的价值,而是将其聚集在一起检验。它的基本思想是,对于一个数量为d的feature的集合,他的所有的子集的个数是2的d次方减1(包含空集)。指定一个外部的学习算法,比如SVM之类的。通过该算法计算所有子集的validation error。选择error最小的那个子集作为所挑选的特征。
- Tree-based feature selection:决策树特征选择:基于决策树算法做出特征选择
- IF-IDF(term frequency-inverse document frequency)词频-逆向文件频率。在处理文本时,如何将文字转化为模型可以处理的向量呢?IF-IDF就是这个问题的解决方案之一。字词的重要性与其在文本中出现的频率成正比(IF),与其在语料库中出现的频率成反比(IDF)。
- IF:词频。IF(w)=(词w在文档中出现的次数)/(文档的总词数)
- IDF:逆向文件频率。有些词可能在文本中频繁出现,但并不重要,也即信息量小,如is,of,that这些单词,这些单词在语料库中出现的频率也非常大,我们就可以利用这点,降低其权重。IDF(w)=log_e(语料库的总文档数)/(语料库中词w出现的文档数)
- 将上面的IF-IDF相乘就得到了综合参数:IF-IDF=IF*IDF
- fit_transform 详解(原文:https://blog.csdn.net/weixin_38278334/article/details/82971752)
- fit和transform没有关系,是数据处理的两个不同环节
- sklearn里的封装好的各种算法使用前都要fit,fit相对于整个代码而言,为后续API服务。fit之后,然后调用各种API方法,transform只是其中一个API方法,所以当你调用transform之外的方法,也必须要先fit()一下。
- fit原义指的是安装、使适合的意思,其实有点train的含义,但是和train不同的是,它并不是一个训练的过程,而是一个适配的过程,过程都是确定的,最后得到一个可用于转换的有价值的信息。
#定义TfidfVectorizer方法 tf = TfidfVectorizer() #使x符合X的结构特征,x_test是一个稀疏矩阵类型的对象,行数为样本数,列数为X中所有出现的单词统计个数 #若果x中对应的单词出现,则在矩阵相应的行 该单词相应的列标注为1,否则为0 x_test = tf.fit(X).transform(x)
- fit() ——Method calculates the parameters μ and σ and saves them as internal objects.
解释:简单来说,就是求得训练集X的均值,方差,最大值,最小值,这些训练集X固有的属性。 - transform(): Method using these calculated parameters apply the transformation to a particular dataset.
解释:在fit的基础上,进行标准化,降维,归一化等操作。 - fit_transform(): joins the fit() and transform() method for transformation of dataset.
解释:fit_transform是fit和transform的组合,既包括了训练又包含了转换。fit_transform(trainData)对部分数据先拟合fit,找到该part的整体指标,如均值、方差、最大值最小值等等(根据具体转换的目的),然后对该trainData进行转换transform,从而实现数据的标准化、归一化等等。
- sklearn.featrue_extraction 模块的作用是feature selection(模型选择)
- Python读取文件
-
''' 这样直接打开文件,如果出现异常,如读取过程中文件不存在或异常,则直接出现错误,close方法无法执行,文件无法关闭 ''' ham_file = open('file_path','r') for line in ham_file.readlines(): print(line) ham_file.close()
-
''' 用with语句的好处,就是到达语句末尾时,会自动关闭文件,即便出现异常. 可以使用errors='ignore'忽略错误 with语句作用效果相当于上面的try-except-finally ''' with open('file_path',errors='ignore') as file: for line in file.readlines(): print(line)
-
''' 或者使用read()函数进行整个文件的读取 ''' with open('file_paht',errors='ignore') as file: print(file.read())
-
-
朴素贝叶斯——分析 20newsgroups
- (参考原文https://blog.csdn.net/imstudying/article/details/77876159#OLE_LINK2)
- 20newsgroups数据集是用于文本分类、文本挖据和信息检索研究的国际标准数据集之一。数据集收集了大约20,000左右的新闻组文档,均匀分为20个不同主题的新闻组集合。在sklearn中,该模型有两种装载方式,
- 第一种是sklearn.datasets.fetch_20newsgroups,返回一个可以被文本特征提取器(如sklearn.feature_extraction.text.CountVectorizer)自定义参数提取特征的原始文本序列;
- 第二种是sklearn.datasets.fetch_20newsgroups_vectorized,返回一个已提取特征的文本序列,即不需要使用特征提取器。
- model_selection.GridSearchCV Exhaustive search over specified parameter values for an estimator.
- https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html#sklearn.model_selection.GridSearchCV
- Important members are fit, predict.
GridSearchCV implements a “fit” and a “score” method. It also implements “predict”, “predict_proba”, “decision_function”, “transform” and “inverse_transform” if they are implemented in the estimator used.
The parameters of the estimator used to apply these methods are optimized by cross-validated grid-search over a parameter grid. - (参考博客:https://blog.51cto.com/emily18/2088128?utm_source=oschina-app)GridSearchCV,它存在的意义就是自动调参,只要把参数输进去,就能给出最优化的结果和参数。但是这个方法适合于小数据集,一旦数据的量级上去了,很难得出结果。这个时候就是需要动脑筋了。数据量比较大的时候可以使用一个快速调优的方法——坐标下降。它其实是一种贪心算法:拿当前对模型影响最大的参数调优,直到最优化;再拿下一个影响最大的参数调优,如此下去,直到所有的参数调整完毕。这个方法的缺点就是可能会调到局部最优而不是全局最优,但是省时间省力,巨大的优势面前,还是试一试吧,后续可以再拿bagging再优化。
- sklearn.metrics
- 模型评估
- 使用各个模型提供的score方法来进行评估。 这种方法对于每一种学习器来说都是根据学习器本身的特点定制的,不可改变,这种方法比较简单。这种方法受模型的影响
- 用交叉验证cross_val_score,或者参数调试GridSearchCV,它们都依赖scoring参数传入一个性能度量函数。
- Metric方法,Metric有为各种问题提供的评估方法。这些问题包括分类、聚类、回归等。这是我们下面的使用metrics进行模型评估。
- if __name__ == "__main__":
- 如果某.py文件包含该段代码,含义是如果该.py文件直接作为脚本被执行时, if __name__ == "__main__":中的代码将被完整执行,
- 如果该.py文件被import至其他文件中,则 if __name__ == "__main__":中的代码被忽略
-
朴素贝叶斯的三种模型
- 朴素贝叶斯算法就是 基于贝叶斯定理与特征条件独立假设的分类方法。
- 朴素贝叶斯算法关键在于求解后验概率P(Y|X),根据贝叶斯定理和特征条件独立假设,可以将问题转化为求解先验概率P(Y)和条件概率P(X|Y)。关于先验概率P(Y)和条件概率P(X|Y)的求解,一般有三种模型:高斯(正态)分布朴素贝叶斯、多项式分布朴素贝叶斯、伯努利分布朴素贝叶斯。(参考:https://blog.csdn.net/u012162613/article/details/48323777)
- 多项式分布朴素贝叶斯:
- 当特征是离散的时候,使用多项式模型。
- 多项式分布:
-
- 多项式分布朴素贝叶斯: