Programming.Collective.Intelligence中对常用机器学习算法的总结

  1. 朴素贝叶斯分类器,例子是有若干文档组成的样例,每个文档中的词语作为特征,通过独立分布假设和贝叶斯公司,文档属于某一分类的概率,可以转化为该分类中,这个文档中每个特征出现的概率
    1. 最大优势是处理大数据集时的速度,因为在更新概率计算时不需要用到以前的数据,即适合incremental training的应用,例如垃圾邮件过滤
    2. 另一个优势是分类器的学习过程易于理解,很容易在数据库中发现最易于分类的特征,来判断是垃圾邮件还是非垃圾邮件,python表示编程语言还是蛇
    3. 缺陷是它不能处理组合特征的情形。例如online pharmacy,两个词分开时可能为普通邮件,组合时很可能为垃圾邮件,这种情形无法用贝叶斯分类器学习到:如果以分块时为训练数据,训练出来的组合情形可能判断为普通邮件。这是由于特征间的独立同分布假设造成的。
  2. 决策树分类器
    1. 最大的优势是模型有助于理解,可以很清楚地知道哪些因素对分类是最重要的(根节点),有多重要
    2. 能够处理数值数据和分类数据作为输入的情形,但是不能很好地预测数值数据的结果
    3. 比贝叶斯分类器的优势是能够处理变量相互影响的情形,如特征组合的情况
    4. 然而,该分类器在邮件过滤中不实用的原因是它不能用于incremental training, 每次训练时需要用到所有的数据集
  3. 神经网络
    1. 主要的优势是能处理复杂的非线性函数,发现不同输入之间的依赖性,也能够处理输入输出为数值的情形。
    2. 它也能用于incremental training的情形,只需要存储一些突触(像是中间状态)的权重
    3. 主要缺陷是,它是一种黑盒方法,不能给出预测结果的缘由
    4. 另一个缺陷是,没有确定的法则来指导训练率和网络大小的选择,通常只能根据大量的实验,依靠经验来选取
  4. SVM
    1. 强大的分类器,预测速度很快
    2. 缺点是每个数据集最好的核转换函数和参数都不相同,每次都要重新选取,一般需要通过交叉校验
    3. SVM适合大数据集存在的问题,不像决策树,即使是少量数据也能给出一些有用的信息
    4. 和神经网络一样,都是black-box方法,甚至比NN更难于理解,因为涉及到将数据转换到高维空间的步骤
  5. K-NN
    1. 找最近邻,通常需要一个距离度量函数,例如Euclidean distance, pearson corralation and Tanimoto score. 易于理解,在很多应用中都会用到,例如推荐算法。实际应用如通过训练数据中相机的特征(像素)和价格来推断某款相机的价格
  6. 聚类
    1. 常用的有hierarchical clustering和k-means clustering, 实际应用如博客的分类,是技术博客还是新闻博客等
  7. 非负矩阵分解
    1. 无监督方法,主要用来描述数据而不是预测数据的分类或者分值。 例如将股票交易额分解为单只或多只股票受影响的事件;将用户对电影的评价打分矩阵分解成用户-影响影子,电影-影响因子两个矩阵。注意每次分解得到的矩阵可不同

你可能感兴趣的:(编程,算法,python,网络应用)