因为这两个算法比较简单,又有些相似,所以这里放在一起。

K-最近邻:

k-最近邻也是一种用来进行预测的算法。

工作原理:

接受一个用以进行数值预测的新数据项,然后将它与一组已经赋过值的数据项进行比较。算法会从中找出与待预测数据最为接近的k项,并这k项其求均值以得到最终的结果。

总计来说这是一个很简单的算法,只要我们做好距离的定义并选择一个适合的k值,我们就可以很容易的实现它。

由于我们计算2组数据的距离的通常方法是将他们中对应的每一项目的差值的绝对值(或平方)相加,所以就会出现不同数据范围不同导致的误差。比如每组数据有2个分量,一个取值为0—10,另一个是0—-999999,那么第二的值就会几乎完全决定我们最后的结果。所以我们要对每一组数据进行缩放。

对数据的缩放取决于具体的应用,我们可以通过交叉验证尝试多组缩放因子然后比较它们的优劣。交叉验证的做法是先数据的一部分去除,然后用剩余数据去推测这组数据,我们就可以根据预测的结果对缩放因子进行评估。

优点:

能利用复杂函数进行数值预测,又简单易懂,并且我们可以很容易的在算法中实现查看用哪些近邻进行预测。

缺点:

每次进行预测,它都会使用所有样本,这会导致效率的低下。

寻找缩放因子是一项很乏味的工作.

聚类:

聚类算法可以用于任何具有一个或多个数值属性的数据集合,通过这些数值属性,我们将其所有数据映射到一个n维空间中,并定义该空间中的距离,然后我们可以通过各个数据间的距离对其实现聚类。

分级聚类:

分级聚类的算法是不断找出所有数据中距离最小的两个数据A、B,然后将它们合并成一个新的节点,该节点在n维空间中的坐标是原来两数据点的均值,通过不断进行这一操作,我们最终可以得到一个树形的层级结构。

K-均值聚类:

不同于分级聚类,K-均值聚类的目的是将数据拆成K个不同的群组,其具体算法如下:

  1. 在n维空间中随机生成K个中心点
  2. 将每个数据项分配给与其距离最近的中心点。
  3. 将中心点位置移动到所有分配给它的数据项的中心。如果中心点位置没有改变,则结束算法,否则回到第二步。

具体选择哪种聚类算法取决于要处理的问题,当要将数据拆分到不同的群组时,k均值聚类往往是很有价值的,而如果我们更想了解哪些群组间更为接近,分级聚类更好。当然,我们也可以同时使用2种算法得到更加详细的信息。