python中k-means聚类算法中分类数据的逼近方法

python中k-means聚类算法中分类数据的逼近方法,python,k-means,categorical-data,Python,K Means,Categorical Data,我面临以下问题。我有一个包含以下字段的csv文件 vendor, number_of_products, price, shipping_country 我正试图使用sci工具包中的python和k-means对其进行集群。我遇到的主要问题是如何处理分类数据(更具体的是包含国家字符串的shipping\u country字段)。 我的目的是将权重分配给shipping\u country字段。我最初的想法是用1-20之间的数字替换每个国家(例如,1比20“强”——全球-->1,巴拿马-->20

我面临以下问题。我有一个包含以下字段的csv文件

vendor, number_of_products, price, shipping_country
我正试图使用sci工具包中的python和k-means对其进行集群。我遇到的主要问题是如何处理分类数据(更具体的是包含国家字符串的
shipping\u country
字段)。
我的目的是将权重分配给
shipping\u country
字段。我最初的想法是用1-20之间的数字替换每个国家(例如,1比20“强”——全球-->1,巴拿马-->20)。这种方法的问题在于它在科学上是无效的(或者至少我还没能证明这一点)。有人有什么建议吗?由于时间紧迫,如果可能的话,我将非常感谢您提供一个编码示例!我正在使用python。提前谢谢你

正如我在评论中提到的,我认为你不一定要给那个专栏增加权重。你想要的(我认为)是一种将类别数字化的方法。这可以通过一个热编码在sci工具包学习中完成。在熊猫中,这是通过pd.get_dummies()完成的

我将向您展示这是如何工作的:

df = pd.DataFrame({'nums' : [1, 4, 6, 7],
                   'colors': ['red', 'blue', 'green', 'yellow']})

df
Out[21]: 
   nums  colors
     1     red
     4    blue
     6   green
     7  yellow

pd.get_dummies(df)
Out[22]: 
   nums  colors_blue  colors_green  colors_red  colors_yellow
     1            0             0           1              0
     4            1             0           0              0
     6            0             1           0              0
     7            0             0           0              1
现在,对于“颜色”中的每个类别,我们都有一个带有二进制指示符的新列。然而,这里的信息太多了。在处理预测/回归时,您必须担心多重共线性,这是由预测集合中的冗余信息引起的

在这种情况下,如果所有其他指示符都为0,我们可以推断颜色为蓝色。换句话说,我们不需要蓝色列来表示蓝色,我们可以从其他列中包含的信息推断蓝色

出于这些原因,您可能希望添加参数
drop\u first=True
,如下所示

pd.get_dummies(df, drop_first=True)
Out[23]: 
   nums  colors_green  colors_red  colors_yellow
     1             0           1              0
     4             0           0              0
     6             1           0              0
     7             0           0              1

如果不知道您的具体用例,我无法告诉您使用哪个。但是,我认为,在大多数情况下,您可能确实希望删除其中一个分类列

您使用什么库进行k-means聚类,以及为什么您认为需要对国家进行加权?欢迎来到StackOverflow。请按照您创建此帐户时的建议,阅读并遵循帮助文档中的发布指南,在这里申请。StackOverflow不是设计、编码、研究或教程资源。然而,如果你遵循你在网上找到的任何资源,进行诚实的编码尝试,并遇到问题,你就会有一个很好的例子来发布。首先,不能将kmeans与字符串一起使用。然后我认为
shipping\u country
应该在决定供应商的实力方面发挥作用:在全球范围内发货的人比只向一个国家发货的人更强大。然而,在这一点上,更重要的是找到一种方法,将
装运国
包括在聚类过程中,因此我愿意接受建议。听起来你想要的是一个热编码而不是加权。如果你按照@Prune提供的链接中的描述编辑问题,我可以帮助你解决这个问题。你是对的。完全忽略了指导原则-希望这更好。这正是我想要的。关于
drop_first
,我认为使用它对我有好处,因为我有一个几乎15个国家的列表——一列更少。