В этом проекте я использовал все данные о покемонах из 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.

Спасибо, что прочитали мою статью :)

Надеюсь увидеть вас снова в моей следующей статье…

Озан ЭРТЕК