Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Lab6 / ИССЛабораторная №6

.docx
Скачиваний:
0
Добавлен:
10.05.2024
Размер:
2.59 Mб
Скачать

Лабораторная работа №6

Цель работы: практически ознакомится с методами классификация данных с помощью Python.

Ход работы

Установили следующие библиотеки:

1. Создали csv файл с двумя столбцами, первый столбец значение, второй столбец метка, количество строк не менее 50. Это будет обучающей выборкой.

Рисунок 1 – Пример данных обучающей выборки

2. Создали второй файл, тестовые данные, содержащий два столбца: значение и метки, количество строк не менее 50. Метки необходимы для оценки точности классификации.

Рисунок 2 – Пример тестовые данных

3. Инициализировали обучающую и тестовую выборку и разбили её на столбцы.

4. Реализовали функцию для обучения, тестирования и вывода графиков результатов модели. Начали с обучения и тестирования.

5. Дополнили функцию реализовав вывод графиков.

6. С помощью трех различных классификаторов обучили и проверили модель на введенных данных.

7.Запустили полученную программу, получили значения точности нашей модели, полученной на основании тестовых данных, а также графики сравнения реального класса с выданным классификатором класса на каждой отметке наших значений.

Рисунок 3 – Пример тестовые данных

Выполнить следующие эксперименты:

А) Изменить test_size на 0.5, 0.7 и приведите полученные результаты.

Изменение значения параметра test_size в функции train_test_split влияет на размер тестовой выборки относительно общего размера данных. При test_size = 0.5 половина данных используется для тестирования, а другая половина для обучения. Модель обучается на 50% данных и проверяется на оставшихся 50%.

При test_size = 0.7, 70% данных используются для тестирования, а оставшиеся 30% - для обучения. Таким образом, модель обучается на более меньшем количестве данных и проверяется на большем объеме данных. Это может привести к менее переобученной модели, но также может увеличить разброс результатов.

Рисунок 4 – test_size на 0.5

Рисунок 4 – test_size на 0.7

Б) test_size задать 0.2. Изменить параметр max_iter у модели LogisticRegression на: n, n*0.5, n*2, где

n - количество значений в первом столбце обучающей выборки.

Возникающие предупреждения игнорируйте.

# Логистическая регрессия logistic_regression_model = LogisticRegression(max_iter=int(n)) classify_and_plot(logistic_regression_model, "Логистическая регрессия", x_train, y_train, test_features, test_labels)

Изменение параметра max_iter у модели LogisticRegression на основе значения n (количество значений в первом столбце обучающей выборки) позволяет управлять количеством итераций оптимизационного алгоритма, используемого для обучения модели. Этот параметр регулирует количество шагов, которые алгоритм может выполнять перед тем, как остановиться и будет считать оптимизацию завершенной.

Рисунок 5 – max_iter = n

# Логистическая регрессия logistic_regression_model = LogisticRegression(max_iter=int(n * 0.5)) classify_and_plot(logistic_regression_model, "Логистическая регрессия", x_train, y_train, test_features, test_labels)

Рисунок 5 – max_iter = n*0.5

# Логистическая регрессия logistic_regression_model = LogisticRegression(max_iter=int(n * 2)) classify_and_plot(logistic_regression_model, "Логистическая регрессия", x_train, y_train, test_features, test_labels)

Рисунок 5 – max_iter = n*2

В) test_size задать 0.2. Изменить параметр C (штраф за ошибку классификации) у модели SVC на: 1, 0.1, 10.

# Метод опорных векторов svm_model = SVC(C=1) classify_and_plot(svm_model, "Метод опорных векторов", x_train, y_train, test_features, test_labels)

Изменение параметра C у модели SVC, изменяет параметр регуляризации. Значение C обратно пропорционально силе регуляризации: более низкое значение C означает более сильную регуляризацию, тогда как более высокое значение C означает менее сильную регуляризацию.

Рисунок 6 – SVC =1

# Метод опорных векторов svm_model = SVC(C=0.1) classify_and_plot(svm_model, "Метод опорных векторов", x_train, y_train, test_features, test_labels)

Рисунок 7 – SVC =0.1

# Метод опорных векторов svm_model = SVC(C=10) classify_and_plot(svm_model, "Метод опорных векторов", x_train, y_train, test_features, test_labels)

Рисунок 8 – SVC = 10

Г) test_size задать 0.2. Задать параметры модели RandomForestClassifier: n_estimators=k, max_depth=1, random_state=42, где k принимает значения: 1, 10, 100.

# Случайный лес random_forest_model = RandomForestClassifier(n_estimators=1, max_depth=1, random_state=42) classify_and_plot(random_forest_model,"Случайный лес", x_train, y_train, test_features, test_labels)

Изменение параметра n_estimators у модели RandomForestClassifier, меняется количество деревьев в лесу. Этот параметр влияет на сложность модели и ее способность к обобщению.

При установке n_estimators = 1 создается модель случайного леса, состоящая из одного дерева. Это простая модель, которая может недообучиться из-за недостаточного количества деревьев.

Установка n_estimators = 100 создает еще более сложную модель с 100 деревьями. Это дает хорошие результаты, но может быть избыточно, если данных недостаточно для такого количества деревьев.

Рисунок 9 – k=1

# Случайный лес random_forest_model = RandomForestClassifier(n_estimators=10, max_depth=1, random_state=42) classify_and_plot(random_forest_model,"Случайный лес", x_train, y_train, test_features, test_labels)

Рисунок 10 – k=10

# Случайный лес random_forest_model = RandomForestClassifier(n_estimators=100, max_depth=1, random_state=42) classify_and_plot(random_forest_model,"Случайный лес", x_train, y_train, test_features, test_labels)

Рисунок 11 – k=100

Листинг программы:

import pandas as pd from sklearn.linear_model import LogisticRegression from sklearn.svm import SVC from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import accuracy_score from sklearn.model_selection import train_test_split import matplotlib.pyplot as plt # Загрузка данных из CSV файлов data = pd.read_csv("Laba6set.csv", header=None, sep=";") test_data = pd.read_csv("Laba6Test.csv", header=None, sep=";") # Разделение данных features = data.iloc[:, 0] labels = data.iloc[:, 1] # Разделение на обучающую и тестовую выборку x_train, x_test, y_train, y_test = train_test_split(features, labels, test_size=0.2, random_state=42) # Получение количества значений в первом столбце обучающей выборки n = len(x_train) # Тестовые данные test_features = test_data.iloc[:, 0] test_labels = test_data.iloc[:, 1] def classify_and_plot(model, model_name, x_train, y_train, test_features, test_labels): # Создание модели model_instance = model # Обучение модели model_instance.fit(x_train.values.reshape(-1, 1), y_train) # Прогнозирование меток для тестовых данных predictions = model_instance.predict(test_features.values.reshape(-1, 1)) # Оценка точности accuracy = accuracy_score(test_labels, predictions) # Вывод точности print(f"Точность модели {model_name}: {accuracy:.2f}") # Создание DataFrame с реальными и предсказанными метками comparsion_df = pd.DataFrame({"Реальные": test_labels, "Предсказанные": predictions}) # График температуры(слева) plt.subplot(1, 2, 1) plt.plot(test_features, color="green", label="Температура") plt.title("График температуры") plt.xlabel("Индекс объекта") plt.ylabel("Температура") plt.legend() #График сравнения реальных и предсказанных меток(справа) plt.subplot(1, 2, 2) plt.plot(comparsion_df['Реальные'], color="blue", label="Реальные") plt.scatter(comparsion_df.index, comparsion_df["Предсказанные"], color='red', label="Предсказанные") plt.title(f'Сравнение реальных и предсказанных меток для {model_name}') plt.legend() plt.xlabel('Индекс объекта') plt.ylabel('Класс') plt.tight_layout() plt.show() # Логистическая регрессия logistic_regression_model = LogisticRegression(max_iter=int(n * 2)) classify_and_plot(logistic_regression_model, "Логистическая регрессия", x_train, y_train, test_features, test_labels) # Метод опорных векторов svm_model = SVC(C=10) classify_and_plot(svm_model, "Метод опорных векторов", x_train, y_train, test_features, test_labels) # Случайный лес random_forest_model = RandomForestClassifier(n_estimators=100, max_depth=1, random_state=42) classify_and_plot(random_forest_model,"Случайный лес", x_train, y_train, test_features, test_labels)

Вывод: в ходе лабораторной работы ознакомились с методами классификация данных с помощью Python.