我需要对一组消费者数据运行聚类算法,但我不确定如何处理基于文本的字段(完美的例子是字母数字邮政编码,例如 SE1 8XR)。
显然我需要使用的是一个字符串内核,我理解它的基本思想,但还不足以成功实现。
理想情况下,我希望新的数字向量能够编码这样一个想法,即两个邮政编码越不同,数据点彼此之间的距离就越远,但不知道如何做到这一点,而且我找不到一个有用的教程、指南或教科书!
我也在 Python 中执行此操作,以防有人知道某些库可能有用。
我需要对一组消费者数据运行聚类算法,但我不确定如何处理基于文本的字段(完美的例子是字母数字邮政编码,例如 SE1 8XR)。
显然我需要使用的是一个字符串内核,我理解它的基本思想,但还不足以成功实现。
理想情况下,我希望新的数字向量能够编码这样一个想法,即两个邮政编码越不同,数据点彼此之间的距离就越远,但不知道如何做到这一点,而且我找不到一个有用的教程、指南或教科书!
我也在 Python 中执行此操作,以防有人知道某些库可能有用。
重新邮政编码
您不能将邮政编码作为字符串进行比较。“AL1 1AA”是圣奥尔本斯,“AB1 1AA”是阿伯丁。它们的编辑距离非常接近,但 CR6 7DX 更接近圣奥尔本斯 :)
你最好的方法可能是从http://www.ordnancesurvey.co.uk/oswebsite/products/os-opendata.html获取一些查找表(我知道你可以从 Royalmail 购买它们),它需要一个邮政编码,或者在例如,至少一个扇区“AL1 1”(甚至可能是“AL1”区),并将其映射到纬度/经度,然后您可以将其用于存储数据。
其他字符串
一种可能的选择是使用difflib.SequenceMatcher
它返回两个字符串彼此相似程度的百分比分数(那里有很多其他算法:谷歌“遗传字符串算法”、“模糊字符串匹配”、“字符串相似度算法”等...)。将所有(可能)80% 相似的字符串分组,并将它们分配给一个组 - 然后在该组上进行聚类。
ntlk
根据您的要求和数据的复杂性,您还可能会发现变音位和双变位音(并且可能)很有用。