69 lines
3.4 KiB
Python
69 lines
3.4 KiB
Python
|
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}")
|