gpt4 book ai didi

python - 无法将 Scikit-Learn Imputer 应用于具有两个特征的数据集

转载 作者:行者123 更新时间:2023-11-30 08:59:53 24 4
gpt4 key购买 nike

我正在尝试阅读完整的泰坦尼克号数据集,可以在这里找到:

biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic3.xls

import pandas as pd

# Importing the dataset
dataset = pd.read_excel('titanic3.xls')
y = dataset.iloc[:, 1].values
x = dataset.iloc[:, 2:14].values

# Create Dataset for Men
men_on_board = dataset[dataset['sex'] == 'male']
male_fatalities = men_on_board[men_on_board['survived'] ==0]
X_male = male_fatalities.iloc[:, [4,8]].values

# Taking care of missing data
from sklearn.preprocessing import Imputer
imputer = Imputer(missing_values = 'NaN', strategy = 'mean', axis = 0)
imputer = imputer.fit(X_male[:,0])
X_male[:,0] = imputer.transform(X_male[:,0])

当我运行除最后一行之外的所有内容时,我收到以下警告:

/Users/<username>/anaconda/lib/python3.6/site-packages/sklearn/utils/validation.py:395: DeprecationWarning: Passing 1d arrays as data is deprecated in 0.17 and will raise ValueError in 0.19. Reshape your data either using X.reshape(-1, 1) if your data has a single feature or X.reshape(1, -1) if it contains a single sample.
DeprecationWarning)

当我运行最后一行时,它抛出以下错误:

File "<ipython-input-2-07afef05ee1c>", line 1, in <module>
X_male[:,0] = imputer.transform(X_male[:,0])
ValueError: could not broadcast input array from shape (523) into shape (682)

我已使用上述代码片段对其他项目进行插补,但不确定为什么它不起作用。

最佳答案

一个快速解决方案是将 axis = 0 更改为 axis = 1。这将使它工作,尽管我不确定这是否是你想要的。所以我想对这里发生的事情做出一些解释,如下:

警告基本上告诉你 sklearn estimator now requires 2D data arrays rather than 1D data arrays将数据解释为样本(行)与特征(列)很重要。在此弃用过程中,此要求由 np.atleast_2d 强制执行。假设您的数据只有一个样本(行)。同时,您将axis = 0传递给Imputer,"impute along columns"通过strategy = 'mean'。但是,您现在只有 1 行。当遇到缺失值时,无法替换该缺失值。因此,整个列(仅包含此缺失值)将被丢弃。如您所见,这等于

X_male[:,0][~np.isnan(X_male[:,0])].reshape(1, -1)

这就是赋值 X_male[:,0] = imputer.transform(X_male[:,0]) 失败的原因:X_male[:,0] is shape( 682) 而 imputer.transform(X_male[:,0]) 是 shape(523)。我之前的解决方案基本上将其更改为“沿行插补”,您确实需要替换缺失值。这次您不会掉落任何东西,并且您的 imputer.transform(X_male[:,0]) 是 shape(682),可以将其分配给 X_male[:,0]

现在我不知道为什么你的插补代码片段适用于其他项目。对于您此处的具体情况,关于弃用警告的(逻辑上)更好的方法可能是使用 X.reshape(-1, 1) ,因为您的数据具有单个特征和 682 个样本。但是,您需要将转换后的数据重新整形,然后才能分配给 X_male[:,0]:

imputer = imputer.fit(X_male[:,0].reshape(-1, 1))
X_male[:,0] = imputer.transform(X_male[:,0].reshape(-1, 1)).reshape(-1)

关于python - 无法将 Scikit-Learn Imputer 应用于具有两个特征的数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44853509/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com