39 lines
1.8 KiB
Python
39 lines
1.8 KiB
Python
|
import pandas as pd
|
|||
|
from sklearn.model_selection import train_test_split
|
|||
|
from sklearn.tree import DecisionTreeClassifier
|
|||
|
from sklearn.metrics import accuracy_score, classification_report
|
|||
|
|
|||
|
# Загрузка данных
|
|||
|
data = pd.read_csv("train_bikes.csv", sep=',').dropna()
|
|||
|
|
|||
|
# Подготовка данных
|
|||
|
# Здесь определяются пороги для категорий спроса
|
|||
|
low_demand_threshold = 100 # Порог для "Низкого спроса"
|
|||
|
medium_demand_threshold = 300 # Порог для "Среднего спроса"
|
|||
|
|
|||
|
# Создание новой категориальной переменной на основе порогов
|
|||
|
data['demand_category'] = pd.cut(data['count'], bins=[0, low_demand_threshold, medium_demand_threshold, float('inf')],
|
|||
|
labels=["Low Demand", "Medium Demand", "High Demand"])
|
|||
|
|
|||
|
# Выделение признаков и целевой переменной
|
|||
|
X = data.drop(['count', 'demand_category', 'datetime'], axis=1) # Удаление ненужных столбцов
|
|||
|
y = data['demand_category']
|
|||
|
|
|||
|
# Разделение данных на обучающий и тестовый наборы
|
|||
|
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
|
|||
|
|
|||
|
# Создание и обучение модели дерева решений
|
|||
|
clf = DecisionTreeClassifier(random_state=42)
|
|||
|
clf.fit(X_train, y_train)
|
|||
|
|
|||
|
# Предсказание категорий спроса на тестовом наборе
|
|||
|
y_pred = clf.predict(X_test)
|
|||
|
|
|||
|
# Оценка качества модели
|
|||
|
accuracy = accuracy_score(y_test, y_pred)
|
|||
|
print(f"Accuracy: {accuracy:.2f}")
|
|||
|
|
|||
|
# Вывод отчета о классификации
|
|||
|
report = classification_report(y_test, y_pred)
|
|||
|
print(report)
|