J'ai un jeu de données qui ressemble à ceci
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
Je veux remplacer le NaN
s en utilisant KNN comme méthode. J'ai regardé la classe sklearn
s Imputer
mais elle ne supporte que l'imputation moyenne, médiane et mode. Il y a une demande de fonctionnalité ici mais je ne pense pas que cela ait été mis en œuvre à partir de maintenant. Des idées sur la façon de remplacer les NaN
s des deux dernières colonnes avec KNN?
Edit: Comme je dois exécuter des codes sur un autre environnement, je n'ai pas le luxe d'installer des paquets. sklearn, pandas, numpy et d’autres forfaits standard sont les seuls que je puisse utiliser.
Le paquet fancyimpute prend en charge ce type d'imputation, à l'aide de l'API suivante:
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)
Voici les imputations supportées par ce package:
• SimpleFill: remplace les entrées manquantes par la moyenne ou la médiane de chaque colonne.
• KNN: imputations du voisin le plus proche qui pondère les échantillons à l'aide de la méthode différence quadratique moyenne sur les entités pour lesquelles deux rangées ont données observées.
• SoftImpute: achèvement de la matrice par seuillage progressif itératif de la SVD décompositions. Inspiré du paquet softImpute pour R, qui est basé sur des algorithmes de régularisation spectrale pour l'apprentissage de grande taille Matrices incomplètes de Mazumder et. Al.
• IterativeSVD: achèvement de la matrice par SVD de rang inférieur itératif décomposition. Devrait être similaire à SVDimpute à partir de valeur manquante méthodes d'estimation des puces à ADN par Troyanskaya et. Al.
• MICE: réimplémentation de l'imputation multiple par des équations chaînées.
• MatrixFactorization: Factorisation directe de la matrice incomplète en U et V de bas rang, avec une pénalité de faible densité N1 sur les éléments de U et une pénalité de L2 sur les éléments de V. Résolu par descente de gradient.
• NuclearNormMinimization: implémentation simple d’Exact Matrix Achèvement via l'optimisation convexe par Emmanuel Candes et Benjamin Recht en utilisant cvxpy. Trop lent pour les grandes matrices.
• BiScaler: Estimation itérative de la moyenne des rangées/colonnes et de la norme déviations pour obtenir une matrice doublement normalisée. Pas de garantie de converger mais fonctionne bien dans la pratique. Tiré de l'achèvement de la matrice et du rang bas SVD via les moindres carrés en alternance rapide.
Cette demande d'extraction à consulter ajoute le support de KNN. Vous pouvez en obtenir le code - https://github.com/scikit-learn/scikit-learn/pull/9212
l’imputation KNN de fancyimpute ne prend plus en charge la fonction complete
comme le suggère une autre réponse, nous devons maintenant utiliser 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)
référence https://github.com/iskandr/fancyimpute