1

data実際の値といくつかの NaN 値を含むデータフレームがあります。特にクラスを使用して、次元を25コンポーネントに減らすために、ランダム射影を使用して局所性に敏感なハッシュを実行しようとしていますsklearn.random_projection.GaussianRandomProjection。ただし、実行すると:

tx = random_projection.GaussianRandomProjection(n_components = 25) data25 = tx.fit_transform(data)

私は得るInput contains NaN, infinity or a value too large for dtype('float64')。これに対する回避策はありますか?すべての NaN 値を、データセットに存在しない値 (-1 など) に変更しようとしました。この場合、私の出力はどの程度有効でしょうか? 私は局所性に敏感なハッシュ/ランダム予測の理論の背後にある専門家ではないので、洞察も役に立ちます。ありがとう。

4

1 に答える 1

0

NA / NaN 値 (not-available / not-a-number) は、私が見つけたのは、単純に面倒なことです。

-1 のようなランダムな値を単に代用したくはありません。そのような場合は、Imputer クラスのいずれかを使用してください。そうしないと、ポイント間の距離を大幅に変更する可能性があります。ランダムな射影を使用している場合は、可能な限り距離を維持する必要があります。

ランダム射影行列の次元と分布は、データセットの任意の 2 つのサンプル間のペアごとの距離を維持するように制御されます。

ただし、これにより、学習に妥当な値が得られる場合とそうでない場合があります。私の知る限り、帰属は開かれた研究分野であり、(たとえば)この紳士たちは研究を専門としています。

十分な例がある場合は、NaN 値を含む行または列を削除することを検討してください。もう 1 つの可能性は、制限付きボルツマン マシンのような生成モデルをトレーニングし、それを使用して欠損値を埋めることです。

rbm = sklearn.neural_network.BernoulliRBM().fit( data_with_no_nans )
mean_imputed_data = sklearn.preprocessing.Imputer().fit_transform( all_data )
rbm_imputation = rbm.gibbs( mean_imputed_data )
nan_mask = np.isnan( all_data )
all_data[ nan_mask ] = rbm_imputation[ nan_mask ]

最後に、最近傍を使用した代入を検討することもできます。特定の列について、すべての完全な行を使用して、その列を除くすべての変数で最近傍モデルをトレーニングします。次に、その列がない行について、k 個の最近傍を見つけ、それらの平均値を使用します。(欠落している列のすべての組み合わせに対してモデルをトレーニングする必要があるため、特に複数の欠落している値がある行がある場合、これは非常にコストがかかります)。

于 2015-06-17T14:17:11.237 に答える