Целью этой лаборатории является классификация образцов вина на основе их характеристик, таких как фиксированная кислотность, летучая кислотность, лимонная кислота, остаточный сахар, хлориды, свободный диоксид серы, общая сера. диоксид», плотность, рН и сульфаты с использованием машинного обучения. Для этой цели я использовал набор данных, скачанный с Kaggle (https://www.kaggle.com/datasets/dell4010/wine-dataset). Окончательная классификация будет заключаться в том, чтобы определить, является ли образец красным или белым вином. Как вы можете заметить, это будет классификация с одной меткой.
Прежде чем мы начнем, я в упрощенном виде объясню, как работает контролируемое машинное обучение. Представьте, что вам предстоит сдавать тест, и вам нужно хорошо подготовиться, чтобы все знания были у вас под рукой. Для этого вы изучаете материал, что значительно увеличивает ваши шансы правильно ответить на многие вопросы экзамена. Контролируемое машинное обучение работает аналогичным образом. Мы предоставляем алгоритму часть наших данных вместе с соответствующими классификациями, чтобы он мог изучить и научиться проводить классификации. Таким образом, когда мы представляем новые данные, которые алгоритм никогда раньше не видел, он по-прежнему способен оценивать их и проводить классификации на основе того, что он узнал ранее.
Первый шаг: файл .csv, загруженный с Kaggle, необходимо импортировать в блокнот Jupyter с помощью функции pandas read_csv и сохранить данные в переменной wines. wines = pd.read_csv('file path'). Чтобы визуализировать первые 5 строк DataFrame, я использовал команду wines.head().

"Если вы заметили, в столбце "стиль" классификация вина указана в виде текста: "красное" или "белое". Для обучения нашего алгоритма нам необходимо обработать эту информацию, преобразовав классификацию в числовую. . Для этого мы заменим все «красные» образцы на 0 и все «белые» образцы на 1. Чтобы добиться этого, мы снова будем использовать панд для этой обработки. Командные строки, которые будут использоваться:
вина['стиль'] = вина['стиль'].replace('красный', 0)
вина['стиль'] = вина['стиль'].replace('белый', 1)
Давайте проверим, как выглядит наш набор данных после этой манипуляции с данными. Для этого в блокноте Jupyter введите: Wines.head() . Результат ниже, обратите внимание на столбец «стиль».

Теперь пришло время разделить наш набор данных. Это деление делается на основе того, что мы хотим протестировать. В нашем случае после анализа данных мы хотим определить, является ли анализируемый образец красным или белым вином, верно? Итак, мы изначально разделим набор данных следующим образом: одна часть будет состоять только из столбца «стиль», а другая часть будет содержать остальные столбцы. До этого момента это разделение будет осуществляться посредством манипуляций с данными, без использования машинного обучения. Для этой цели мы можем использовать следующие команды:
x = Wines['style']
y = Wines.drop('style', axis =1)
Таким образом, переменная x получит столбец «стиль», а переменная y — остальные столбцы.

Теперь давайте импортируем модуль из библиотеки scikit-learn, который необходим нам для продолжения лабораторной работы. Мы будем использовать модуль train_test_split. Этот модуль выполнит новое разделение данных на основе данных, которые уже были разделены на предыдущем шаге. Это новое разделение подготовит наборы данных, отложив часть данных для изучения алгоритма и обучения классификации вин. Мы предоставим алгоритму 70% данных, которые уже классифицированы. Это позволит понять взаимосвязь между характеристиками образцов вина и их классификацией на красное или белое вино. Это оставляет 30% набора данных для тестирования алгоритма. Для этого мы будем использовать следующую последовательность команд:
из sklearn.model_selection import train_test_split
y_treino, y_teste, x_treino, x_teste = train_test_split(y,x, test_size = (0.3))

Теперь, когда данные разделены по мере необходимости, давайте двинемся дальше и импортируем алгоритм, который будет изучать данные и обучаться классификации образцов вина. Мы будем использовать алгоритм ExtraTreesClassifier, импортированный из модуля ансамбля scikit-learn. При создании модели переменная modelo получит параметризацию, которая будет использоваться алгоритмом. Мы будем вводить значения только для оценщиков, а остальные переменные будут использовать значения по умолчанию. Затем мы предоставим переменной modelo набор обучающих данных (y_train и x_train), подготовленный ранее для реального процесса обучения. После этого шага мы проверим точность алгоритма на тестовом наборе данных (x_test и y_test) и загрузим результат в переменную resultado. Высокая точность означает высокую правильность модели, тогда как низкая точность указывает на меньшую правильность. Для реализации описанных выше шагов мы будем использовать следующие строки кода:
из sklearn.ensemble import ExtraTreesClassifier
modelo = ExtraTreesClassifier(n_estimators=100)
modelo.fit(y_treino,x_treino)
resultado = modelo.score(y_teste, x_teste)
print( 'Точность: ', результат)
После обучения и тестирования алгоритма результат точности составил 0,9969230769230769, что представляет собой высокий уровень точности классификации выборок.
Теперь перейдем к тесту на прогнозирование. Мы собираемся отделить некоторые образцы из набора тестовых данных (y_test), чтобы алгоритм мог делать прогнозы для каждого из них, указывая, являются ли они образцами красного вина (0) или белого вина (1). Для этого теста прогнозирования мы будем использовать 15 выборок (от 100-го до 115-го) из y_test и загружать результаты в переменную previsoes. Далее мы проверим, что результаты прогнозов соответствуют фактической классификации соответствующих образцов, хранящейся в x_test. Для этого мы будем использовать следующие командные строки.
превизоэс =modelo.predict(y_teste[100:115])
Давайте заглянем внутрь переменной previsoe:

Теперь проверим, совпадают ли прогнозы с реальностью.

Неплохо! Для 15 проверенных образцов алгоритм классифицировал их на 100% правильно.
Ниже приведен весь использованный код:
импортировать pandas как pd
импортировать numpy как np
импортировать matplotlib.pyplot как plt
вина = pd.read_csv(r’‹file_path›’)
вина.head()
вина['стиль'] = вина['стиль'].replace('красный',0)
вина['стиль'] = вина['стиль'].replace('белый',1)
вина.head()
x = Wines['style']
y = Wines.drop('style', axis =1)
из sklearn.model_selection import train_test_split
y_treino, y_teste, x_treino, x_teste = train_test_split(y,x, test_size = (0.3))
из sklearn.ensemble import ExtraTreesClassifier
#создание модели:
modelo = ExtraTreesClassifier(n_estimators=100)
modelo.fit(y_treino,x_treino)
#printing results:
resultado = modelo.score(y_teste, x_teste)
print('Acuracia: ', resultado)
превизоэс =modelo.predict(y_teste[100:115])
предусмотрительно
x_teste[100:115]