对基于文本的信息进行分类(即实现字符串内核)

时间:2012-07-16 14:04:42

标签: python machine-learning cluster-analysis svm

我需要对一组消费者数据运行聚类算法,但我不知道如何处理基于文本的字段(完美的例子是字母数字邮政编码,例如SE1 8XR)。

显然我需要使用的是一个字符串内核,我理解它的基本思想,但不能很好地成功实现。

理想情况下,我希望新的数字向量能够编码这样的想法,即两个邮政编码越不相同,数据点就越远,但不知道如何做到这一点,我无法找到一本有用的教程,指南或教科书!

我也是在Python中这样做,以防有人知道某个库可能有用。

1 个答案:

答案 0 :(得分:2)

重新编码

您无法将邮政编码比作字符串。 “AL1 1AA”是圣奥尔本斯,“AB1 1AA”是阿伯丁。它们在编辑距离上非常接近,但CR6 7DX更接近圣奥尔本斯:)

您最好的方法可能是从http://www.ordnancesurvey.co.uk/oswebsite/products/os-opendata.html获取一些查询表(我知道您可以从Royalmail购买),这可能来自邮政编码,或者至少是一个扇区'AL1 1'(甚至可能是区'AL1)例如,然后将其映射到lat / lon,然后将其用于存储数据。

其他字符串

一种可能的选择是使用difflib.SequenceMatcher返回两个字符串彼此相似程度的百分比(还有很多其他算法:谷歌“遗传字符串算法”,“模糊字符串匹配“,”字符串相似度算法“等...)。将所有(可能)80%相似的字符串分组,并为这些字符串分配 - 然后在该组上分配集群。

你也可以找到metaphone&双变量电话(可能ntlk)有用,具体取决于您的要求和数据的复杂程度。