zoukankan      html  css  js  c++  java
  • An Algorithm Summary of Programming Collective Intelligence (1)

    就按照最后一章的顺序来说吧。很多名字都不知道中文该怎么说,就直接用英文名称了。

    Naive Bayesian Classifier 朴素贝叶斯分类器
    nb算法是通过学习样本中已经分类的条目,计算生成条目中的特性相对于类别的概率矩阵,然后根据待分类条目中特性在这个矩阵中的值来反向计算条目的类别概率。

    P(Category|Item)=P(Item|Category)*P(Category)/P(Item)

    在静态样本中,P(Item)是固定的,所以可以去掉简化计算。但是如果样本集是动态的,就需要考虑进来。

    P(Item|Category)=P(Feature1|Category)*P(Feature2|Category)*...

    优点:
    速度快
    增量训练时可以不使用旧样本
    容易理解
    分类效果往往比想象的好
    缺点:
    对于内容庞杂的大分类来说效果不太好,特别是出现比较中性的特性组合时更是如此。

    Decision Tree Classifier 决策树
    dt算法进行分类计算是很简单直观的,它的技巧在于决策树的构造过程。样本是已知的条件结果数据矩阵,需要决定的是用来分类的条件顺序。为了得到这个顺序,就要针对每个条件计算单纯应用这个条件分类后结果的混合度,也就是看用哪个条件来分可以分得更清楚一些。确定了最好的分类条件,就把数据分开成若干子集,对每个子集再计算最佳分类条件,以此类推,直到子集只包含一个结果或者达到某些终止条件。

    dt算法有两个有意思的地方。一是如何计算应用某个条件得到的分类结果的混合度。书里面给了一个简单的计数算法和一个熵算法(好亲切啊)。

    p(i)=frequency(outcome)=count(outcome)/count(total rows)
    Entropy=sum of p(i)*log(p(i) for all outcomes

    进一步计算information gain:
    weight1 = size of subset1 / size of original set
    weight2 = size of subset2 / size of original set
    gain = entropy(original) – weight1*entropy(set1) – weight2*entropy(set2)

    另外一个有意思的地方是对不同类型的条件数据如何选择分类点。对于是否问题这个比较容易解决,但是对于数值或者字符串或者更复杂的类型就要特殊情况特殊处理了。

    优点:
    结果简洁直观
    可以处理不同的条件数据类型
    缺点:
    不能通过增量训练来改进,生成决策树必须使用整个已知样本集。
    大数据集可能存在的众多条件会产生巨大繁杂的决策树,分类计算会变得缓慢。

  • 相关阅读:
    C++-struct类的新特性当class用
    rbenv、fish 與 VSCode 設置之路
    angularJS进阶阶段(4)
    插入排序
    Vimium
    Design Patterns 25
    Mysql(或者sqlite), Mongo中update Column + 1
    Hexo
    继承
    Gradle的依赖方式——Lombok在Gradle中的正确配置姿势
  • 原文地址:https://www.cnblogs.com/ysjxw/p/1148887.html
Copyright © 2011-2022 走看看