《集体智慧编程》摘要

提供推荐

  • 皮尔逊相关度评价
    • 适合于数据不规范的情况
    • 比如某一影评者的打分总是对于平均水平偏离很大(比如总是偏低),此时用欧几里得距离计算出来的差别不大,无法很好地分类
    • 原理是根据不同人的评分将影片映射为空间中的点,然后对于大量的点拟合一条线,比较不同人的线的相关度

发现群组

  • 无监督学习的目的是发现数据包含的内在结构
  • K-均值聚类
    • 输入数据一般需要做缩放,如标准化
      • 原理:K均值是建立在距离度量上的,因此不同变量间如果维度差别过大,可能会造成少数变量“施加了过高的影响而造成垄断”。
    • 优点:运行速度快,能够处理的数据量大,且易于理解。
    • 缺点:算法性能有限,在高维上可能不是最佳选项。

搜索与排名

  • 一些关于有效查找到的思想
    • 单词频度
      • 一个网站中包含关键字的数量越多,越有可能是想要查找的网站
    • 单词位置
      • 对于一个相关网页,我们搜索的关键字往往会出现在靠近网页开始的位置
    • 单词距离
      • 当有多个关键词时,寻找单词间距离更近的网站往往是有意义的
  • pagerank算法
    • 一个网页的重要性取决于指向该网站的所有其他网站的重要性
    • 决定因素:
      • 指向该网站的其他网站的PageRank值
      • 每个指向该网站的其他网站的总link数
        • link越多值越小
      • 阻尼因子
        • PageRank计算的是某个用户在任意点击连接后到达某一网站的可能性,理论来说,经过无限次点击后会到达任意网站,但是大多数人在数次点击后会停止,于是设计了阻尼因子的概念
    • 初始化时设定一个初始值(比如1.0),经过数次迭代后会趋于稳定值(就是PageRank值)

优化算法

  • 将要解决的问题转化为一个成本函数,而我们的任务就是是的成本函数最小
  • 最简单的方法就是随机搜索,他是我们评估其他算法的基线(base line)
  • 爬山算法
    • 类似于梯度下降法
    • 缺点在于可能求得的局部最小值而不是全局最小值
    • 可以用随机重复爬山法改进
  • 模拟退火算法
    • 设定一个接受概率函数,他与自定的温度变量以及成本值相关。
    • 当温度高的时候,成本值稍大的解也可能接受(所以在初始阶段解可能反而变差),但是温度在不断迭代中不断下降,而温度低的时候只有成本值很低的解才能被接受
  • 遗传算法
    • 先随机生成一组解,称之为种群,计算每个个体的成本函数,得到一个有序列表
    • 精英选拔法
      • 将成本最低的一部分加入新的种群中,剩余的由修改后的全新解代替
    • 两种修改解的方法
      • 变异
        • 将现有解做微小随机的改动
      • 交叉
        • 选取最优解中的两个按照某种方式进行结合
      • 通常变异的概率很小而交叉的概率很大
    • 结束指令
      • 在经过一段时间的迭代后,族群任然保持稳定,此时可以停止了

文档过滤

  • 朴素的贝叶斯分类器
    • 假设每个单词出现的概率是互相独立的
    • 但实际上是不成立的,但是我们可以将计算结果进行比较,观察那个分类的概率更大
    • 为了避免重要邮件的误删,我们可以为每个分类定义一个最小阈值,如果计算出来的结果都小于这个阈值,我们就划分到未知分类中
    • 这种算法的优势主要在于训练所需的时间和内存较少
  • 费舍尔分类器
    • 不懂 (–_–!)

决策树建模

  • 决策树实际上就是根据数据的feature的一系列的if…then…结构,最终得到输出
    • 输出可以是分类或者数值
  • 决策树的难点在于判断条件(feature)选择的先后
    • 举例,为什么以A条件作为根(即第一个判断条件),为什么条件B在条件C前判断
    • 挑选的方法有基尼不纯度,熵增益等
      • 实质是选取尽可能将同种结果放在一个分类的条件
  • 为了避免过拟合以及减少收集信息的难度,我们往往采取剪枝的方法忽略那些对结果影响不大的feature
  • 决策树的优点在于可以直观的理解判断的理由和过程,不像深度学习是个黑箱
  • 缺点则在于对于输出结果过多的情况构建太复杂,还有就是容易被攻击
    • 这里的攻击是指人为的改变一些特征,使得分类器判断错误。常见于垃圾邮件躲避检测中。因为决策树最终在底层判断是基于单个条件的,攻击者往往只需要改变很少的特征就可以逃过监测。

构建价格模型

  • KNN(K最邻近算法)
    • K过小则容易受到噪声和错误数据的影响,过大则容易将不相关数据也包括进去
    • 可以在无需重新计算的情况下加入新的数据,适合数据量很大的情况

核方法和SVM(支持向量机)

  • 普通的SVM分类超平面只能应对线性可分的情况,而对于线性不可分的情况我们则需要引入一个Kernel,这个Kernel可以把数据集从低维映射到高维,使得原来线性不可分的数据集变得线性可分
    • 其实就是深度学习里的激活函数
  • 我们想要用一个超平面(二维为一条线)将数据分类,但是满足条件的超平面有很多,SVM就是找出其中最好的一个
    • 方法是尽可能的使最靠近分离超平面的数据与超平面的距离变大
    • 我们不需要考虑所有数据,只需要考虑靠近平面的那些数据,这些数据又称为支持向量

寻找独立特征

  • 从嘈杂的背景声中提取人声,图像压缩等实质是特征提取
  • 常用方法是NMF,即非负矩阵分解
    • 顾名思义,就是将数据已矩阵的显示呈现,然后分解为特征矩阵和权重矩阵

你可能感兴趣的:(机器学习)