将字符映射为数字(Python)

首先从数组中获取集合,注意集合是无序的,映射出来的类别标号可能并不是0,1,2,3,4,这样但是并不影响acc率,其次将集合转化为字典即映射列表,最后再对数据进行映射,代码如下:

def map(data):
    # 获取数组中的所有值的集合
    values = set(data)
    
    # 将集合中的每个元素映射为数字
    mapping_dict = {element: index for index, element in enumerate(values)}
    #真实数据映射
    data = [mapping_dict[element] for element in data]
    return data

再给一个利用匈牙利进行对真实标签和预测标签进行映射求准确率的程序:

def cluster_acc(y_true, y_pred):
     y_true = y_true.astype(np.int64)
     assert y_pred.size == y_true.size
     D = max(y_pred.max(), y_true.max()) + 1
     w = np.zeros((D, D), dtype=np.int64)
     for i in range(y_pred.size):
         w[y_pred[i], y_true[i]] += 1
     from scipy.optimize import linear_sum_assignment
    # 匈牙利算法调整标签
     ind = linear_assignment(w.max() - w)
     return sum([w[i, j] for i, j in ind]) * 1.0 / y_pred.size
  • linear_assignment:这个函数实际上是linear_sum_assignment的一个别名,在较新版本的SciPy中可能被弃用或不再直接提供。其功能与linear_sum_assignment完全相同,都是用来处理指派问题,搞了半天才发现库更新了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值