zoukankan      html  css  js  c++  java
  • 朴素贝叶斯分类法 Naive Bayes ---R

    朴素贝叶斯算法

     【转载时请注明来源】:http://www.cnblogs.com/runner-ljt/

       Ljt   勿忘初心  无畏未来

       作为一个初学者,水平有限,欢迎交流指正。


    朴素贝叶斯分类法是一种生成学习算法。

    假设:在y给定的条件下,各特征Xi 之间是相互独立的,即满足 : P(x1,x2.....x| y)=∏ P(xi | y)    (该算法朴素的体现之处)

    原理:  贝叶斯公式        

                                    

    思想:对于待分类样本,求出在该样本的各特征出现的条件下,其属于每种类别的概率(P(Yi|X)),哪种类别的概率大就将该样本判别为哪一种类别。

                                   

              (P(X)为x的先验概率,与Y无关,在具体计算是分母可以直接忽略,只计算分子)


    P(xi | y)的估计

    (1)特征属性为离散值

           直接用每一类别中各名录出现的频率作为其概率值P(xi|y)

    (2)特征属性为连续性值

           假设特征属性服从正太分布,用各类别的样本均值及标准差作为正态分布的参数。

                                                       

                               


    Laplace 平滑

         在训练样本中,某一特征的属性值可能没有出现,为了保证一个属性出现次数为0时,能够得到一个很小但是非0的概率值。

         在计算P(xi|y)时分子加上 Pi*U ; 分母加上 U  。

         其中Pi 表示xi 出现的先验概率,数值较大的U表示这些先验值是比较重要的,数值较小的U表示这些先验值的影响较小;

         一般情况下,Pi=1/N . (N为该特征所含有的属性类的数目)


    R实现

    包:e1071   ; 函数:naiveBayes

    > 
    > library(e1071)
    > head(iris)
      Sepal.Length Sepal.Width Petal.Length Petal.Width Species
    1          5.1         3.5          1.4         0.2  setosa
    2          4.9         3.0          1.4         0.2  setosa
    3          4.7         3.2          1.3         0.2  setosa
    4          4.6         3.1          1.5         0.2  setosa
    5          5.0         3.6          1.4         0.2  setosa
    6          5.4         3.9          1.7         0.4  setosa
    > classifier<-naiveBayes(iris[,c(1:4)],iris[,5])
    > classifier
    
    Naive Bayes Classifier for Discrete Predictors
    
    Call:
    naiveBayes.default(x = iris[, c(1:4)], y = iris[, 5])
    
    A-priori probabilities:
    iris[, 5]
        setosa versicolor  virginica 
     0.3333333  0.3333333  0.3333333 
    
    Conditional probabilities:
                Sepal.Length
    iris[, 5]     [,1]      [,2]
      setosa     5.006 0.3524897
      versicolor 5.936 0.5161711
      virginica  6.588 0.6358796
    
                Sepal.Width
    iris[, 5]     [,1]      [,2]
      setosa     3.428 0.3790644
      versicolor 2.770 0.3137983
      virginica  2.974 0.3224966
    
                Petal.Length
    iris[, 5]     [,1]      [,2]
      setosa     1.462 0.1736640
      versicolor 4.260 0.4699110
      virginica  5.552 0.5518947
    
                Petal.Width
    iris[, 5]     [,1]      [,2]
      setosa     0.246 0.1053856
      versicolor 1.326 0.1977527
      virginica  2.026 0.2746501
     
    > #A-priori probabilities 为 样本中个类别出现的频率
    > #Conditional probabilities (该样本的特征属于连续型值)该值表示各特征在各类别上的服从正太分布下的均值和标准差
    > 
    >
    >
    > #检验分类器效果
    > table(predict(classifier,iris[,-5]),iris[,5])
                
                 setosa versicolor virginica
      setosa         50          0         0
      versicolor      0         47         3
      virginica       0          3        47
    > 
    > #构造新数据并进行预测
    > newdata<-data.frame(Sepal.Length=5, Sepal.Width=2.3, Petal.Length=3.3, Petal.Width=1) 
    > predict(classifier,newdata)
    [1] versicolor
    Levels: setosa versicolor virginica
    > 
    > 
    

      

  • 相关阅读:
    WPF之窗体说明
    WPF之基本概念
    WPF学习之button
    写一本”错误百出”的C语言学习教程(一)
    JSP的工作原理-还是没理解--多看点再写。
    Java将中文转换成unicode字符。
    postgres 导出数据到csv 文件
    python小试身手-文件重命名,文件复制和压缩(.gz)
    python 环境安装 mark下。
    JRE,JVM,JDK的区别---粘自百度知道、
  • 原文地址:https://www.cnblogs.com/runner-ljt/p/4589017.html
Copyright © 2011-2022 走看看