Название | Нейросети: создание и оптимизация будущего |
---|---|
Автор произведения | Джеймс Девис |
Жанр | |
Серия | |
Издательство | |
Год выпуска | 2025 |
isbn |
Таким образом, преобразование и нормализация данных, разделение на тренировочные и тестовые наборы, а также применение кросс-валидации играют ключевую роль в разработке эффективных моделей машинного обучения и нейронных сетей, обеспечивая надёжность и стабильность результатов.
Давайте рассмотрим пример кода, иллюстрирующий этапы подготовки данных, включая преобразование, нормализацию, разделение на тренировочные и тестовые наборы, а также кросс-валидацию. Для примера используем набор данных `Iris` из библиотеки `scikit-learn`.
Подготовка данных
1. Загрузка данных: используем датасет `Iris` и обрабатываем данные.
2. Обработка пропусков: Заменяем пропущенные значения на медианные.
3. Кодирование категориальных переменных: Кодируем целевой признак.
4. Нормализация данных: Применим Min-Max нормализацию.
5. Разделение на тренировочные и тестовые наборы: Разделяем данные для оценки.
6. Кросс-валидация: Применим k-fold кросс-валидацию.
Пример кода
```python
import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, KFold, cross_val_score
from sklearn.preprocessing import MinMaxScaler, StandardScaler, LabelEncoder
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
# Шаг 1: Загрузка и подготовка данных
data = load_iris()
df = pd.DataFrame(data.data, columns=data.feature_names)
df['target'] = data.target
# Шаг 2: Обработка пропущенных данных (для примера добавим пропуски)
df.iloc[0, 0] = np.nan # добавляем пропущенное значение для примера
df.fillna(df.median(), inplace=True) # заполняем медианными значениями
# Шаг 3: Кодирование категориального признака (в данном случае уже числовой)
# Для других данных LabelEncoder может быть полезен
# Шаг 4: Нормализация данных
scaler = MinMaxScaler()
df[data.feature_names] = scaler.fit_transform(df[data.feature_names])
# Шаг 5: Разделение данных на тренировочные и тестовые наборы
X = df.drop('target', axis=1)
y = df['target']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# Шаг 6: Обучение модели и оценка
model = RandomForestClassifier(random_state=42)
model.fit(X_train, y_train)
predictions = model.predict(X_test)
accuracy = accuracy_score(y_test, predictions)
print(f'Точность на тестовом наборе: {accuracy:.2f}')
# Шаг 7: Кросс-валидация
kf = KFold(n_splits=5, shuffle=True, random_state=42)
cv_scores = cross_val_score(model, X, y, cv=kf)
print(f'Средняя точность при кросс-валидации: {cv_scores.mean():.2f}')
```
Описание кода
– Загрузка данных: Набор данных `Iris` предоставляет четыре признака и один целевой признак – вид цветка.
– Обработка пропусков: Пример добавляет пропущенные значения в первый признак и затем заменяет их на медианное значение по этому признаку.
– Кодирование категориальных переменных: `LabelEncoder` может использоваться для преобразования категорий в числовой формат (не требуется в этом наборе данных).
– Нормализация данных: Min-Max нормализация применяется ко всем признакам, чтобы привести их к диапазону [0, 1]. Это улучшает процесс обучения, делая данные более однородными.
– Разделение