繁体   English   中英

sklearn.impute.IterativeImputer 的实现

[英]Implementation of sklearn.impute.IterativeImputer

考虑下面包含一些 nan 的data

Column-1    Column-2    Column-3    Column-4    Column-5
0   NaN 15.0    63.0    8.0 40.0
1   60.0    51.0    NaN 54.0    31.0
2   15.0    17.0    55.0    80.0    NaN
3   54.0    43.0    70.0    16.0    73.0
4   94.0    31.0    94.0    29.0    53.0
5   99.0    52.0    77.0    91.0    58.0
6   84.0    19.0    36.0    NaN 97.0
7   41.0    91.0    62.0    67.0    68.0
8   44.0    38.0    27.0    53.0    37.0
9   58.0    NaN 63.0    57.0    28.0
10  66.0    68.0    89.0    36.0    47.0
11  7.0 81.0    5.0 99.0    16.0
12  43.0    55.0    64.0    88.0    NaN
13  8.0 90.0    91.0    44.0    4.0
14  29.0    52.0    94.0    71.0    47.0
15  22.0    21.0    68.0    61.0    38.0
16  76.0    36.0    70.0    99.0    50.0
17  38.0    31.0    66.0    79.0    99.0
18  94.0    22.0    92.0    39.0    58.0

我想使用sklearn.impute.IterativeImputer替换data中的sklearn.impute.IterativeImputer 一个朋友帮我写了下面的代码:

imp = IterativeImputer(missing_values=np.nan, sample_posterior=False, 
                                 max_iter=10, tol=0.001, 
                                 n_nearest_features=4, initial_strategy='median')
imp.fit(data)
imputed_data = pd.DataFrame(data=imp.transform(data), 
                             columns=['Column-1', 'Column-2', 'Column-3', 'Column-4', 'Column-5'],
                             dtype='int')

imputed_data是:


Column-1    Column-2    Column-3    Column-4    Column-5
0   59  15  63  8   40
1   60  51  66  54  31
2   15  17  55  80  48
3   54  43  70  16  73
4   94  31  94  29  53
5   99  52  77  91  58
6   84  19  36  59  97
7   41  91  62  67  68
8   44  38  27  53  37
9   58  46  63  57  28
10  66  68  89  36  47
11  7   81  5   99  16
12  43  55  64  88  47
13  8   90  91  44  4
14  29  52  94  71  47
15  22  21  68  61  38
16  76  36  70  99  50
17  38  31  66  79  99
18  94  22  92  39  58

IterativeImputer 文档中,默认估计器是BayesianRidge() 但是,如果我像下面的代码一样使用其他估算器,例如estimator=ExtraTreesRegressor(n_estimators=10, random_state=0) ,它会返回一条警告消息。 编码:

imp = IterativeImputer(estimator=ExtraTreesRegressor(n_estimators=10, random_state=0), missing_values=np.nan, sample_posterior=False, 
                                 max_iter=10, tol=0.001, 
                                 n_nearest_features=4, initial_strategy='median')
imp.fit(data)

消息:

C:\Users\...\sklearn\impute\_iterative.py:599: ConvergenceWarning: [IterativeImputer] Early stopping criterion not reached. " reached.", ConvergenceWarning).

我的问题:这是一种正确的方法还是我应该做些什么来修复警告消息?
谢谢你。

他们在这里遇到了同样的问题:

https://github.com/scikit-learn/scikit-learn/issues/14338

由于为IterativeImputer()设置的参数max_iter=10 & tol=0.001您收到此错误。

停止标准( abs(max(X_t - X_{t-1}))/abs(max(X[known_vals])) < tol )不满足 10 次迭代( max_iter=10 )。

参阅的描述max_iter中的参数部分sklearn.impute.IterativeImputer 文档

克服此错误的一种解决方法是将max_iter参数值设置得更高。

您是否尝试先导入 ExtraTreesRegressor。 它应该可以正常工作。

from sklearn.ensemble import ExtraTreesRegressor.

还要检查 scikit learn 的版本。 它应该是 0.21.1 及以上。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM