我试图在Iris数据集中的目标列(“物种”)上使用一个热编码器。
但我得到了以下错误:
ValueError:预期的2D数组,得到1D数组代替:
使用数组或数组重塑数据的形状。如果数据具有单个要素或阵列,则重塑(-1,1)。如果(1,-1)包含单个样本,则重塑其形状。
Id SepalLengthCm SepalWidthCm PetalLengthCm PetalWidthCm Species
0 1 5.1 3.5 1.4 0.2 Iris-setosa
1 2 4.9 3.0 1.4 0.2 Iris-setosa
2 3 4.7 3.2 1.3 0.2 Iris-setosa
3 4 4.6 3.1 1.5 0.2 Iris-setosa
4 5 5.0 3.6 1.4 0.2 Iris-setosa
我在谷歌上搜索了这个问题,发现大多数scikit学习估计器都需要2D数组,而不是一维数组。
同时,我还发现,我们可以尝试传递带有索引的数据帧来对单个列进行编码,但它不起作用
onehotencoder = OneHotEncoder(categorical_features=[df.columns.tolist().index('pattern_id')
X = dataset.iloc[:,1:5].values
y = dataset.iloc[:, 5].values
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder= LabelEncoder()
y = labelencoder.fit_transform(y)
onehotencoder = OneHotEncoder(categorical_features=[0])
y = onehotencoder.fit_transform(y)
我试图对单个分类列进行编码,并将其拆分为多个列(编码通常的工作方式)
我遇到了类似的情况,发现下面的方法是工作:
在fit或fit_transform命令中,使用两个方括号作为列名
one_hot_enc = OneHotEncoder()
arr = one_hot_enc.fit_transform(data[['column']])
df = pd.DataFrame(arr)
fit_变换为您提供了一个数组,您可以将其转换为数据帧。您可以将其附加到原始数据帧或直接指定给现有列。
对于您的情况,因为看起来您正在使用kaggle数据集,所以我只使用
import pandas as pd
pd.get_dummies(df.Species).head()
Out[158]:
Iris-setosa Iris-versicolor Iris-virginica
0 1 0 0
1 1 0 0
2 1 0 0
3 1 0 0
4 1 0 0
请注意,这里的默认编码所有类(3种),其中通常只使用两个并比较基线组的方法差异(例如,R中的默认值,或者通常在进行回归/方差分析时,可以使用
drop_first参数)。
ValueError:应为2D数组,改为1D数组:使用数组或数组重塑数据。如果数据具有单个要素或阵列,则重塑(-1,1)。如果(1,-1)包含单个样本,则重塑其形状。
表示需要将数组转换为向量。您可以通过以下方式实现:
from sklearn import datasets
from sklearn.decomposition import PCA
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
import pandas as pd
import numpy as np
# load iris dataset
>>> iris = datasets.load_iris()
>>> iris = pd.DataFrame(data= np.c_[iris['data'], iris['target']], columns= iris['feature_names'] + ['target'])
>>> y = iris.target.values
>>> onehotencoder = OneHotEncoder(categories='auto')
>>> y = onehotencoder.fit_transform(y.reshape(-1,1))
# y - will be sparse matrix of type '<class 'numpy.float64'>
# if you want it to be a array you need to
>>> print(y.toarray())
[[1. 0. 0.]
[1. 0. 0.]
. . . .
[0. 0. 1.]
[0. 0. 1.]]
您还可以使用get_dummies
功能(文档)
>>> pd.get_dummies(iris.target).head()
0.0 1.0 2.0
0 1 0 0
1 1 0 0
2 1 0 0
3 1 0 0
4 1 0 0
希望有帮助!
问题内容: 张量流是否具有类似于scikit Learn的一种用于处理分类数据的热编码器?使用tf.string的占位符会表现为分类数据吗? 我意识到我可以在将数据发送到tensorflow之前对其进行手动预处理,但是将其内置非常方便。 问题答案: 从TensorFlow 0.8开始,现在有一个原生的一站式操作,可以将一组稀疏标签转换为密集的一站式表示形式。这是的补充,在某些情况下,您可以使您直接
如果我们不确定分类特征的性质,比如它们是名词性的还是序数的,我们应该使用哪种编码?顺序编码还是一个热编码?关于这个话题有没有明确的规定? 我看到很多人对没有方向的分类数据使用顺序编码。假设一个频率表: 有很多人更喜欢在这个专栏上做顺序编码。我非常想用一热编码。我对此的看法是,做序数编码会给这些颜色分配一些有序的数字,这意味着一个排名。而且没有排名第一。换句话说,我的模型不应该认为color_whi
我有一个数据集,其中一个列“国家”有28个不同的国家。我需要首先'标签编码'列,然后'一个热编码'它与6个标签只有:前5个最常见的国家:美国,中国,日本,法国,加拿大和第六个标签是'其他'为列中的任何其他国家
我在列表中有一个列名称,我想对列表中的列中的值进行热编码。我想从数据集中对分类变量进行编码。我尝试了几个过程,但它给我带来了一个错误 它抛出的错误 回溯(最后一次调用):文件“preprocessing.py”,第83行,trainig_set_ed[col]=clfs[col].fit_transform(trainig_set_ed[col])文件“/root/.local/lib/pytho
问题内容: 给出了可变长度特征的列表: 每个样本具有不同数量的功能,并且该功能已经并且很热门。 为了使用sklearn的特征选择实用程序,我必须将转换为2D数组,如下所示: 如何通过sklearn或numpy实现它? 问题答案: 您可以使用scikit中存在的MultiLabelBinarizer专门用于执行此操作。 您的示例代码: 输出: 它也可以与其他feature_selection实用程序
我的最终目标是对熊猫专栏进行热编码。在本例中,我想对一列“b”进行热编码,如下所示:保存苹果、香蕉和桔子,并将任何其他水果编码为“其他”。 示例:在下面的代码中,“葡萄柚”将被改写为“其他”,如果“猕猴桃”和“鳄梨”出现在我的数据中,它们也将被改写为“其他”。 以下代码有效: 我的问题是:有没有一种更短的方法来做业务?我尝试了