IIS_2023_1/tsyppo_anton_lab_6/main.py

69 lines
3.4 KiB
Python
Raw Permalink Normal View History

2023-12-06 15:14:07 +04:00
import pandas as pd
from sklearn.neural_network import MLPRegressor, MLPClassifier
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error, accuracy_score
import numpy as np
# Загрузим данные из файла Hostel.csv
data = pd.read_csv("Hostel.csv")
# Выберем необходимые признаки
selected_features = ['summary.score', 'atmosphere', 'staff']
# Исключим строки с отсутствующими значениями в выбранных признаках
data = data.dropna(subset=selected_features + ["price.from"])
# Преобразуем текстовый признак "Distance" в числовой
data['Distance'] = data['Distance'].str.replace('km from city centre', '').astype(float)
# Выделим признаки и целевую переменную для регрессии
X_reg = data[selected_features + ["Distance"]]
y_reg = data["price.from"]
# Разделим данные на обучающий и тестовый наборы для регрессии
X_train_reg, X_test_reg, y_train_reg, y_test_reg = train_test_split(X_reg, y_reg, test_size=0.01, random_state=42)
# Нормализуем признаки для регрессии
scaler_reg = StandardScaler()
X_train_scaled_reg = scaler_reg.fit_transform(X_train_reg)
X_test_scaled_reg = scaler_reg.transform(X_test_reg)
# Инициализируем и обучим MLPRegressor
model_reg = MLPRegressor(hidden_layer_sizes=(100, 50), max_iter=5000, random_state=42)
model_reg.fit(X_train_scaled_reg, y_train_reg)
# Предсказание на тестовом наборе для регрессии
y_pred_reg = model_reg.predict(X_test_scaled_reg)
# Оценим качество модели для регрессии
mse_reg = mean_squared_error(y_test_reg, y_pred_reg)
rmse_reg = np.sqrt(mse_reg)
print(f"Среднеквадратичная ошибка (MSE) для регрессии: {mse_reg}")
print(f"Корень из среднеквадратичной ошибки (RMSE) для регрессии: {rmse_reg}")
# Выделим признаки и целевую переменную для классификации
X_cls = data[selected_features + ["Distance"]]
y_cls = (data["price.from"] > data["price.from"].median()).astype(int) # Binary classification
# Разделим данные на обучающий и тестовый наборы для классификации
X_train_cls, X_test_cls, y_train_cls, y_test_cls = train_test_split(X_cls, y_cls, test_size=0.01, random_state=42)
# Нормализуем признаки для классификации
scaler_cls = StandardScaler()
X_train_scaled_cls = scaler_cls.fit_transform(X_train_cls)
X_test_scaled_cls = scaler_cls.transform(X_test_cls)
# Инициализируем и обучим MLPClassifier
model_cls = MLPClassifier(hidden_layer_sizes=(100, 50), max_iter=2000, random_state=42)
model_cls.fit(X_train_scaled_cls, y_train_cls)
# Предсказание на тестовом наборе для классификации
y_pred_cls = model_cls.predict(X_test_scaled_cls)
# Оценим качество модели для классификации
accuracy_cls = accuracy_score(y_test_cls, y_pred_cls)
print(f"Точность (Accuracy) для классификации: {accuracy_cls}")