python中k-means聚类算法中分类数据的处理方式

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

vendor, number_of_products, price, shipping_country

我正在尝试使用 sci-kit 中的 python 和 k-means 进行聚类。我的主要问题是处理分类数据的方式(更具体地说是shipping_country包含国家字符串的字段)。我的目的是为该shipping_country领域分配权重。我最初的想法是用 1-20 的数字代替每个国家(例如,1 表示“比 20 强” - 全球 --> 1 ,巴拿马 --> 20)。这种方法的问题在于它没有科学依据(或者至少我无法证明)。有人有什么建议吗?由于时间压力,我真的很感激一个编码示例(如果可能的话)!我正在使用蟒蛇。先感谢您!


心有法竹
浏览 290回答 1
1回答

小怪兽爱吃肉

正如我在评论中提到的,我认为您不一定要对该列进行加权。您想要(我认为)是类别为数字的一种方式。这可以通过 one-hot 编码在 sci-kit learn 中完成。在 Pandas 中,这是通过 pd.get_dummies() 完成的。我会告诉你这是如何工作的:df = pd.DataFrame({'nums' : [1, 4, 6, 7],                   'colors': ['red', 'blue', 'green', 'yellow']})dfOut[21]:    nums  colors     1     red     4    blue     6   green     7  yellowpd.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,我们可以推断出一种颜色是蓝色。换句话说,我们不需要 colors_blue 列来表示蓝色,我们可以从其他列中包含的信息中推断出它。由于这些原因,您可能希望添加参数drop_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在不知道您的具体用例的情况下,我无法告诉您使用哪个。但是,我认为在大多数情况下,您可能确实想删除分类列之一
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python