Правильно ли я использовал sklearn с SGDRegressor и Nystroem Method с большим набором данных?

В моем случае я хочу использовать SVR с ядром RBF для обучения моей модели, но мой обучающий набор слишком велик, он содержит около 16 миллионов образцов, и каждый образец имеет 1200 измерений. Я прочитал брошюру Sklearn, в которой говорилось об использовании SGDRegressor и Nystroem Method вместо этого для большого набора данных, поэтому я разделил свои данные на 32 пакета и скормлю их модели с помощью partial_fit. Проблема заключается в методе Nystroem. Подходит ли он для подмножества 1 партии, а затем таким же образом преобразует все 31 оставшуюся партию? Вот мой код:

batch_size = 500000
n_batches = int(trainset.shape[0]/batch_size)
feature_map_nystroem = Nystroem(gamma=.031, n_components= 1000, random_state=1)
svm = SGDRegressor(loss='epsilon_insensitive', max_iter=1, alpha=0.001, epsilon=0.5,shuffle=False, warm_start=True)
X_batch, Y_batch= create_data(trainset[:500000]) #my own function 
feature_map_nystroem.fit(X_batch)  # using 1st batch to fit Nystroem Method

num_epochs = 10
for epoch in range(num_epochs):
    t = time.time()
    print('epoch: ', epoch)      
    trainset = shuffle(trainset) # affect rows
    trainset_batches = np.array_split(trainset, n_batches)
    it = 1
    for batch in trainset_batches:
        print('batch', it)
        X_train_batch, Y_train_batch = create_data(batch)  # my own function
        X_train_batch = feature_map_nystroem.transform(X_train_batch)
        svm.partial_fit(X_train_batch, Y_train_batch)
        it+=1
    print(time.time()-t)

После 1 эпохи мой RMSE был 0,8767, затем я продолжил тренировку с 30 эпох, но RMSE был 0,8779. Правильно ли я кодировал, особенно подходил для метода Нистрома? Огромное спасибо!

0 ответов

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