行列があるとします:
> import numpy as nap
> a = np.random.random((5,5))
array([[ 0.28164485, 0.76200749, 0.59324211, 0.15201506, 0.74084168],
[ 0.83572213, 0.63735993, 0.28039542, 0.19191284, 0.48419414],
[ 0.99967476, 0.8029097 , 0.53140614, 0.24026153, 0.94805153],
[ 0.92478 , 0.43488547, 0.76320656, 0.39969956, 0.46490674],
[ 0.83315135, 0.94781119, 0.80455425, 0.46291229, 0.70498372]])
np.NaN
そして、たとえば次のように、いくつかの穴を開けます。
> a[(1,4,0,3),(2,4,2,0)] = np.NaN;
array([[ 0.80327707, 0.87722234, nan, 0.94463778, 0.78089194],
[ 0.90584284, 0.18348667, nan, 0.82401826, 0.42947815],
[ 0.05913957, 0.15512961, 0.08328608, 0.97636309, 0.84573433],
[ nan, 0.30120861, 0.46829231, 0.52358888, 0.89510461],
[ 0.19877877, 0.99423591, 0.17236892, 0.88059185, nan ]])
nan
マトリックスの残りのエントリからの情報を使用してエントリを記入したいと思います。例として、エントリが発生する列の平均値を使用します。nan
より一般的には、マトリックス補完用の Python のライブラリはありますか? (たとえば、 Candes & Recht の凸最適化法に沿ったもの)。
バックグラウンド:
この問題は、機械学習でよく見られます。たとえば、分類/回帰または協調フィルタリングで欠落している機能を操作する場合 (たとえば、ウィキペディアの Netflix 問題とここを参照してください)