このようなデータセットがあります
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を使用してNaN
sを置き換えたいです。 sklearn
s Imputer
クラスを検索しましたが、平均、中央値、およびモードの代入のみをサポートしています。機能のリクエストがあります ここ ですが、現時点では実装されていないと思います。 KNNを使用して最後の2つの列のNaN
sを置き換える方法に関するアイデアはありますか?
Edit:別の環境でコードを実行する必要があるため、パッケージをインストールする余裕がありません。使用できるのは、sklearn、pandas、numpy、およびその他の標準パッケージのみです。
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から取得。
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)
Sklearnへのこのプルリクエストは、KNNサポートを追加します。コードを取得できます- https://github.com/scikit-learn/scikit-learn/pull/9212