# Использовать регрессию по варианту для данных из таблицы 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()