为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

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

1 回答

?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

正如我在评论中提到的,我认为您不一定要对该列进行加权。您想要(我认为)是类别为数字的一种方式。这可以通过 one-hot 编码在 sci-kit learn 中完成。在 Pandas 中,这是通过 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,我们可以推断出一种颜色是蓝色。换句话说,我们不需要 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

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


查看完整回答
反对 回复 2021-09-14
  • 1 回答
  • 0 关注
  • 289 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号