IIS_2023_1/tsyppo_anton_lab_6/main.py
2023-12-06 15:14:07 +04:00

69 lines
3.4 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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}")