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

sklearn 分类数据聚类

sklearn 分类数据聚类

子衿沉夜 2021-08-17 10:52:58
我正在使用 sklearn 和凝聚聚类功能。我有一个混合数据,其中包括数字和名义数据列。我的名义列具有诸如“早上”、“下午”、“晚上”、“晚上”之类的值。如果我通过分配整数值(如 0、1、2、3)将我的名义数据转换为数字;欧几里得距离将计算为“夜晚”和“早晨”之间的 3,但是,1 应该作为距离的返回值。X = pd.read_csv("mydata.csv", sep=",", header=0, encoding="utf-8")X = StandardScaler().fit_transform(X)print("n_samples: %d, n_features: %d" % X.shape)km = AgglomerativeClustering(n_clusters=5, affinity='euclidean', linkage='average')km.fit(X)print("k = %d,  Silhouette Coefficient: %0.3f" % (x,   metrics.silhouette_score(X, km.labels_, sample_size=None)))这是我的代码。如何在 sklearn 中自定义距离函数或将我的名义数据转换为数字?
查看完整描述

2 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

我认为您有 3 个选项如何将分类特征转换为数值:

  1. 使用OneHotEncoder。您将分类特征转换为四个新列,其中只有一个 1 和另一个 0。这里的问题是“早上”和“下午”之间的区别与“早上”和“晚上”相同。

  2. 使用OrdinalEncoder。您将分类特征转换为一列。“早上”到1,“下午”到2等等。“早上”和“下午”之间的差异会比“早上”和“晚上”要小,这很好,但“早上”和“晚上”之间的差异会是最好的,这可能不是你想要的。

  3. 使用我称之为 two_hot_encoder 的转换。它与 OneHotEncoder 类似,行中只有两个 1。“早上”和“下午”之间的差异将与“早上”和“晚上”之间的差异相同,并且会小于“早上”和“晚上”之间的差异。我认为这是最好的解决方案。检查代码。

代码:


def two_hot(x):

    return np.concatenate([

        (x == "morning") | (x == "afternoon"),

        (x == "afternoon") | (x == "evening"),

        (x == "evening") | (x == "night"),

        (x == "night") | (x == "morning"),

    ], axis=1).astype(int)


x = np.array([["morning", "afternoon", "evening", "night"]]).T

print(x)

x = two_hot(x)

print(x)

输出:


[['morning']

 ['afternoon']

 ['evening']

 ['night']]

[[1 0 0 1]

 [1 1 0 0]

 [0 1 1 0]

 [0 0 1 1]]

然后我们可以测量距离:


from sklearn.metrics.pairwise import euclidean_distances

euclidean_distances(x)

输出:


array([[0.        , 1.41421356, 2.        , 1.41421356],

       [1.41421356, 0.        , 1.41421356, 2.        ],

       [2.        , 1.41421356, 0.        , 1.41421356],

       [1.41421356, 2.        , 1.41421356, 0.        ]])


查看完整回答
反对 回复 2021-08-17
?
噜噜哒

TA贡献1784条经验 获得超7个赞

这个问题在机器学习应用程序中很常见。您需要将一个类别定义为基本类别(哪个无关紧要),然后为其他每个类别定义指标变量(0 或 1)。换句话说,创建 3 个新变量,分别称为“早晨”、“下午”和“晚上”,并为每个观测值的类别分配一个。如果是夜间观察,请将这些新变量中的每一个都保留为 0。


查看完整回答
反对 回复 2021-08-17
  • 2 回答
  • 0 关注
  • 242 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

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

帮助反馈 APP下载

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

公众号

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