scikit 学习中的 OneHotEncoder 混淆
OneHotEncoder confusion in scikit learn
在 Python 2.7(miniconda 解释器)中使用。被下面关于OneHotEncoder
的例子搞糊涂了,搞不懂为什么enc.n_values_
输出是[2, 3, 4]
?如果有人能帮忙澄清一下,那就太好了。
http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html
>>> 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=<... 'float'>,
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.]])
此致,
林
n_values
是每个特征的值数。
在这个例子中,
X = 0 0 3
1 1 0
0 2 1
1 0 2
(X 的形状是 [n_samples, n_feature])
对于第一个特征,有 2 个值:0、1;
对于第二个特征,有 3 个值:0、1、2。
对于第三个特征,有4个值:0、1、2、3。
因此,enc.n_values_
是[2, 3, 4]
。
我认为上面关于n_values_的解释不完整,clear.My解释:-
有了这个:“n_values[i] 是分类值的数量
X[:, i].每个特征值应该在范围内(n_values[i])”
这意味着 n_values_ 在列中给出范围 (n_values[i]) = [0,n_values).
此处:
from sklearn.preprocessing import OneHotEncoder
o = OneHotEncoder()
o.fit([[1,2,3], [1,2,3], [1,2,11] , [2,3,1]])
o.n_values_
array([3,4,12])
这里的结果是 3,4,12,所以你可以通过列更清楚地看到它,数组中的每个值都给出了范围。
1 2 3
1 2 3
1 2 11
2 3 1
所以列值是范围(3),范围(4),范围(12)。为了更清楚地理解让我们再举一个例子:-
from sklearn.preprocessing import OneHotEncoder
o = OneHotEncoder()
o.fit([[1,2,3,100], [1,2,3,200], [1,2,11,300] , [2,3,1,400]])
o.n_values_
array([ 3, 4, 12, 401])
这证明分类数据看起来是逐列的,并且每个特征值都在范围内(n_values_)
在 Python 2.7(miniconda 解释器)中使用。被下面关于OneHotEncoder
的例子搞糊涂了,搞不懂为什么enc.n_values_
输出是[2, 3, 4]
?如果有人能帮忙澄清一下,那就太好了。
http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html
>>> 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=<... 'float'>,
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.]])
此致, 林
n_values
是每个特征的值数。
在这个例子中,
X = 0 0 3
1 1 0
0 2 1
1 0 2
(X 的形状是 [n_samples, n_feature])
对于第一个特征,有 2 个值:0、1;
对于第二个特征,有 3 个值:0、1、2。
对于第三个特征,有4个值:0、1、2、3。
因此,enc.n_values_
是[2, 3, 4]
。
我认为上面关于n_values_的解释不完整,clear.My解释:-
有了这个:“n_values[i] 是分类值的数量
X[:, i].每个特征值应该在范围内(n_values[i])”
这意味着 n_values_ 在列中给出范围 (n_values[i]) = [0,n_values).
此处:
from sklearn.preprocessing import OneHotEncoder
o = OneHotEncoder()
o.fit([[1,2,3], [1,2,3], [1,2,11] , [2,3,1]])
o.n_values_
array([3,4,12])
这里的结果是 3,4,12,所以你可以通过列更清楚地看到它,数组中的每个值都给出了范围。
1 2 3
1 2 3
1 2 11
2 3 1
所以列值是范围(3),范围(4),范围(12)。为了更清楚地理解让我们再举一个例子:-
from sklearn.preprocessing import OneHotEncoder
o = OneHotEncoder()
o.fit([[1,2,3,100], [1,2,3,200], [1,2,11,300] , [2,3,1,400]])
o.n_values_
array([ 3, 4, 12, 401])
这证明分类数据看起来是逐列的,并且每个特征值都在范围内(n_values_)