统计学习方法——朴素贝叶斯

  1.  使用sklearn数据包进行数据分析,sklearn.datasets 是sklearn自带的模块,提供了一些导入、在线下载及本地生成数据集的方法:
    1. load_<dataset_name> 本地加载数据,如:
      Iris = datasets.load_iris #鸢尾花数据集
    2. fetch_<dataset_name> 远程加载数据
    3. make_<dataset_name> 构造数据集
  2. scikit-learn根据不同场景提供了三种常用的朴素贝叶斯算法:GaussianNB,MultinomialNB,BernoulliNB
    1. GaussianNB 高斯分布朴素贝叶斯模型,多应用于样本特征的分布大部分是连续值的情况
    2. MultinomialNB 多项式分布不素贝叶斯模型,多应用于样本特征的分大部分是多元离散值
    3. BernoulliNB 伯努利分布朴素贝叶斯,适用于伯努利分布,多应用与样本特征是二元离散值或者很稀疏的多元离散值
  3.  导入 GaussianNB 模型
    from sklearn.naive_bayes import GaussianNB

     

  4. 生成训练模型的实例
    g_NB = GaussianNB()

     

  5. 从鸢尾花数据集中抽取数据 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)

     

  6. 鸢尾花数据集:Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集。通过花萼长度,花萼宽度,花瓣长度,花瓣宽度4个属性预测鸢尾花卉属于(Setosa,Versicolour,Virginica)三个种类中的哪一类。
    1. 数据来源:http://archive.ics.uci.edu/ml/datasets/Iris
    2. (具体可参考博客原文:https://blog.csdn.net/heuguangxu/article/details/80426437 )
  7. sklearn 0.18中文版文档:http://cwiki.apachecn.org/pages/viewpage.action?pageId=10030181
    1.   sklearn.featrue_extraction 模块的作用是feature selection(模型选择)
      1. Univariate feature selection : 单变量的特征选择,原理是分别单独计算每个变量的某个统计指标,根据该指标来判断哪些指标重要,然后剔除哪些不重要的指标。
      2. Recursive feature elimination:循环特征选择:不单独的检验某个变量的价值,而是将其聚集在一起检验。它的基本思想是,对于一个数量为d的feature的集合,他的所有的子集的个数是2的d次方减1(包含空集)。指定一个外部的学习算法,比如SVM之类的。通过该算法计算所有子集的validation error。选择error最小的那个子集作为所挑选的特征。
      3. Tree-based feature selection:决策树特征选择:基于决策树算法做出特征选择 
      4. IF-IDF(term frequency-inverse document frequency)词频-逆向文件频率。在处理文本时,如何将文字转化为模型可以处理的向量呢?IF-IDF就是这个问题的解决方案之一。字词的重要性与其在文本中出现的频率成正比(IF),与其在语料库中出现的频率成反比(IDF)。
        1. IF:词频。IF(w)=(词w在文档中出现的次数)/(文档的总词数)
        2. IDF:逆向文件频率。有些词可能在文本中频繁出现,但并不重要,也即信息量小,如is,of,that这些单词,这些单词在语料库中出现的频率也非常大,我们就可以利用这点,降低其权重。IDF(w)=log_e(语料库的总文档数)/(语料库中词w出现的文档数)
        3. 将上面的IF-IDF相乘就得到了综合参数:IF-IDF=IF*IDF
      5.   fit_transform 详解(原文:https://blog.csdn.net/weixin_38278334/article/details/82971752
        1. fit和transform没有关系,是数据处理的两个不同环节
        2. sklearn里的封装好的各种算法使用前都要fit,fit相对于整个代码而言,为后续API服务。fit之后,然后调用各种API方法,transform只是其中一个API方法,所以当你调用transform之外的方法,也必须要先fit()一下。
        3. fit原义指的是安装、使适合的意思,其实有点train的含义,但是和train不同的是,它并不是一个训练的过程,而是一个适配的过程,过程都是确定的,最后得到一个可用于转换的有价值的信息。
          #定义TfidfVectorizer方法
          tf = TfidfVectorizer()
          #使x符合X的结构特征,x_test是一个稀疏矩阵类型的对象,行数为样本数,列数为X中所有出现的单词统计个数
          #若果x中对应的单词出现,则在矩阵相应的行 该单词相应的列标注为1,否则为0
          x_test = tf.fit(X).transform(x)

           

        4. fit() ——Method calculates the parameters μ and σ and saves them as internal objects.
          解释:简单来说,就是求得训练集X的均值,方差,最大值,最小值,这些训练集X固有的属性。
        5. transform(): Method using these calculated parameters apply the transformation to a particular dataset.
          解释:在fit的基础上,进行标准化,降维,归一化等操作。
        6. fit_transform(): joins the fit() and transform() method for transformation of dataset.
          解释:fit_transform是fit和transform的组合,既包括了训练又包含了转换。fit_transform(trainData)对部分数据先拟合fit,找到该part的整体指标,如均值、方差、最大值最小值等等(根据具体转换的目的),然后对该trainData进行转换transform,从而实现数据的标准化、归一化等等。
  8. Python读取文件
    1. '''
      这样直接打开文件,如果出现异常,如读取过程中文件不存在或异常,则直接出现错误,close方法无法执行,文件无法关闭
      '''
      ham_file = open('file_path','r')
      for line in ham_file.readlines():
          print(line)
      ham_file.close()

       

    2. '''
      用with语句的好处,就是到达语句末尾时,会自动关闭文件,即便出现异常.
      可以使用errors='ignore'忽略错误
      with语句作用效果相当于上面的try-except-finally
      '''
      with open('file_path',errors='ignore') as file:
          for line in file.readlines():
              print(line)

       

    3. '''
      或者使用read()函数进行整个文件的读取
      '''
      with open('file_paht',errors='ignore') as file:
          print(file.read())

       

  9. 朴素贝叶斯——分析 20newsgroups

    1. (参考原文https://blog.csdn.net/imstudying/article/details/77876159#OLE_LINK2
    2. 20newsgroups数据集是用于文本分类、文本挖据和信息检索研究的国际标准数据集之一。数据集收集了大约20,000左右的新闻组文档,均匀分为20个不同主题的新闻组集合。在sklearn中,该模型有两种装载方式,
      1. 第一种是sklearn.datasets.fetch_20newsgroups,返回一个可以被文本特征提取器(如sklearn.feature_extraction.text.CountVectorizer)自定义参数提取特征的原始文本序列;
      2. 第二种是sklearn.datasets.fetch_20newsgroups_vectorized,返回一个已提取特征的文本序列,即不需要使用特征提取器。
    3.   model_selection.GridSearchCV      Exhaustive search over specified parameter values for an estimator.
      1. https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html#sklearn.model_selection.GridSearchCV
      2. 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.
      3. (参考博客:https://blog.51cto.com/emily18/2088128?utm_source=oschina-app)GridSearchCV,它存在的意义就是自动调参,只要把参数输进去,就能给出最优化的结果和参数。但是这个方法适合于小数据集,一旦数据的量级上去了,很难得出结果。这个时候就是需要动脑筋了。数据量比较大的时候可以使用一个快速调优的方法——坐标下降。它其实是一种贪心算法:拿当前对模型影响最大的参数调优,直到最优化;再拿下一个影响最大的参数调优,如此下去,直到所有的参数调整完毕。这个方法的缺点就是可能会调到局部最优而不是全局最优,但是省时间省力,巨大的优势面前,还是试一试吧,后续可以再拿bagging再优化。
    4.  sklearn.metrics
      1. 参考博客:http://www.mamicode.com/info-detail-2231900.html
      2.  
    5.  模型评估
      1. 使用各个模型提供的score方法来进行评估。 这种方法对于每一种学习器来说都是根据学习器本身的特点定制的,不可改变,这种方法比较简单。这种方法受模型的影响
      2. 用交叉验证cross_val_score,或者参数调试GridSearchCV,它们都依赖scoring参数传入一个性能度量函数。
      3. Metric方法,Metric有为各种问题提供的评估方法。这些问题包括分类、聚类、回归等。这是我们下面的使用metrics进行模型评估。
    6.  if __name__ == "__main__":
      1. 如果某.py文件包含该段代码,含义是如果该.py文件直接作为脚本被执行时, if __name__ == "__main__":中的代码将被完整执行,
      2. 如果该.py文件被import至其他文件中,则 if __name__ == "__main__":中的代码被忽略
    7.  
    8.  
    9.  
  10. 朴素贝叶斯的三种模型

    1. 朴素贝叶斯算法就是 基于贝叶斯定理特征条件独立假设的分类方法。
    2. 朴素贝叶斯算法关键在于求解后验概率P(Y|X),根据贝叶斯定理和特征条件独立假设,可以将问题转化为求解先验概率P(Y)和条件概率P(X|Y)。关于先验概率P(Y)和条件概率P(X|Y)的求解,一般有三种模型:高斯(正态)分布朴素贝叶斯、多项式分布朴素贝叶斯、伯努利分布朴素贝叶斯。(参考:https://blog.csdn.net/u012162613/article/details/48323777
      1. 多项式分布朴素贝叶斯:
        1. 当特征是离散的时候,使用多项式模型。
        2. 多项式分布:
      2.  

  11.  
  12.  
  13.  
  14.  
  15.  

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值