2017-09-04 4 views
0

私は8GBのRAMとIntel Core I5プロセッサを搭載したLenovo IdeaPadラップトップを持っています。私はそれぞれ100次元の60kデータポイントを持っています。私はKNNをしたい、それのために私はMahalanobisメトリックを見つけるためにLMNNアルゴリズムを実行しています。
問題は2時間後に私のubuntuに空白の画面が表示された後です。私は問題が何かを得ていない!私の記憶はいっぱいになっていますか?
このコードを最適化する方法はありますか?

マイセット:data
マイLMNN実装:平均的なラップトップに中規模のデータセットを持つMLアルゴリズムを成功裡に実行するにはどうすればよいですか?

import numpy as np 
import sys 
from modshogun import LMNN, RealFeatures, MulticlassLabels 
from sklearn.datasets import load_svmlight_file 

def main(): 

    # Get training file name from the command line 
    traindatafile = sys.argv[1] 

    # The training file is in libSVM format 
    tr_data = load_svmlight_file(traindatafile); 

    Xtr = tr_data[0].toarray(); # Converts sparse matrices to dense 
    Ytr = tr_data[1]; # The trainig labels 

    # Cast data to Shogun format to work with LMNN 
    features = RealFeatures(Xtr.T) 
    labels = MulticlassLabels(Ytr.astype(np.float64)) 



    # Number of target neighbours per example - tune this using validation 
    k = 18 

    # Initialize the LMNN package 
    lmnn = LMNN(features, labels, k) 
    init_transform = np.eye(Xtr.shape[1]) 

    # Choose an appropriate timeout 
    lmnn.set_maxiter(200000) 
    lmnn.train(init_transform) 

    # Let LMNN do its magic and return a linear transformation 
    # corresponding to the Mahalanobis metric it has learnt 
    L = lmnn.get_linear_transform() 
    M = np.matrix(np.dot(L.T, L)) 

    # Save the model for use in testing phase 
    # Warning: do not change this file name 
    np.save("model.npy", M) 

if __name__ == '__main__': 
    main() 
+0

あなたはより小さいセットで結果を得ることを確認しましたか? – Julien

+0

はい、私は小さなセットで結果を得ています。すなわち60Kの代わりに約0.5Kのデータ点を有する。 – Fenil

+0

明らかに、コードで問題にならないデータを処理するには、プロセッサとRAMが必要です。 –

答えて

0

正確なK-NNは、スケーラビリティの問題があります。

Scikit-learnには、このような状況で何をすべきかについてのスケーリング戦略があります(多くのアルゴリズムはpartial_fitメソッドを持っていますが、残念ながらkNNにはありません)。

速度に関してある程度正確に取引することを受け入れる場合は、approximate nearest neighborsのようなものを実行できます。

関連する問題