arrays - 使用 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]
有谁知道这样做的算法。
解决方案
不知道为什么要这样做,因为所有组都是可以互换的,但如果你真的需要它,这里有一种方法:
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]
推荐阅读
- c# - dotnetcore 3 web api外部登录与谷歌GetExternalLoginInfoAsync大多数时候返回null
- z3 - Gurobi 可以用来解决 SMT-LIB 文件吗?
- linq - LinQ - 尝试按子属性排序时出错
- java - INSERT 不包含 spring-data-r2dbc 的值
- c# - 没有实体框架的基于角色的授权?
- c - 链接器找不到信号量函数
- pandas - 如何获取数据框列中的数字?
- c++ - boost::asio 和同步读取导致编译错误
- html5-canvas - 在选择了深色模式的设备上渲染地图
- image - Blogger 模板添加图片的问题