Привет, друзья! 👾 Сегодня разберем, как обучить модель машинного обучения на реальном примере.
Задача: предсказать категорию цены авто (дешевое/среднее/дорогое) на основе характеристик.
🔧 Код-лайфхак
# 1. Подготовка данных
df_prepared = df.copy() # Работаем с копией, чтобы не сломать исходник
# 2. Делим данные на "учебник" и "экзамен"
from sklearn.tree import DecisionTreeClassifier
x = df_prepared.drop('price_category', axis=1) # Удаляем целевую переменную из признаков
y = df_prepared['price_category'] # То, что предсказываем
# 3. Разделение с сохранением баланса (стратификация)
x_train, x_test, y_train, y_test = train_test_split(
x, y,
test_size=0.3,
random_state=42 # Чтобы результат был воспроизводим
)
# 4. Создаем "умное дерево" с защитой от переобучения
model = DecisionTreeClassifier( random_state=42)
model.fit(x_train, y_train) # Обучаемся на тренировочных данных
# 5. Проверяем точность
print(f"Точность на тесте: {accuracy_score(y_test, model.predict(x_test)):.2f}")
# 6. Обработка фичей с низкой важностью
# 6.1. Мы вычисляем важности фичей для обученной модели.
initial_importances = model.feature_importances_
# 6.2. Находим индексы тех фичей, важность которых равна нулю.
idx = np.where(initial_importances == 0)[0]
# np.where возвращает кортеж, поэтому [0] нужно, чтобы взять именно массив индексов.
# 6.3. Выбираем названия колонок
feature_to_drop = x_train.columns[idx].to_list()
# Используя индексы idx, выбираем названия колонок из x_train.
to_list() преобразует их в список.
# 6.4. Удаляем столбцы с нулевой важностью
x_train_reduced = x_train.drop(columns=feature_to_drop)
x_test_reduced = x_test.drop(columns=feature_to_drop)
# 7. Нужно переобучить модель
model = DecisionTreeClassifier( random_state=42)
model.fit(x_train_reduced, y_train)