先来看fit和transform:
enc = OneHotEncoder(sparse=False)
enc.fit([[0, 0, 3],
[1, 1, 0]])
ans = enc.transform([[0,0,3]])
print(ans)
[[1. 0. 1. 0. 0. 1.]]
我的理解是fit这里就让算法针对数据集中的元素进行一个特征的抽取,类似于给一个小孩起小名前观察他的身高体重等特征
transform就针对你给定的某个元素给出算法对其的编码,类似于给一个小孩起了一个“胖墩”的小名并告诉你
enc = OneHotEncoder(sparse=False)
ans = enc.fit_transform([[0, 0, 3],
[1, 1, 0]])
print(ans)
[[1. 0. 1. 0. 0. 1.]
[0. 1. 0. 1. 1. 0.]]
这里的fit_transform是上面两个过程的一个集合,类似于老师基于班里所有的同学的身高体重等特征,然后给所有人都起了一个小名,最后顺序输出每个人的小名
还有一个点在于这个算法怎么确定用多少个数字来进行“取名”,来看下面的例子:
enc = OneHotEncoder(sparse=False)
ans = enc.fit_transform([[0, 0, 3],
[1, 1, 0],
[0, 2, 1],
[1, 0, 2]])
print(ans)
[[1. 0. 1. 0. 0. 0. 0. 0. 1.]
[0. 1. 0. 1. 0. 1. 0. 0. 0.]
[1. 0. 0. 0. 1. 0. 1. 0. 0.]
[0. 1. 1. 0. 0. 0. 0. 1. 0.]]
我们待起名的目标一共有四个,即[0, 0, 3],[1, 1, 0],[0, 2, 1],[1, 0, 2]。对于处于不同目标的同一位置处的特征的种类数即为我们对该特征进行编码的位数,类似于体重有:瘦,正常,胖。
具体来说:
对于各个目标的第一个数即为0,1,0,1,一共有0和1两个类别,即需要2个位来进行编码,10代表0,01代表1
对于各个目标的第二个数即为0,1,2,0,一共有0和1和2三个类别,即需要3个位来进行编码,100代表0,010代表1,001代表2
对于各个目标的第三个数即为3,0,1,2,一共有0和1和2和3四个类别,即需要4个位来进行编码,1000代表0,0100代表1,0010代表2,0001代表3
因此对于这四个目标来说,一共需要2+3+4=9位数字来进行编码(取名)