zoukankan      html  css  js  c++  java
  • 数据挖掘——分类算法——贝叶斯分类、决策树

    贝叶斯定理(Bayes Theorem)

    formula

    朴素贝叶斯分类(Naive Bayes Classifier)

      贝叶斯分类算法(NB),是统计学的一种分类方法,它是利用贝叶斯定理的概率统计知识,对离散型数据进行分类的算法。

     朴素贝叶斯的思想基础是这样的:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别

    tips:python中sklearn包的naive_bayes模块中,由三种贝叶斯算法类型:

    • GaussuanNB   高斯贝叶斯 :适用于特征值符合正态分布的数据,不需要知道具体每个样本的数值,只需知道样本符合什么样的正态分布(均值、方差)即可计算;
    • BernoulliNB  伯努利贝叶斯:适用于特征值符合伯努利分布的数据,即是/否,0/1;
    • MultinomialNB  多项式贝叶斯:不知道特征值符合哪种分布的时候,使用多项式贝叶斯算法计算每个特征的概率,所以需要知道每个特征值的数值大小(最常用于文本分类)。

    使用多项式贝叶斯进行分本分类的实现:

    #构建语料库,需要包含文本分类

    #进行分词

    #文本向量化

    #构建多项式贝叶斯模型

    from sklearn.naive_bayes import MultinomialNB
    #多项式贝叶斯分类模型建立
    MNBmodle = MultinomialNB()
    #将文本向量作为特征值传入,将分类序列作为目标序列传入
    MNBmodle.fit(textVector,corpos['class'])
    MNBmodle.score(textVector,corpos['class'])

    tips:多项式贝叶斯非常适用于文本分类

    #针对新文本进行分类(需要进行分词和向量化操作),得到分类预测

    MNBmodle.predict(newTextVector)

     

    决策树(Decision Tree)

      决策树通过对训练样本的学习,并建立分类规则,然后依据分类规则,对新样本数据进行分类预测,属于有监督学习

      决策树是在已知各种情况发生概率的基础上,通过构成决策树来求取净现值的期望值大于等于零的概率,评价项目风险,判断其可行性的决策分析方法,是直观运用概率分析的一种图解法。

      由于这种决策分支画成图形很像一棵树的枝干,故称决策树。

      在机器学习中,决策树是一个预测模型,他代表的是对象属性与对象值之间的一种映射关系。

      决策树是一种树形结构,其中每个内部节点表示一个属性上的测试,每个分支代表一个测试输出,每个叶节点代表一种类别。

    优点:

      决策树易于理解和实现

       决策树可同时处理数值型和非数值型数据

    缺点:

      对连续性的字段较难预测

      对有时间顺序的数据,需要很多的预处理工作

      当类别较多时,错误可能增加的比较快  

    python实现决策树模型的构建

    重点代码:

    dtmodel = DecisionTreeClassifier(max_leaf_nodes=None)   #最大叶子节点数

    dtModel.fit(featureData, targetData)  #特征数据、目标数据

    #对离散型变量进行虚拟化

    #设置特征变量、目标变量

    #构建决策树模型

    from sklearn.tree import DecisionTreeClassifier
    dtmodel = DecisionTreeClassifier(max_leaf_nodes=8) #最大叶数为8
    #模型验证
    from sklearn.model_selection import cross_val_score
    cross_val_score(dtmodel,fdata,tdata,cv=10)  #交叉验证10次
    #模型训练
    dtmodel.fit(fdata,tdata)

    #绘制决策树模型  (需要下载安装graphviz软件 并 安装pydot包,可参考http://wenda.chinahadoop.cn/question/5518

    #绘制决策树图形
    from sklearn.tree import export_graphviz
    with open(r'D:...data.dot','w') as f:
        f = export_graphviz(dtmodel, out_file=f)
    
    import pydot
    from sklearn.externals.six import StringIO
    
    dot_data = StringIO()
    export_graphviz(
            dtmodel, #模型名称
            out_file=dot_data,  #图形数据的输出路径
            class_names=['A','B'],  #目标属性的名称
            feature_names=['a','b','c','d'],  #特征属性的名称
            filled=True, #是否使用颜色填充
            rounded=True, #边框是否圆角
            special_characters=True) #是否有特殊字符(含中文就算)
    
    graph = pydot.graph_from_dot_data(dot_data.getvalue())
    
    graph.get_node('node')[0].set_fontname('Microsoft YaHei')
    
    graph.write_png(r'D:...决策树.png')

    #最终在目标路径下得到决策树的图形

     

  • 相关阅读:
    Sicily 1795 Table tennis
    【转】关于使用printf和scanf对short进行输入输出的一段有趣对话
    Sicily 1561 PRIME
    【读书笔记】the TeXBook 1
    Sicily 1934 移动小球
    Sicily 1817 校歌手大奖赛
    个人总结flex各种用法(转)
    ActionScript3编译运行
    Flash & Flex组件优化的杀手锏callLater
    readResolve()方法与串行化
  • 原文地址:https://www.cnblogs.com/rix-yb/p/9769949.html
Copyright © 2011-2022 走看看