diff --git a/almukhammetov_bulat_lab_6/README.md b/almukhammetov_bulat_lab_6/README.md new file mode 100644 index 0000000..40aae1a --- /dev/null +++ b/almukhammetov_bulat_lab_6/README.md @@ -0,0 +1,82 @@ +Вариант 2 + +Задание: +Использовать нейронную сеть(четные варианты –MLPRegressor, нечетные –MLPClassifier)для данных из таблицы 1 по варианту, самостоятельно сформулировав задачу. Интерпретировать результаты и оценить, насколько хорошо +она подходит для решения сформулированной вами задачи. + +Данные: +Данный набор данных использовался во второй главе недавней книги Аурелиена Жерона "Практическое машинное обучение с помощью Scikit-Learn и TensorFlow". Он служит отличным введением в реализацию алгоритмов машинного обучения, потому что требует минимальной предварительной обработки данных, содержит легко понимаемый список переменных и находится в оптимальном размере, который не слишком мал и не слишком большой. + +Данные содержат информацию о домах в определенном районе Калифорнии и некоторую сводную статистику на основе данных переписи 1990 года. Следует отметить, что данные не прошли предварительную очистку, и для них требуются некоторые этапы предварительной обработки. Столбцы включают в себя следующие переменные, их названия весьма наглядно описывают их суть: + +долгота longitude + +широта latitude + +средний возраст жилья median_house_value + +общее количество комнат total_rooms + +общее количество спален total_bedrooms + +население population + +домохозяйства households + +медианный доход median_income + +Запуск: +Запустите файл lab6.py + +Описание программы: + +1. Загрузка данных: + - Программа начинается с загрузки данных из файла 'housing.csv' с использованием библиотеки pandas. + - Пропущенные значения в данных удаляются с помощью `dropna()`. + +2. Выбор признаков и целевой переменной: + - Из загруженных данных выбираются признаки (features) и целевая переменная (target). + - В данном случае, признаки включают 'total_rooms', 'total_bedrooms', 'population', 'households', и 'median_income', а целевая переменная - 'median_house_value'. + +3. Разделение данных: + - Данные разделяются на тренировочный и тестовый наборы с использованием `train_test_split`. + - В данной программе 90% данных используются для тренировки и 10% для тестирования. + +4. Масштабирование признаков: + - Признаки и целевая переменная масштабируются с использованием `StandardScaler`, чтобы улучшить производительность нейронной сети. + +5. Создание и обучение MLPRegressor: + - Создается модель MLPRegressor с заданными параметрами, такими как размеры скрытых слоев (hidden_layer_sizes), количество итераций (max_iter), и начальное состояние (random_state). + - Модель обучается на тренировочных данных с использованием `fit`. + +6. Предсказания и оценка производительности: + - Модель делает предсказания на тестовых данных с использованием `predict`. + - Оцениваются различные метрики производительности, такие как среднеквадратичная ошибка (MSE), среднеабсолютное отклонение (MAE) и коэффициент детерминации (R^2). + +7. Вывод результатов: + - Результаты оценки модели выводятся на экран, включая среднеквадратичную ошибку, среднеабсолютное отклонение и коэффициент детерминации. + +Результаты: + +![Alt text](image.png) + +![Alt text](image-1.png) + +Выводы: + +1. Среднеквадратичная ошибка (MSE): 69877.11% + - Эта метрика измеряет среднеквадратичное отклонение предсказанных значений от фактических. Чем меньше значение MSE, тем лучше. В данном случае, значение 69877.11% ОГРОМНО, что может свидетельствовать о значительном разбросе между фактическими и предсказанными значениями. + +2. Среднеабсолютное отклонение (MAE): 49654.91% + - MAE измеряет среднее абсолютное отклонение предсказанных значений от фактических. Аналогично, чем меньше значение MAE, тем лучше. Здесь значение 49654.91% также довольно больше. + +3. Коэффициент детерминации (R^2): 64.58% + - R^2 измеряет, насколько хорошо модель соответствует вариации в данных. Значение 64.58% говорит о том, что модель объясняет 64.58% дисперсии в целевой переменной. Это можно считать средним результатом. + +Интерпретация результатов: + +- В данном случае, модель MLPRegressor, обученная на выбранных признаках, не показала высокую точность предсказания целевой переменной (median_house_value). +- Значения метрик (MSE, MAE, R^2) указывают на некоторую степень ошибки модели. + +Общий вывод: +- В данной программе представленный MLPRegressor не дал оптимальных результатов. Дальнейшие исследования и настройка параметров могут потребоваться для улучшения точности предсказаний модели. \ No newline at end of file diff --git a/almukhammetov_bulat_lab_6/image-1.png b/almukhammetov_bulat_lab_6/image-1.png new file mode 100644 index 0000000..e546cd0 Binary files /dev/null and b/almukhammetov_bulat_lab_6/image-1.png differ diff --git a/almukhammetov_bulat_lab_6/image.png b/almukhammetov_bulat_lab_6/image.png new file mode 100644 index 0000000..097d2a7 Binary files /dev/null and b/almukhammetov_bulat_lab_6/image.png differ diff --git a/almukhammetov_bulat_lab_6/lab6.py b/almukhammetov_bulat_lab_6/lab6.py new file mode 100644 index 0000000..fe6958c --- /dev/null +++ b/almukhammetov_bulat_lab_6/lab6.py @@ -0,0 +1,49 @@ +# Использовать нейронную сеть(четные варианты –MLPRegressor, нечетные –MLPClassifier)для данных из таблицы 1 +# по варианту, самостоятельно сформулировав задачу. Интерпретировать результаты и оценить, насколько хорошо +# она подходит для решения сформулированной вами задачи. + +# Вариант 2 MLPRegressor + +# Импортируем необходимые библиотеки +import pandas as pd +from sklearn.model_selection import train_test_split +from sklearn.neural_network import MLPRegressor +from sklearn.preprocessing import StandardScaler +from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score + +import math + +# Загрузим данные +df = pd.read_csv('housing.csv') +df.dropna(inplace=True) + +# Выберем признаки и целевую переменную (доход) +features_list = ['total_rooms', 'total_bedrooms', 'population', 'households', 'median_income'] +features = df[features_list].copy() +target = df['median_house_value'].copy() + +# Разделим данные на тренировочный и тестовый наборы +X_train, X_test, y_train, y_test = train_test_split(features, target, test_size=0.1, random_state=42) + +# Масштабируем признаки и целевую переменную +scaler = StandardScaler() +X_train_scaled = scaler.fit_transform(X_train) +X_test_scaled = scaler.transform(X_test) + +# Создаем модель MLPRegressor +mlp_regressor = MLPRegressor(hidden_layer_sizes=(100, 50), max_iter=1500, random_state=42) + +# Обучаем модель на тренировочных данных +mlp_regressor.fit(X_train_scaled, y_train) + +# Делаем предсказания на тестовых данных +predictions = mlp_regressor.predict(X_test_scaled) + +# Оцениваем производительность модели +mse = mean_squared_error(y_test, predictions) +mae = mean_absolute_error(y_test, predictions) +r2 = r2_score(y_test, predictions) + +print(f"Среднеквадратичная ошибка (MSE): {round(math.sqrt(mse), 2)}%") +print(f"Среднеабсолютное отклонение (MAE): {round(mae, 2)}%") +print(f"Коэффициент детерминации (R^2): {round(r2, 4) * 100}%")