Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Сколько фич было в датасете?
Этот вопрос требует уточнения контекста, однако я расскажу о том, как определить количество признаков (фич) в датасете и работать с ними на практике.
Определение количества признаков
Количество признаков (features) в датасете зависит от источника данных. Если вы работаете с таблицей данных, это количество столбцов минус целевая переменная (target).
Вот пример определения количества фич с использованием pandas:
import pandas as pd
import numpy as np
# Загружаем датасет
df = pd.read_csv("data.csv")
# Получаем количество фич (все столбцы кроме целевой переменной)
num_features = df.shape[1] - 1 # минус target
print(f"Количество признаков: {num_features}")
# Или более явно:
feature_columns = df.drop(columns=["target"]).columns
print(f"Признаки: {feature_columns}")
print(f"Всего признаков: {len(feature_columns)}")
Анализ датасета
Для полного анализа датасета рекомендуется:
# Информация о датасете
print(df.info()) # Тип данных, количество non-null значений
print(df.describe()) # Статистика по числовым признакам
# Размер датасета
rows, cols = df.shape
print(f"Строк: {rows}, Столбцов: {cols}")
# Типы данных
data_types = df.dtypes
print(f"Числовые признаки: {data_types[data_types != object].shape[0]}")
print(f"Категориальные признаки: {data_types[data_types == object].shape[0]}")
Работа с признаками в scikit-learn
При использовании scikit-learn для обучения моделей:
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestClassifier
# Отделяем признаки от целевой переменной
X = df.drop(columns=["target"])
y = df["target"]
print(f"X.shape: {X.shape}") # (n_samples, n_features)
print(f"Количество признаков: {X.shape[1]}")
# Разделение на обучающую и тестовую выборки
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# Масштабирование признаков
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# Обучение модели
model = RandomForestClassifier(n_features_to_select=10) # используем топ 10 признаков
model.fit(X_train_scaled, y_train)
print(f"Количество использованных признаков: {model.n_features_in_}")
Отбор и сокращение признаков
Основные техники для работы с признаками:
from sklearn.feature_selection import SelectKBest, f_classif
# Выбираем лучшие 10 признаков
selector = SelectKBest(f_classif, k=10)
X_selected = selector.fit_transform(X_train, y_train)
print(f"Выбрано признаков: {X_selected.shape[1]}")
# Определяем какие признаки выбраны
selected_features = X_train.columns[selector.get_support()]
print(f"Выбранные признаки: {list(selected_features)}")
# Важность признаков в древесных моделях
feature_importance = pd.Series(
model.feature_importances_,
index=X_train.columns
).sort_values(ascending=False)
print(f"Топ-5 важных признаков:")
print(feature_importance.head())
Практические рекомендации
- Всегда изучайте датасет перед началом работы:
df.info(),df.describe(),df.head() - Обработка пропусков: используйте
fillna(),dropna()или импутацию - Нормализация:
StandardScalerдля алгоритмов расстояния,MinMaxScalerдля нейросетей - Отбор признаков: удаляйте коррелированные и неинформативные признаки
- Проверяйте размер: большое количество признаков → риск переобучения
Ответ на ваш вопрос должен быть конкретным числом, зависящим от вашего датасета. Используйте приведённые выше методы для определения точного количества фич.