• An Algorithm Summary of Programming Collective Intelligence (3)


    k-Nearest Neighbors kNN(不要问我叫什么)
    PCI里面用kNN做了一个价格预测模型,还有一个简单的电影喜好预测。简单来说就是要对一个东西做数值预测,就要先有一堆已经有数值的东西,从里面找出和要预测的东西相似的,再通过计算这些相似东西的均值来作出预测。

    kNN里面首先遇到的问题是如何定义“相似”。

    把物品的各种属性量化,这样就构成了一个若干维度的向量空间。于是我们说相似就是离得近。这个量化的时候学问很大,毕竟各种不同的属性用不同的量化方法算出来的数值千差百异。所以还要根据各自的重要性进行伸缩调整,不重要的干脆就乘以一个零直接去掉省心。这是一个非常费心的活儿。不同的问题伸缩系数肯定各异,如何来确定这些系数就要加上主观判断、反复调整、结果比较、cross validation。这个时候优化算法是个不错的选择。这个我们后面还会提到。

    怎么计算离得近呢?方法很多,PCI给了几个:欧式距离,Pearson相关度和Tanimoto分数。具体如何计算就不重复了,让我重复也重复不出来。

    当然只选择一个最相似的来进行预测是不够准确的,所以有了k——选k个最相似的来平均——这就是kNN的来历。

    如何计算平均也是一个很有意思的事情。直接把k个数值加起来一除可以,就是有点简单粗暴,不像读书人做的事情,虽然暴力美有时候也是很诱人的。更合理一点的方法是给不同的数值分配权值,离得近的权重大一点,远的就小一点。突然想起来原来的万有引力公式,牛老大也喜欢近的,不知道能不能改叭改叭拿过来用。

    优点
    即使在复杂数值预测问题中依然理解,对系数调整的经验在处理类似问题时依然很有帮助。
    伸缩系数的调整不仅可以改善预测的结果,也说明了对应属性的重要性。
    随时可以增大数据集

    缺点
    计算量大
    调整系数很烦人

    Clustering 聚类

    层次聚类和K-means聚类都不做预测,所以也就不需要训练。PCI里面举了一个给blog分类的例子。

    层次聚类很简单,第一步的工作也是先量化,构建向量空间,然后不断寻找最接近的两个向量并合并他们作为一个新的聚类向量,直到最后只剩下一个聚类为止。

    K-means聚类(又是k?!)有所不同。它先任意在向量空间中挑出k个点,然后把所有向量按照和这k个点的远近划分成组,每个向量加入距离最近的点所代表的组。然后计算每组的重心,把代表小组的点的位置调整到这个重心上,再重复上面的计算,知道所有的向量分组不再变化为止。

    K-means需要你来确定这个K和点的初始位置,这里面没有什么好办法。

  • 相关阅读:
    python3 get/post/使用代理/自定义header/自定义Cookie
    网页定位点击事件js响应函数教程(Chrome)
    burpsuite只拦截特定网站数据包教程
    AWVS和AppScan使用代理进行扫描教程
    kdbg安装使用教程(kali)
    kali-rolling安装nessus 7并创建扫描任务教程
    WebGoat 8安装、配置、使用教程(CentOS)
    应用层协议与传输层、网络层、数据链路层在编码上的区别
    Oracle Linux下载教程(以Oracle Linux 6.9为例)
    su和su -的区别
  • 原文地址:https://www.cnblogs.com/ysjxw/p/1148892.html
Copyright © 2020-2023  润新知