Python sklearn OneHotEncoder:如何跳过列表中不存在的值
Python sklearn OneHotEncoder: how to skip values that do not exist in the list
我想一次性编码这个列表:
[0 0 1 1 1 2 2 2 4]
当我这样做时,单热编码器将我的 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)?
您可以生成感兴趣的 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
我想一次性编码这个列表:
[0 0 1 1 1 2 2 2 4]
当我这样做时,单热编码器将我的 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)?
您可以生成感兴趣的 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