python - 无法使用 sklearn 库中的 fit_transform 插补一维数组(分割测试)

标签 python arrays numpy scikit-learn train-test-split

我正在尝试使用带有most_frequent策略的简单输入器来输入形状为(14599,)的一维数组,但它说它期望二维数组,我已经尝试 reshape 它(-1,1)和(1,-1)但是它的错误 ValueError: 无法将输入数组从形状 (14599,1) 广播到形状 (14599) 我该如何归因,因为 reshape 无法解决问题?我不明白为什么它会抛出错误。我已经尝试在DS stackexchange中询问它有人回答说也许是 pandas 系列,但我在 numpy 数组中制作了 x,y,然后将其传递给 X,y/train,test 的参数,所以我不确定

##libraries
import pandas as pd
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt
from sklearn.impute import SimpleImputer
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder

##codes
plt.close('all')
avo_sales = pd.read_csv('avocados.csv')
avo_sales.rename(columns = {'4046':'small PLU sold',
                            '4225':'large PLU sold',
                            '4770':'xlarge PLU sold'},
                 inplace= True)

avo_sales.columns = avo_sales.columns.str.replace(' ','')

plt.scatter(avo_sales.Date,avo_sales.TotalBags)

x = np.array(avo_sales.drop(['TotalBags','Unnamed:0','year','region','Date'],1))
y = np.array(avo_sales.TotalBags)

X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.2)

impC = SimpleImputer(strategy='most_frequent')
X_train[:,8] = impC.fit_transform(X_train[:,8].reshape(-1,1)) <-- error here

imp = SimpleImputer(strategy='median')
X_train[:,1:8] = imp.fit_transform(X_train[:,1:8])

le = LabelEncoder()
X_train[:,8] = le.fit_transform(X_train[:,8])

最佳答案

更改行:

X_train[:,8] = impC.fit_transform(X_train[:,8].reshape(-1,1))

X_train[:,8] = impC.fit_transform(X_train[:,8].reshape(-1,1)).ravel()

这样你的错误就会消失。

它将估算值分配回导致代码出现问题的原因。

关于python - 无法使用 sklearn 库中的 fit_transform 插补一维数组(分割测试),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60475098/

相关文章:

arrays - 如何在 Nim 中连接两个数组?

python - 创建一个数组,其中每个元素存储其索引

python - 在 numpy 2D 矩阵中计算 "holes"

python - Sklearn 0.20+ 的交叉验证?

python - Emacs 和 conda 解决方法

ios - 如何在 Swift 中按数字和字母顺序对数组进行排序

python - 使用列组合提高算术运算的性能

javascript - 是否有一个 JavaScript 等价于 Python pass 语句,它什么都不做?

Python:给定两个文件名列表,根据日期部分查找常见文件名

C:创建一款游戏,但在某些情况下我遇到了一个错误和无限循环错误