Как успешно запустить алгоритм ML с набором данных среднего размера на посредственном ноутбуке?

У меня есть ноутбук Lenovo IdeaPad с 8 ГБ оперативной памяти и процессором Intel Core I5. У меня есть 60 тысяч точек данных каждые 100 измерений. Я хочу сделать KNN, и для этого я использую алгоритм LMNN, чтобы найти метрику Махаланобиса.
Проблема в том, что после 2 часов работы на моем Ubuntu появляется пустой экран. Я не понимаю, в чем проблема! Моя память наполняется или что-то еще?
Так есть ли способ оптимизировать этот мой код?

Мой набор данных: данные
Моя реализация LMNN:

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()

1 ответ

Точный k-NN имеет проблемы с масштабируемостью.

Scikit-learn имеет страницу документации (стратегии масштабирования) о том, что делать в такой ситуации (многие алгоритмы имеют partial_fit метод, но, к сожалению, у KNN его нет).

Если вы согласитесь обменять некоторую точность на скорость, вы можете запустить что-то вроде приблизительных ближайших соседей.

Другие вопросы по тегам