使用Python进行层次聚类(二)——scipy中层次聚类的自定义距离度量问题

今天,总结一下如何使用层次聚类算法里面的自定义距离度量

层次聚类上次已经总结过。
这次仅仅说明层次聚类的距离参数,这里的距离参数可以使用自定义函数。
我们进入该函数的文档页面我们看到linkage的说明文档上面的函数scipy.cluster.hierarchy.linkage(y, method='single', metric='euclidean',optimal_ordering=False),传入第一个参数是需要进行层次聚类的数据,这里即可用使用开始读取的数据变量df,第二个参数代表层次聚类选用的方法,第三个参数代表距离计算的方法。
上次详细介绍了前两个参数,这次我们主要关注第三个参数,我们注意一下第三个参数的解释如下:

metric : str or function, optional
    The distance metric to use in the case that y is a collection of observation vectors; ignored otherwise. 
    See the pdist function for a list of valid distance metrics. A custom distance function can also be used.

指标:str或function,可选。

    在y为观测向量集合的情况下使用的距离度规;否则忽略。

    查看有效距离度量列表的pdist函数。还可以使用自定义距离函数。

直接传递字符串就不说了,因为无非就是那几种范数度量等方法,关键是这个函数可以自己定义距离。这就为我们进行层次聚类提供了很好的一个接口,因为在特定任务下,scipy函数里面给出的距离不一定能够满足我们自己的实际需求。为了能够自定义距离度量,我进行了一些测试,最后得出自定义距离度量函数需要注意以下几个方面:

  • 函数传入两个参数:比如,自定义函数为:def selfDisFuc(a,b):
  • 传入参数类型是
  • 传入参数的维度必须一样
  • 返回值必须是一个代表距离的数

我这处理自定义函数时,因为处理的数据维度不一样,最后只好找到最大维度的数据,然后将不一样的所有
数据后面补上-1(我的数据中不会出现的一个数),然后再处理。
安照上面的三个规则,就能写出自己需要的距离衡量函数了。

下一篇:使用Python进行层次聚类(三)——层次聚类簇间自然分割方法和评价方法

你可能感兴趣的:(qt,数据挖掘,数据处理)