Merge pull request 'Add Lab 5' (#192) from almukhammetov_bulat_lab_5 into main

Reviewed-on: http://student.git.athene.tech/Alexey/IIS_2023_1/pulls/192
This commit is contained in:
Alexey 2023-12-07 15:50:59 +04:00
commit d86f62d087
5 changed files with 20798 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 KiB

View File

@ -0,0 +1,89 @@
Вариант 2
Задание:
Использовать регрессию по варианту для данных из таблицы 1 по варианту(таблица 10), самостоятельно сформулировав задачу. Оценить, насколько хорошо она подходит для решения сформулированной вами задачи
Вариант 2 Логистическая регрессия
Предсказание медианной стоимости жилья на основе всех доступных признаков.
Данные:
Данный набор данных использовался во второй главе недавней книги Аурелиена Жерона "Практическое машинное обучение с помощью Scikit-Learn и TensorFlow". Он служит отличным введением в реализацию алгоритмов машинного обучения, потому что требует минимальной предварительной обработки данных, содержит легко понимаемый список переменных и находится в оптимальном размере, который не слишком мал и не слишком большой.
Данные содержат информацию о домах в определенном районе Калифорнии и некоторую сводную статистику на основе данных переписи 1990 года. Следует отметить, что данные не прошли предварительную очистку, и для них требуются некоторые этапы предварительной обработки. Столбцы включают в себя следующие переменные, их названия весьма наглядно описывают их суть:
долгота longitude
широта latitude
средний возраст жилья median_house_value
общее количество комнат total_rooms
общее количество спален total_bedrooms
население population
домохозяйства households
медианный доход median_income
Запуск:
Запустите файл lab5.py
Описание программы:
Загрузка данных:
1. Используется библиотека pandas для чтения данных из CSV-файла "housing.csv" и создания DataFrame.
Выбор признаков и целевой переменной:
2. Определяются признаки (X) и целевая переменная (y), где целевой переменной является "median_house_value", а признаками — все столбцы, за исключением "longitude", "latitude" и "ocean_proximity".
Обработка пропущенных значений:
3. Применяется SimpleImputer с стратегией 'mean' для заполнения пропущенных значений средними значениями в признаках.
4. Применяется train_test_split для разбиения данных на обучающий, валидационный и тестовый наборы.
Создание и обучение модели линейной регрессии:
5. Инициализируется и обучается модель LinearRegression на обучающем наборе.
Вывод коэффициентов и пересечения:
6. Выводятся коэффициенты и пересечение линейной регрессии, найденные моделью в процессе обучения.
Предсказание значений на тестовом наборе:
7. Производится предсказание значений целевой переменной на тестовом наборе с использованием обученной модели.
Оценка модели:
1. Рассчитываются значения R^2 для обучающего, валидационного и тестового наборов для оценки соответствия модели данным.
Оценка качества предсказаний:
2. Рассчитываются среднеквадратичная ошибка (MSE) и корень из среднеквадратичной ошибки (RMSE) для оценки точности предсказаний.
Визуализация предсказаний:
3. Строится график рассеяния для визуального сравнения фактических и предсказанных значений на тестовом наборе.
Результаты:
![Alt text](1.png)
Выводы:
Оценка результатов:
1. Коэффициенты линейной регрессии:
- Полученные коэффициенты для каждого признака показывают, как сильно он влияет на целевую переменную (медианную стоимость жилья). Например, положительные коэффициенты, такие как 1.91e+03 и 1.27e+02, указывают на положительную корреляцию с целевой переменной, тогда как отрицательные, например, -1.89e+01 и -3.25e+01, указывают на отрицательную корреляцию.
2. Пересечение линейной регрессии:
- Значение пересечения (-47499.49) представляет оценку целевой переменной, когда все признаки равны нулю.
3. R^2 (коэффициент детерминации):
- R^2 измеряет, насколько хорошо модель соответствует данным. Значения около 0.56 для обучающего, валидационного и тестового наборов говорят о том, что модель объясняет примерно 56% дисперсии в данных. Это приемлемый результат, но есть пространство для улучшений.
4. Среднеквадратичная ошибка (MSE) и корень из среднеквадратичной ошибки (RMSE):
- MSE составляет 5,931,235,118.49, что является среднеквадратичной разницей между фактическими и предсказанными значениями. RMSE (77014.51) представляет собой среднюю ошибку в предсказаниях в единицах целевой переменной.
Общий вывод: Результаты говорят о том, что модель демонстрирует неплохое соответствие данным, но есть возможность для улучшений.

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,68 @@
# Использовать регрессию по варианту для данных из таблицы 1 по варианту(таблица 10), самостоятельно
# сформулировав задачу. Оценить, насколько хорошо она подходит для решения сформулированной вами задачи
# Вариант 2 Логистическая регрессия
# Предсказание медианной стоимости жилья на основе всех доступных признаков.
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import math
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score
from sklearn.model_selection import train_test_split
from sklearn.impute import SimpleImputer
# Загрузка данных
df = pd.read_csv('housing.csv')
# Определение признаков (X) и целевой переменной (y)
X = df.drop(columns=["median_house_value", "longitude", "latitude", "ocean_proximity"]).astype(float)
y = df['median_house_value'].astype(float)
# Обработка пропущенных значений с использованием SimpleImputer
imputer = SimpleImputer(strategy='mean')
X = imputer.fit_transform(X)
# Разделение данных на обучающий, валидационный и тестовый наборы
X_train, X_temp, y_train, y_temp = train_test_split(X, y, test_size=0.4, random_state=0)
X_val, X_test, y_val, y_test = train_test_split(X_temp, y_temp, test_size=0.5, random_state=0)
# Создание и обучение модели линейной регрессии
linear_model = LinearRegression()
linear_model.fit(X_train, y_train)
# Вывод коэффициентов и пересечения
print(f'Коэффициенты линейной регрессии: {linear_model.coef_}')
print(f'Пересечение линейной регрессии: {linear_model.intercept_}')
# Предсказание значений на тестовом наборе
y_pred = linear_model.predict(X_test)
# Оценка модели
train_score = linear_model.score(X_train, y_train)
val_score = linear_model.score(X_val, y_val)
test_score = linear_model.score(X_test, y_test)
print(f'R^2 на обучающем наборе: {train_score}')
print(f'R^2 на валидационном наборе: {val_score}')
print(f'R^2 на тестовом наборе: {test_score}')
# Оценка качества предсказаний
MSE = np.square(np.subtract(y_test, y_pred)).mean()
RMSE = math.sqrt(MSE)
print(f'Среднеквадратичная ошибка: {MSE}')
print(f'Корень из среднеквадратичной ошибки: {RMSE}')
# Визуализация предсказаний
plt.figure(figsize=(8, 6), dpi=80)
plt.scatter(y_test, y_pred, alpha=0.2, color='slateblue')
m, b = np.polyfit(y_test, y_pred, 1)
plt.plot(y_test, m * y_test + b, color='midnightblue')
plt.xlabel('Фактическое значение (тестовый набор)', fontsize=14)
plt.ylabel('Предсказанное значение (тестовый набор)', fontsize=14)
plt.title('Линейная регрессия: предсказанные и фактические значения (тестовый набор)', fontsize=16)
plt.grid(linewidth=0.5)
plt.show()