← Назад к вопросам

Сколько фич было в датасете?

2.0 Middle🔥 181 комментариев
#REST API и HTTP

Комментарии (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 для нейросетей
  • Отбор признаков: удаляйте коррелированные и неинформативные признаки
  • Проверяйте размер: большое количество признаков → риск переобучения

Ответ на ваш вопрос должен быть конкретным числом, зависящим от вашего датасета. Используйте приведённые выше методы для определения точного количества фич.

Сколько фич было в датасете? | PrepBro