В этом проекте я использовал все данные о покемонах из kaggle. Цель этого проекта - предсказать редкость покемонов (легендарные или обычные) с помощью функций (например, атака покемонов, защита, элемент, который у них есть). приложение для прогнозирования. Я объясню все, что я сделал, шаг за шагом. Вы можете посетить репозиторий проекта (ЗДЕСЬ). Методология проекта приведена ниже.
- Добавление всех данных в SQL (Это только для моего проекта, не обязательно) (Для набора данных).
- Определение характеристик данных
- Выявление функций покемонов, которые имеют наибольшее значение для машинного обучения и использования оптимизации гиперпараметров (байесовской).
Вторая часть(-2-)(ссылка ЗДЕСЬ)
- Фляжное приложение
- Добавление в Облако( pythonanywhere.com)(mylink)
Давайте поймаем их всех!
1 ) Получение данных
Я использовал данные о покемонах, которые имеют легендарный столбец из kaggle. Включает тип покемонов (type1, type2), hp, атаку, защиту, легендарный столбец в этом наборе данных (я добавил в свой репозиторий github.)
2) Определение функций для машинного обучения
Мы должны определить функции, которые более эффективны для анализа целевого значения (0 или 1). Поэтому нам нужно посмотреть парные графики.
g = sns.PairGrid(df, hue="legendary") g.map_diag(sns.histplot) g.map_offdiag(sns.scatterplot) g.add_legend()
и скрипичный сюжет для функции Всего.
sns.set(font_scale = 2) plt.figure(figsize = (35,25)) sns.catplot(x="type1", y="total", hue="legendary", kind="violin",height=8.27, aspect=11.7/8.27, split=True, data=df) plt.xticks(rotation=45)
и ниже самый мощный. (Вы можете увидеть увеличенный график)
sns.set(font_scale = 2) plt.figure(figsize = (15,10)) sns.histplot(x='total',hue='legendary',data= df) plt.xlabel('TOTAL')
Таким образом, это означает, что мы должны использовать столбец «Всего» для предсказания. Столбцы «Всего» представляют собой сумму всех характеристик покемонов (например, hp). + атака + защита …). С другой стороны, эти функции важны, потому что мы можем очень просто добавить в фласк. Итак, мы используем эта функция.
Другими важными характеристиками покемонов являются тип1(основной элемент покемона),тип2(вторичный элемент покемона), например, пикачу — электрический покемон, поэтому тип1 пикачу > электрический.
3) Использование лучшей модели и оптимизация с помощью байесовской оптимизации.
Мы уже определили наши функции во втором заголовке. Итак, теперь мы попробуем несколько мощных моделей классификации. Раньше я пробовал LightGBM, XGBoost GaussianNB. Лучшим вариантом был XGBoost. продолжится с XGBoost.
cla1_X = df.drop(columns=['legendary','name','generation','number']) cla_y = df['legendary'] X_train,X_test,y_train,y_test=train_test_split(cla1_X,cla_y,test_size=0.20,random_state=5)
и моделирование.
modelxgb3 = XGBClassifier()
а затем мы также должны использовать перекрестную проверку.
from sklearn.model_selection import KFold from sklearn.model_selection import cross_val_score kfold = KFold(n_splits=10) results = cross_val_score(modelxgb3, cla1_X, cla_y, cv=kfold)
следующий шаг; предсказать нашу точность, отзыв и точность оценки. Это достаточно высокие оценки (я получил до 96%). Но мы должны сделать все возможное. Мы уже выбрали хорошие функции для предсказания.
from bayes_opt import BayesianOptimization def xgbc_cv(max_depth,learning_rate,n_estimators,reg_alpha): estimator_function = xgb.XGBClassifier(max_depth=int(max_depth), learning_rate= learning_rate, n_estimators= int(n_estimators), reg_alpha = reg_alpha, nthread = -1, seed = seed) # Fit the estimator estimator_function.fit(X_train,y_train) return accuracy_score(y_test,estimator_function.predict(X_test)) gp_params = {"alpha": 1e-10} seed = 112 hyperparameter_space = { 'max_depth': (1, 150), 'learning_rate': (0, 1), 'n_estimators' : (20,300), 'reg_alpha': (0,1) } xgbcBO = BayesianOptimization(f = xgbc_cv, pbounds = hyperparameter_space, random_state = 16, verbose = 10) xgbcBO.maximize(init_points=2,n_iter=50,acq='ucb', kappa= 3, **gp_params)
Вы можете изменить итерацию в этой точке. Этот код дает нам параметры «max_depth», «скорость обучения», «n оценщик» и «reg alpha».
optimum_parameter=xgbcBO.max optimum_parameter["params"]
Мы можем получить эти параметры, используя приведенные выше коды.
А затем мы добавляем новую модель Xgboost, используя оптимизированные параметры.
xg_reg1 = xgb.XGBClassifier(learning_rate = 'your learning rate', max_depth= 'your max_depth, n_estimators ='your value', reg_alpha = 'your reg_alpha value')
приведенные ниже коды представляют собой матрицу путаницы:
cm = print_confusion_matrix(confusion_matrix(cla_y, xg_reg1.predict(cla1_X)), ['Not Legendary', 'Legendary'])
Наша точность составляет (сейчас 98,1 %). Методы байесовской оптимизации увеличились почти на +2 %, а показатель полноты и показатель точности составляют 83%-85%.
Наша модель готова для приложения flask. Во второй части (-2-) мы создадим файл pkl для flask и создадим приложение flask.
Спасибо, что прочитали мою статью :)
Надеюсь увидеть вас снова в моей следующей статье…
Озан ЭРТЕК