Python sklearn OneHotEncoder:如何跳过列表中不存在的值

Posted

技术标签:

【中文标题】Python sklearn OneHotEncoder:如何跳过列表中不存在的值【英文标题】:Python sklearn OneHotEncoder: how to skip values that do not exist in the list 【发布时间】:2020-05-26 00:08:51 【问题描述】:

我想对这个列表进行一次热编码:

[0 0 1 1 1 2 2 2 4]

当我这样做时,one-hot 编码器将我的 4 转换为 3。也就是说,我得到了这个:

(0, 0) 1.0
(1, 0) 1.0
(2, 0) 1.0
(3, 1) 1.0
(4, 1) 1.0
(5, 1) 1.0
(6, 2) 1.0
(7, 2) 1.0
(8, 2) 1.0
(9, 3) 1.0

我想要这个(注意最后一行已更改):

(0, 0) 1.0
(1, 0) 1.0
(2, 0) 1.0
(3, 1) 1.0
(4, 1) 1.0
(5, 1) 1.0
(6, 2) 1.0
(7, 2) 1.0
(8, 2) 1.0
(9, 4) 1.0

完成 MWE:

import numpy as np
from sklearn.preprocessing import OneHotEncoder
idvals = [0, 0, 0, 1, 1, 1, 2, 2, 2, 4]
hot = OneHotEncoder()
h1 = hot.fit_transform(np.asarray(idvals).reshape(10, 1))
print(np.asarray(h1))

使用 Python 2.7.14 |Anaconda 自定义(64 位)| (默认,2017 年 12 月 7 日,17:05:42)

我怎样才能让最后一行是 (9, 4) 而不是 (9, 3)?

【问题讨论】:

【参考方案1】:

您可以生成感兴趣的 ndarray,将 vals 与一个直到 max 值的范围进行比较,并使用 broadcasting 从结果中获取矩阵:

vals = np.asarray(idvals)
u = np.unique(vals)
vals_b = vals[:,None]
a = (np.arange(max(u)+1) == vals_b).view('i1')

print(a)

array([[1, 0, 0, 0, 0],
       [1, 0, 0, 0, 0],
       [1, 0, 0, 0, 0],
       [0, 1, 0, 0, 0],
       [0, 1, 0, 0, 0],
       [0, 1, 0, 0, 0],
       [0, 0, 1, 0, 0],
       [0, 0, 1, 0, 0],
       [0, 0, 1, 0, 0],
       [0, 0, 0, 0, 1]], dtype=int8)

如果我们从数组中构建一个稀疏矩阵,我们确实会得到指定的结果:

from scipy import sparse

print(sparse.csr_matrix(a))

(0, 0)  1
(1, 0)  1
(2, 0)  1
(3, 1)  1
(4, 1)  1
(5, 1)  1
(6, 2)  1
(7, 2)  1
(8, 2)  1
(9, 4)  1

【讨论】:

感谢您的回复,但我想这样做的原因是因为值 3 稍后可以存在于不同的列表中,我也希望对其进行一次热编码,这样两种编码一旦转换为 numpy 数组,将具有相同的形状。因此,两种编码在转换时都应该具有形状 (10, 5)。 这似乎不是一个正确的方法。如果您正在使用列表,我会查看 pandas 和 get_dummies @stats 谢谢@yatu,我查看了这里的页面:pandas.pydata.org/pandas-docs/stable/reference/api/…,它似乎仍然只编码“它所看到的”,而不是“它可以看到的,它可以从现有数据中合理推断” "。 实际上做了一些不必要的事情,现在检查@StatsSorceress 抱歉,因为我不知道 i1 是什么,所以还是不行?

以上是关于Python sklearn OneHotEncoder:如何跳过列表中不存在的值的主要内容,如果未能解决你的问题,请参考以下文章

Python——sklearn提供的自带的数据集

sklearn工具-python数据集操作API

python---sklearn---kmeans

Python数模笔记-Sklearn 介绍

python sklearn 机器学习sklearn.model_selection 介绍

python库之——sklearn