Правильно ли я использовал 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. Правильно ли я кодировал, особенно подходил для метода Нистрома? Огромное спасибо!