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才能上网?