Всем привет. Я новичок в машинном обучении, и передо мной стоит задача настроить модель Рандомного Леса. Я решил, что лучшим (так ли это?) способом поиска лучших настроек для модели будет перебор всех возможных настроек модели, и затем выбор из них лучших. Для этого я загнал все в циклы и дал машинному обучению возможность посмотреть все варианты.
Проблема в том, что от такой нагрузки не выдержала память ПК (осталось 11гб и они за 3 часа кончились). Теперь либо надо освобождать для этой задачи больше памяти, либо, зачем я пришел к вам: 1) пересмотреть свой алгоритм? 2) попросить вас подсказать бесплатный сайт с компилятором Питона, куда я могу закинуть свой логфайл, из которого строится датафрейм, и на котором все вычисления и будут проведены.
Так же оставлю свой код:
random_states=[0,42,1000]
min_samples_leafs = np.linspace(0.1, 0.5, 5, endpoint=True)
min_samples_splits = np.linspace(0.1, 1.0, 10, endpoint=True)
n_estimators = [1, 2, 4, 8, 16, 32, 64, 100, 200]
max_depths = np.linspace(1, 32, 32, endpoint=True)
train_results = []
test_results = []
temp_results = []
attempts = [1,2,3,4,5,6,7,8,9,10]
for estimator in n_estimators:
for max_depth in max_depths:
for min_samples_split in min_samples_splits:
for min_samples_leaf in min_samples_leafs:
for random_state in random_states:
for attempt in attempts:
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.2,random_state=random_state)
rf = RandomForestClassifier(n_estimators=estimator, max_depth=int(max_depth),n_jobs=-1, min_samples_split=min_samples_split, min_samples_leaf=min_samples_leaf)
rf.fit(X_train, y_train)
train_pred = rf.predict(X_train)
false_positive_rate, true_positive_rate, thresholds = roc_curve(y_train, train_pred)
roc_auc = auc(false_positive_rate, true_positive_rate)
temp_results.append({"estimator":estimator, "max_depth":max_depth, "sample_split":min_samples_split,"sample_leaf":min_samples_leaf,"random_state":random_state,"attempt":attempt,"result":roc_auc})
if attempt==attempts[-1]:
results = 0
for elem in temp_results:
results+=float(elem["result"])
results=results/10
test_results.append({"estimator":estimator, "max_depth":max_depth, "sample_split":min_samples_split,"sample_leaf":min_samples_leaf,"random_state":random_state,"attempt":attempt,"final_result":results})
result= []
max = 0
goat = 0
for dict in test_results:
if dict["final_result"]>max:
max = dict["final_result"]
goat = dict
result.append(dict)
print(datetime.now().strftime("%H:%M:%S"), "END ML")
print(result)
print(goat)