Sha*_*ant 9 python machine-learning prediction scikit-learn one-hot-encoding
我是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.]])
Run Code Online (Sandbox Code Playgroud)
有人可以一步一步地向我解释这里发生了什么吗?我清楚地知道一个热编码器如何工作,但我无法弄清楚这个代码是如何工作的.任何帮助表示赞赏.谢谢!
ors*_*ady 14
让我们首先写下您期望的内容(假设您知道One Hot Encoding的含义)
unecoded
f0 f1 f2
0, 0, 3
1, 1, 0
0, 2, 1
1, 0, 2
Run Code Online (Sandbox Code Playgroud)
编码
|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
Run Code Online (Sandbox Code Playgroud)
要编码:
enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]]),
Run Code Online (Sandbox Code Playgroud)
如果您使用默认值n_values='auto'.在使用default ='auto'时,您指定的是您的功能(未编码的列)可能采用的值可以从传递给的数据列中的值推断出来fit.
这带给我们的是 enc.n_values_
来自文档:
每个要素的值数.
enc.n_values_
array([2, 3, 4])
Run Code Online (Sandbox Code Playgroud)
以上意味着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])
Run Code Online (Sandbox Code Playgroud)
来自文档:
特征范围的指数.原始数据中的特征i被映射到feature_indices_ [i]到feature_indices_ [i + 1]的特征(之后可能被active_features_屏蔽)
给定f1,f2,f3可以采用的位置范围(在编码空间中).
f1: [0, 1], f2: [2, 3, 4], f3: [5, 6, 7, 8]
Run Code Online (Sandbox Code Playgroud)
将矢量[0,1,1]映射到一个热编码空间(在我们从enc.fit获得的映射下):
1, 0, 0, 1, 0, 0, 1, 0, 0
Run Code Online (Sandbox Code Playgroud)
怎么样?
f0中的第一个特征是映射到位置0(如果元素是1而不是0,我们将它映射到位置1).
下一个元素1映射到位置3,因为f1从位置2开始,元素1是第二个可能的值f1可以采用.
最后,第三个元素1占据位置6,因为第二个可能的值f2接着而f2开始从位置5映射.
希望清除一些东西.
Pru*_*une 13
让我们一次一个地使用这些功能:
>>> enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]])
Run Code Online (Sandbox Code Playgroud)
我们将编码器拟合到一组四个向量中,每个向量具有3个特征.
>>> enc.n_values_
array([2, 3, 4])
Run Code Online (Sandbox Code Playgroud)
明确?
>>> enc.feature_indices_
array([0, 2, 5, 9])
Run Code Online (Sandbox Code Playgroud)
该表示将连接三个特征的向量.由于有三个特征,表示将始终具有三个"真"条目(1),其余为"假"(0).
由于有2 + 3 + 4个可能的值,因此表示长度为9个条目.
结束指数9的路障
>>> enc.transform([[0, 1, 1]]).toarray()
array([[ 1., 0., 0., 1., 0., 0., 1., 0., 0.]])
Run Code Online (Sandbox Code Playgroud)
对给定值进行编码简单地连接三个单向量,对于值0,1,1:
将这些端到端压缩,转换为给定的float格式,我们将在示例中显示该数组.
| 归档时间: |
|
| 查看次数: |
9125 次 |
| 最近记录: |