使用 python 解释 onehotencoder
Explain onehotencoder using python
我是 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 是如何工作的,但我无法弄清楚这段代码是如何工作的。任何帮助表示赞赏。谢谢!
让我们一次一个地了解这些功能:
>>> enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]])
我们正在将编码器拟合到一组四个向量中,每个向量具有 3 个特征。
>>> enc.n_values_
array([2, 3, 4])
- 第一个特征有 2 个可能的值:0、1
- 第二个特征有 3 个可能的值:0、1、2
- 第三个特征有 4 个可能的值:0、1、2、3
清除了吗?
>>> enc.feature_indices_
array([0, 2, 5, 9])
表示将连接三个特征的向量。由于具有三个特征,表示将始终具有三个 "True" 条目 (1),其余 "False" (0).
因为有 2+3+4 个可能的值,表示长度为 9 个条目。
- 功能 1 从索引 0 开始
- 功能 2 从索引 2 开始(F1 开始 + len(F1))
- 功能 3 从索引 5 开始 (F2 start + len(F2))
在索引 9 处结束路障
>>> enc.transform([[0, 1, 1]]).toarray()
array([[ 1., 0., 0., 1., 0., 0., 1., 0., 0.]])
编码给定值只是连接三个单向量,值 0、1、1:
- F1: [1, 0]
- F2: [0, 1, 0]
- F3: [0, 1, 0, 0]
将这些首尾相连,转换为给定的 float 格式,我们得到示例中显示的数组。
让我们首先写下您的期望(假设您知道 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 可以承担的位置范围( 在编码的 space 中)。
f1: [0, 1], f2: [2, 3, 4], f3: [5, 6, 7, 8]
将向量 [0, 1, 1] 映射到一个热编码 space(根据我们从 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 开始映射。
希望能解决一些问题。
我是 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 是如何工作的,但我无法弄清楚这段代码是如何工作的。任何帮助表示赞赏。谢谢!
让我们一次一个地了解这些功能:
>>> enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]])
我们正在将编码器拟合到一组四个向量中,每个向量具有 3 个特征。
>>> enc.n_values_
array([2, 3, 4])
- 第一个特征有 2 个可能的值:0、1
- 第二个特征有 3 个可能的值:0、1、2
- 第三个特征有 4 个可能的值:0、1、2、3
清除了吗?
>>> enc.feature_indices_
array([0, 2, 5, 9])
表示将连接三个特征的向量。由于具有三个特征,表示将始终具有三个 "True" 条目 (1),其余 "False" (0).
因为有 2+3+4 个可能的值,表示长度为 9 个条目。
- 功能 1 从索引 0 开始
- 功能 2 从索引 2 开始(F1 开始 + len(F1))
- 功能 3 从索引 5 开始 (F2 start + len(F2))
在索引 9 处结束路障
>>> enc.transform([[0, 1, 1]]).toarray()
array([[ 1., 0., 0., 1., 0., 0., 1., 0., 0.]])
编码给定值只是连接三个单向量,值 0、1、1:
- F1: [1, 0]
- F2: [0, 1, 0]
- F3: [0, 1, 0, 0]
将这些首尾相连,转换为给定的 float 格式,我们得到示例中显示的数组。
让我们首先写下您的期望(假设您知道 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 可以承担的位置范围( 在编码的 space 中)。
f1: [0, 1], f2: [2, 3, 4], f3: [5, 6, 7, 8]
将向量 [0, 1, 1] 映射到一个热编码 space(根据我们从 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 开始映射。
希望能解决一些问题。