web-dev-qa-db-ja.com

KNNを使用したpythonの欠損値代入

このようなデータセットがあります

1908    January 5.0 -1.4
1908    February    7.3 1.9
1908    March   6.2 0.3
1908    April   NaN   2.1
1908    May NaN   7.7
1908    June    17.7    8.7
1908    July    NaN   11.0
1908    August  17.5    9.7
1908    September   16.3    8.4
1908    October 14.6    8.0
1908    November    9.6 3.4
1908    December    5.8 NaN
1909    January 5.0 0.1
1909    February    5.5 -0.3
1909    March   5.6 -0.3
1909    April   12.2    3.3
1909    May 14.7    4.8
1909    June    15.0    7.5
1909    July    17.3    10.8
1909    August  18.8    10.7  

メソッドとしてKNNを使用してNaNsを置き換えたいです。 sklearns Imputerクラスを検索しましたが、平均、中央値、およびモードの代入のみをサポートしています。機能のリクエストがあります ここ ですが、現時点では実装されていないと思います。 KNNを使用して最後の2つの列のNaNsを置き換える方法に関するアイデアはありますか?

Edit:別の環境でコードを実行する必要があるため、パッケージをインストールする余裕がありません。使用できるのは、sklearn、pandas、numpy、およびその他の標準パッケージのみです。

16
Clock Slave

fancyimpute package は、次のAPIを使用して、この種の代入をサポートします。

from fancyimpute import KNN    
# X is the complete data matrix
# X_incomplete has the same values as X except a subset have been replace with NaN

# Use 3 nearest rows which have a feature to fill in each row's missing features
X_filled_knn = KNN(k=3).complete(X_incomplete)

このパッケージでサポートされている代入は次のとおりです。

•SimpleFill:欠落しているエントリを各列の平均または中央値に置き換えます。

•KNN:2つの行の両方がデータを観測しているフィーチャの平均二乗差を使用してサンプルに重みを付ける最近傍補完。

•SoftImpute:SVD分解の反復ソフトしきい値処理によるマトリックス補完。 RのsoftImputeパッケージに触発されたもので、Mazumderらによる大規模な不完全行列を学習するためのスペクトル正則化アルゴリズムに基づいています。等.

•IterativeSVD:反復的な低ランクSVD分解によるマトリックス補完。 TroyanskayaらによるDNAマイクロアレイの欠損値推定法のSVDimputeに似ているはずです。等.

•MICE:連鎖方程式による多重代入の再実装。

•MatrixFactorization:不完全な行列を低ランクUおよびVに直接因数分解し、Uの要素にL1スパース性ペナルティを、Vの要素にL2ペナルティを付けます。勾配降下法で解きます。

•NuclearNormMinimization:cvxpyを使用したEmmanuel CandesおよびBenjamin RechtによるConvex Optimizationによる正確なマトリックス補完の簡単な実装。大きな行列の場合は遅すぎます。

•BiScaler:行/列の平均と標準偏差の反復推定により、二重に正規化されたマトリックスを取得します。収束する保証はありませんが、実際にはうまく機能します。高速交互最小二乗法によるマトリックス完了および低ランクSVDから取得。

17
Miriam Farber

fancyimputeのKNN代入は、他の回答で示唆されているcomplete関数をサポートしなくなったため、fit_transformを使用する必要があります

# X is the complete data matrix
# X_incomplete has the same values as X except a subset have been replace with NaN
# Use 3 nearest rows which have a feature to fill in each row's missing features

X_filled_knn = KNN(k=3).fit_transform(X_incomplete)    

参照 https://github.com/iskandr/fancyimpute

4
Rajshekar Reddy

Sklearnへのこのプルリクエストは、KNNサポートを追加します。コードを取得できます- https://github.com/scikit-learn/scikit-learn/pull/9212

2
Omri