gpt4 book ai didi

python - 使用python讲解onehotencoder

转载 作者:太空狗 更新时间:2023-10-29 19:32:36 24 4
gpt4 key购买 nike

我是 scikit-learn 库的新手,一直在尝试使用它来预测股票价格。我正在浏览它的文档并卡在他们解释 OneHotEncoder() 的部分。这是他们使用的代码:

>>> from sklearn.preprocessing import OneHotEncoder
>>> enc = OneHotEncoder()
>>> enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]])
OneHotEncoder(categorical_features='all', dtype=<... 'numpy.float64'>,
handle_unknown='error', n_values='auto', sparse=True)
>>> enc.n_values_
array([2, 3, 4])
>>> enc.feature_indices_
array([0, 2, 5, 9])
>>> enc.transform([[0, 1, 1]]).toarray()
array([[ 1., 0., 0., 1., 0., 0., 1., 0., 0.]])

有人可以逐步向我解释这里发生了什么吗?我很清楚 One hot encoder 是如何工作的,但我无法弄清楚这段代码是如何工作的。任何帮助表示赞赏。谢谢!

最佳答案

让我们首先写下您的期望(假设您知道 One Hot Encoding 的含义)

未编码

f0 f1 f2
0, 0, 3
1, 1, 0
0, 2, 1
1, 0, 2

编码

|f0|  |  f1 |  |   f2   |

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

编码:

enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]]),

如果您使用默认的 n_values='auto'。在使用 default='auto' 时,您指定您的特征(未编码 的列)可能采用的值可以从传递给 fit 的数据列中的值推断出来

这将我们带到 enc.n_values_

来自文档:

Number of values per feature.

enc.n_values_
array([2, 3, 4])

上面的意思是f0(第1列)可以取2个值(0, 1),f1可以取3个值(0, 1, 2),f2可以取4个值(0, 1, 2 , 3).

实际上,这些是未编码特征矩阵中特征 f1、f2、f3 的值。

然后,

enc.feature_indices_
array([0, 2, 5, 9])

来自文档:

Indices to feature ranges. Feature i in the original data is mapped to features from feature_indices_[i] to feature_indices_[i+1] (and then potentially masked by active_features_ afterwards)

给定的是特征 f1、f2、f3 可以占据的位置范围(在编码空间中)。

f1: [0, 1], f2: [2, 3, 4], f3: [5, 6, 7, 8]

将向量 [0, 1, 1] 映射到一个热编码空间(在我们从 enc.fit 得到的映射下):

1, 0, 0, 1, 0, 0, 1, 0, 0

怎么做?

f0 中的第一个特征,以便映射到位置 0(如果元素是 1 而不是 0,我们会将其映射到位置 1)。

下一个元素 1 映射到位置 3,因为 f1 从位置 2 开始,元素 1 是 f1 可以取的第二个可能值。

最后,第三个元素 1 位于位置 6,因为它是第二个可能的值 f2,并且 f2 开始从位置 5 开始映射。

希望这能解决一些问题。

关于python - 使用python讲解onehotencoder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42728772/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com