python-3.x - 单列热编码

标签 python-3.x pandas scikit-learn data-science one-hot-encoding

我正在尝试在 Iris 数据集中的目标列('Species')上使用一个热编码器。

但我收到以下错误:

ValueError: Expected 2D array, got 1D array instead:

Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.


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 学习估计器需要一个二维数组而不是一维数组。

同时,我也发现我们可以尝试通过dataframe及其索引来对单列进行编码,但是没有用
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)

我正在尝试对单个分类列进行编码并拆分为多列(编码通常的工作方式)

最佳答案

ValueError: Expected 2D array, got 1D array instead: Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.



说您需要将数组转换为向量。
你可以这样做:
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函数 ( docs )
>>> 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

希望有帮助!

关于python-3.x - 单列热编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56355312/

相关文章:

python-3.x - Pandas 彼此更改日期

python - 在 python 中合并两个表(使用 pandas),其中链接取决于唯一性

python - 有没有办法对包含列表的数据框列进行排序?

scikit-learn - sklearn中的组件解释偏最小二乘方差

python - 如何在 cross_validate 之后导出/保存拟合模型并稍后在 pandas 上使用它

python3 datetime.datetime.strftime 无法接受 utf-8 字符串格式

python - 如何停止执行器中的循环运行?

python - 子程序后打印字符串

python - 快速确定 Python 中小于 10 亿的数字是否为质数

python-3.x - fit_intercept 参数如何通过 scikit learn 影响线性回归