scikit-learn.impute 没有使用机器学习 A-Z 教程中的代码通过 Spyder 从 Imputer 导入

Posted

技术标签:

【中文标题】scikit-learn.impute 没有使用机器学习 A-Z 教程中的代码通过 Spyder 从 Imputer 导入【英文标题】:scikit-learn.impute isn't being imported from Imputer via Spyder using the code from Machine Learning A-Z tutorial 【发布时间】:2020-04-10 13:11:22 【问题描述】:

我的代码无法正常工作,因为我从机器学习 A-Z™:Python 和 R 数据科学教程课程中逐字复制。我正在使用 Python 3.7,我已经在我的环境中安装了 scikit-learn 包。它不起作用,我试图寻找一个有 sklearn 的包,尽管它似乎没有找到任何东西。它给了我这个错误。 我正在通过 Anaconda 运行我的环境。

ImportError: cannot import name 'Imputer' from 'sklearn.preprocessing' (C:\Users\vygan\.conda\envs\env\lib\site-packages\sklearn\preprocessing\__init__.py)

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd



# Importing the dataset
dataset = pd.read_csv('Data.csv')
X = pd.DataFrame(dataset.iloc[:, :-1].values)
y = pd.DataFrame(dataset.iloc[:, 3].values)

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

【问题讨论】:

Imputer 已被弃用,现在应替换为 from sklearn.impute import SimpleImputer,正如 @parsa 所述 【参考方案1】:

它从预处理永久移动到估算库,你可以这样称呼它:

from sklearn.impute import SimpleImputer

完全一样。 如果它不起作用,您应该使用 pip 将其卸载,然后重新安装 第一次可能没有正确安装

它不再有轴,但您可以像这样使用 pandas 数据框标头轻松处理它:

si=SimpleImputer()
si.fit([dataset["headername"]])

有一个策略参数可让您在“mean”、“most_frequent”、“median”和“constant”之间进行选择

但还有一个我更喜欢的 imputer:

from sklearn.impute import KNNImputer

这将用 k 个最近邻的平均值估算缺失值

【讨论】:

这对我有用。我不确定我是否应该提出另一个问题,尽管现在我收到了 TypeError: __init__() got an unexpected keyword argument 'axis' 似乎它无法识别我的 axis = 0 参数。 我无法在评论中说出来,所以我编辑了我的答案 ``` 文件“pandas_libs\index.pyx”,第 107 行,在 pandas._libs.index.IndexEngine.get_loc 文件“pandas_libs\index.pyx”,第 109 行,在 pandas._libs。 index.IndexEngine.get_loc ``` TypeError: '(slice(None, None, None), slice(1, 3, None))' is an invalid key from sklearn.impute import SimpleImputer si = SimpleImputer(missing_values = 'NaN', strategy = 'mean') si = SimpleImputer.fit(X[:, 1:3]) X[:, 1:3] = si.transform(X[:, 1:3]) 这就是我根据您的回答修改代码的方式。我不确定我是否做得很好。您已经回答了最初的问题,我将把我的新问题移到单独的帖子中。【参考方案2】:

更完整的答案:

Imputer (https://sklearn.org/modules/generated/sklearn.preprocessing.Imputer.html`) 只能在 0.19.1 及以下版本中找到。

SimpleImputer 出现在最新版本中,这正是您所需要的。


尝试安装最新版本:

 pip install -U scikit-learn # or using conda

然后使用:

from sklearn.impute import SimpleImputer

来源:https://github.com/mindsdb/lightwood/issues/75

【讨论】:

【参考方案3】:

您的代码对我来说很好用。你有哪个 sklearn 版本?

import sklearn
sklearn.__version__

'0.21.3'

您可以通过以下方式使用 conda 升级软件包:

How to upgrade scikit-learn package in anaconda

【讨论】:

在哪里输入 import sklearn 来获取版本?我的蟒蛇提示不允许我这样做。说导入无法识别。 添加一段代码有助于更好地理解您所指的内容。您应该在文件开头导入包。【参考方案4】:

我遇到了同样的问题,因为库从 preprocessing 更改为 impute 并且类从 Imputer 更改为 SimpleImputer

我将代码更改如下:

from sklearn.impute import SimpleImputer
simp = SimpleImputer(missing_values = 'NaN', strategy = 'mean')
simp = SimpleImputer().fit(X[:, 1:3]) 
X[:, 1:3] = simp.transform(X[:, 1:3])

【讨论】:

以上是关于scikit-learn.impute 没有使用机器学习 A-Z 教程中的代码通过 Spyder 从 Imputer 导入的主要内容,如果未能解决你的问题,请参考以下文章

主机是宽带连接上网的,本地连接没有网络。 虚拟机是桥接方式,怎么设置虚拟机的IP才能上网?

虚拟机中最小安装centos7没有ifconfig命令

模拟器没有真机环境!如何使用EVE-NG模拟真机设备进行网络实验

没有IP地址怎么与VMWare虚拟机连接

虚拟机ifconfig没有ip地址

虚拟机点击了桥接也没有VMnet0