簡體   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