Русский
Русский
English
Статистика
Реклама

Mushrooms (Machine Learning)

Всем привет! Рассмотрим данные о грибах, предскажем их съедобность, построим корреляцию и многое другое.

Воспользуемся данными о грибах с Kaggle (исходный датафрейм) сhttps://www.kaggle.com/uciml/mushroom-classification, 2 дополнительных датафрейма приложу к статье.

Все операции проделаны наhttps://colab.research.google.com/notebooks/intro.ipynb

# Загружаем библиотекeу для работы с даннымиimport pandas as pd# для построения леса деревьев решений, обучения моделей и построения confusion_matrix:from sklearn.ensemble import RandomForestClassifierfrom sklearn.model_selection import GridSearchCVfrom sklearn.metrics import confusion_matrix# для работы с графикой:import matplotlib.pyplot as pltimport seaborn as sns# Загружаем наш датафреймmushrooms = pd.read_csv('/content/mushrooms.csv')#Просматриваем наши данныеmushrooms.head()# Что будет изображено после выполнения кода можете увидеть на картинке внизу:
#Краткая сводка данныхmushrooms.info()
#Информация о количестве строк и столбцовmushrooms.shape# Используем кодировщик данных LabelEncoder для преобразования наших категоральных или текстовых данных в числа (обязательно перед heatmap)# Если мы этого не сделаем, при обучении дерева у нас возникнет ошибка на этапе его обученияfrom sklearn.preprocessing import LabelEncoderle=LabelEncoder()for i in mushrooms.columns:    mushrooms[i]=le.fit_transform(mushrooms[i])# Посмотрим как преобразовались наши данныеmushrooms.head()
# Просмотрим корреляцию наших данных с помощью heatmapfig = plt.figure(figsize=(18, 14))sns.heatmap(mushrooms.corr(), annot = True, vmin=-1, vmax=1, center= 0, cmap= 'coolwarm', linewidths=3, linecolor='black')fig.tight_layout()plt.show()

Положительно коррелирующие значения: Сильная корреляция (veil-color,gill-spacing) = +0.9 Средняя корреляция (ring-type,bruises) = +0.69 Средняя корреляция (ring-type,gill-color) = +0.63 Средняя корреляция (spore-print-color,gill-size) = +0.62 Отрицательно коррелирующие значения Средняя корреляция (stalk-root,spore-print-color) = -0.54 Средняя корреляция (population,gill-spacing) = -0.53 Средняя корреляция (gill-color,class) = -0.53 Если в нашем исследование возьмем максимально тесно связанные коррелирующие значения, то получим максимально точные значения и точно обученную модель. В нашей задаче мы будем обучать модель по классу, представляя, что аналитик не воспользовался таблицей корреляции.

# Отбросим колонку, которую будем предсказывать.X = mushrooms.drop(['class'], axis=1)# Создадим переменную, которую будем предсказывать.y = mushrooms['class']# Создаем модель RandomForestClassifier.rf = RandomForestClassifier(random_state=0)# Задаем параметры модели, изначально когда мы не знаем оптимальных параметров для обучения леса задаем так#{'n_estimators': range(10, 51, 10), 'max_depth': range(1, 13, 2),#             'min_samples_leaf': range(1,8), 'min_samples_split': range(2,10,2)}parameters = {'n_estimators': [10], 'max_depth': [7],              'min_samples_leaf': [1], 'min_samples_split': [2]}# Обучение Random forest моделей GridSearchCV.GridSearchCV_clf = GridSearchCV(rf, parameters, cv=3, n_jobs=-1)GridSearchCV_clf.fit(X, y)# Определение наилучших параметров, и обучаем с ними дерево для получения лучшего уровня обучаемостиbest_clf = GridSearchCV_clf.best_params_# Просмотр оптимальных параметров.best_clf
# Создание confusion matrix (матрицу ошибок) по предсказаниям, полученным в прошлом шаге и правильным ответам с нового датасета.y_true = pd.read_csv ('/content/testing_y_mush.csv')sns.heatmap(confusion_matrix(y_true, predictions), annot=True, cmap="Blues")plt.show()

Данная матрица ошибок показывает, что у нас отсутствуют ошибки первого типа, но присутствуют ошибки второго типа в значении 3, что для нашей модели является очень низким показателем стремящемся к 0.

Далее мы проделаем операции для определения модели наилучшей точности нашем дф

# определим точность нашей модели from sklearn.metrics import accuracy_scoremr = accuracy_score(y_true, predictions)#Данные для тренировки и тестировки датафреймаfrom sklearn.model_selection import train_test_splitx_train, x_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0)#Логистическая регрессия#Тренируем модельfrom sklearn.linear_model import LogisticRegressionlr = LogisticRegression(max_iter = 10000)lr.fit(x_train,y_train)#Строим матрицу ошибокfrom sklearn.metrics import confusion_matrix,classification_reporty_pred = lr.predict(x_test)cm = confusion_matrix(y_test,y_pred)#Делаем проверку точностиlog_reg = accuracy_score(y_test,y_pred)#K ближайших соседей#Тренируем модельfrom sklearn.neighbors import KNeighborsClassifierknn = KNeighborsClassifier(n_neighbors = 5, metric = 'minkowski',p = 2)knn.fit(x_train,y_train)#Создаем матрицу ошибокfrom sklearn.metrics import confusion_matrix,classification_reporty_pred = knn.predict(x_test)cm = confusion_matrix(y_test,y_pred)#Делаем проверку точностиfrom sklearn.metrics import accuracy_scoreknn_1 = accuracy_score(y_test,y_pred)#Дерево решений#Тренируем модельfrom sklearn.tree import DecisionTreeClassifierdt = DecisionTreeClassifier(criterion = 'entropy')dt.fit(x_train,y_train)#Создаем матрицу ошибокfrom sklearn.metrics import confusion_matrix,classification_reporty_pred = dt.predict(x_test)cm = confusion_matrix(y_test,y_pred)#Делаем проверку точностиfrom sklearn.metrics import accuracy_scoredt_1 = accuracy_score(y_test,y_pred)#Простой вероятностный классификатор#Тренируем модельfrom sklearn.naive_bayes import GaussianNBnb = GaussianNB()nb.fit(x_train,y_train)#Создаем матрицу ошибокfrom sklearn.metrics import confusion_matrix,classification_reporty_pred = nb.predict(x_test)cm = confusion_matrix(y_test,y_pred)#Делаем проверку точностиfrom sklearn.metrics import accuracy_scorenb_1 = accuracy_score(y_test,y_pred)#Осущевстляем проверку точностейplt.figure(figsize= (16,12))ac = [log_reg,knn_1,nb_1,dt_1,mr]name = ['Логистическая регрессия','К ближайших соседей','Простой вероятностный классификатор','Дерево решений', 'Случайные деревья']sns.barplot(x = ac,y = name,palette='colorblind')plt.title("График точностей моделей", fontsize=20, fontweight="bold")

Мы можем сделать вывод, что наиболее точной моделью для наших предсказаний является дерево решений.

Источник: habr.com
К списку статей
Опубликовано: 14.06.2021 12:13:27
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Python

Машинное обучение

Machine-learning

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru