首页 > 解决方案 > 使用 scikit learn 时序列化 kmeans.labels_ 数组的数组

问题描述

每次我执行 k-mean 程序。我有一个数组,如 [5 0 0 0 4 4 2 2 1 1 1 3 3 0 0 0 0 4 2 1 3 0 0 0 0 0 5 0 0 4 2 1 3 0 0 0 5 0 0 4 2 1 3 0 0 0 0 0 4 2 1 3 0 0 0 2 3]。

下次我执行它时,我得到 [1 2 2 2 4 4 5 5 0 0 0 3 3 2 2 2 2 4 5 0 3 2 2 2 2 2 2 2 4 5 0 3 2 2 2 1 2 2 4 5 0 3 2 2 2 2 2 4 5 0 3 2 2 2 5 3]。

我希望第一个类别标签是 0,第二个是 1。比如 [0 1 1 1 2 2 3 3 4 4 4 5 5 1 1 1 1 2 3 4 5 1 1 1 1 1 0 1 1 2 3 4 5 1 1 1 0 1 1 2 3 4 5 1 1 1 1 1 2 3 4 5 1 1 1 3 5]

有谁知道这样做的算法。

标签: arraysscikit-learn

解决方案


不知道为什么要这样做,因为所有组都是可以互换的,但如果你真的需要它,这里有一种方法:

import numpy as np
import pandas as pd

groups = np.array([1, 2, 2, 2, 4, 4, 5, 5, 0, 0, 0, 3, 3, 2, 2, 2, 2, 4, 5, 0, 3, 2, 2, 2, 2, 2, 2, 2, 4, 5, 0, 3, 2, 2, 2, 1, 2, 2, 4, 5, 0, 3, 2, 2, 2, 2, 2, 4, 5, 0, 3, 2, 2, 2, 5, 3])

首先,获取组中值的出现顺序:1首先出现,然后是 2,然后是 4,以此类推

groups_in_order = pd.unique(groups)
# array([1, 2, 4, 5, 0, 3]) 

订购新数组:0 出现在索引 4 中,1 出现在索引 0 中等

right_order = np.argsort(groups_in_order)
# array([4, 0, 1, 5, 2, 3])

最后group使用right_order和列表理解重新排序

[ right_order[i] for i in groups]

#[0, 1, 1, 1, 2, 2, 3, 3, 4, 4, 4, 5,
# 5, 1, 1, 1, 1, 2, 3, 4, 5, 1, 1, 1,
# 1, 1, 1, 1, 2, 3, 4, 5, 1, 1, 1, 0,
# 1, 1, 2, 3, 4, 5, 1, 1, 1, 1, 1, 2,
# 3, 4, 5, 1, 1, 1, 3, 5]

推荐阅读