#python #machine-learning #scikit-learn #k-fold
Вопрос:
Это мой код:
fold = StratifiedKFold(10, shuffle= True, random_state=42)
score = []
cat_prediction = []
lgbm_prediction = []
forest_prediction = []
rgb_prediction = []
oldList = []
for train_s, test_s in tqdm(fold.split(X, Y)):
xtrain, ytrain = X.iloc[train_s], Y.iloc[train_s]
xtest, ytest = X.iloc[test_s], Y.iloc[test_s]
#xtrain, ytrain = df.drop("Response", 1).iloc[train_s], df.Response.iloc[train_s]
#xtest, ytest = df.drop("Response", 1).iloc[test_s], df.Response.iloc[test_s]
model = RGFClassifier(algorithm="RGF_Sib", test_interval=100, normalize = True)
model.fit(df.drop("Response", 1), df.Response)
score.append(f1_score(ytest, model.predict(xtest)))
rgb_prediction.append(model.predict(tt))
model = RandomForestClassifier(class_weight = class_weight)
model.fit(df.drop("Response", 1), df.Response)
score.append(f1_score(ytest, model.predict(xtest)))
forest_prediction.append(model.predict(tt))
model = CatBoostClassifier(iterations= 400, class_weights = class_weight, silent= True)
model.fit(df.drop("Response", 1), df.Response)
score.append(f1_score(ytest, model.predict(xtest)))
cat_prediction.append(model.predict(tt))
model = LGBMClassifier(class_weight = class_weight)
model.fit(df.drop("Response", 1), df.Response)
score.append(f1_score(ytest, model.predict(xtest)))
lgbm_prediction.append(model.predict(tt))
Я хочу объединить результаты, чтобы создать смесь различных моделей.
Я пытался
(cat_prediction lgbm_prediction forest_prediction rgb_prediction)/4
и
(np.mean(cat_prediction , 0) np.mean(lgbm_prediction, 0) np.mean(forest_prediction , 0) np.mean(rgb_prediction, 0))/4
Но результат не такой, как хотелось бы.
Как мне этого добиться?
Комментарии:
1. Это классификация, поэтому среднее значение даст вам десятичные точки, вместо этого используйте режим.
2. Вы также можете использовать
VotingClassifier()
из Scikit-Learn внутри этого стратифицированного цикла, чтобы сократить код.3. Я просто использовал классификатор голосования, он работает хорошо, но даже не дотягивает до производительности одного классификатора, когда я использовал «voting_method= soft».
4. Да, это не даст вам таких хороших результатов. Такие модели, как LightGBM или Catboost, являются мощными. Обычно они не требуют поддержки какой-либо другой модели. Просто используйте одну модель, такую как LightGBM, тренируйте ее с ранней остановкой и настраивайте с помощью Optuna. Это даст вам лучшие результаты. Необходимо использовать 4 модели, если вы не участвуете в Kaggle.
5. Полезный. Я участвую в хакатоне Zindi.