Анализ и визуализация данных на языке R

Нейронные сети в R

В данной лекции рассматривается практическое применение нейронных сетей для решения задачи регрессии на языке R. В качестве примера используется датасет, содержащий характеристики бетона (содержание цемента, воды, добавок и т.д.), где целевой переменной выступает прочность материала. Лектор демонстрирует полный цикл работы: от загрузки и нормализации данных в Power BI до построения, обучения и визуализации нейронной сети. Особое внимание уделяется сравнению архитектур сетей (количество нейронов в скрытом слое) и анализу ошибки прогноза (RMSE).

Основные мысли

1. Регрессия vs Классификация: В отличие от предыдущих примеров (классификация), здесь решается задача регрессии — предсказание непрерывной числовой величины (прочности бетона).
2. Обязательная нормализация: Нейронные сети критически требовательны к масштабу данных — все признаки должны быть приведены к единому диапазону (например, от 0 до 1).
3. Механизм работы сети: Нейронная сеть состоит из слоев (входной, скрытые, выходной). В каждом узле происходит взвешенное суммирование входов, после чего применяется нелинейная функция активации для захвата сложных зависимостей.
4. Высокая вычислительная сложность: Обучение сети (подбор весов) — ресурсоемкая задача, особенно при сложной архитектуре (много слоев и нейронов). Используются модификации градиентного спуска для ускорения.
5. Компромисс «Сложность — Переобучение»: Увеличение числа нейронов в скрытом слое снижает ошибку на обучающей выборке, но повышает риск переобучения (модель теряет способность хорошо обобщать новые данные). Необходим баланс.
Показывать лекцию целиком
Краткое изложение

Лекция начинается с постановки задачи: необходимо предсказать прочность бетона (Strangs) на основе 8 характеристик смеси (цемент, вода, добавки). Данные загружаются в Power BI, где происходит стандартная процедура очистки (замена разделителя «точка» на «запятую») и смена типа данных на десятичное число.

Далее лектор переходит к написанию R-скрипта внутри Power BI:
1. Нормализация: Создается функция normalize, приводящая все значения к диапазону [0,1].
2. Разделение выборки: Данные делятся на обучающую (первые ~70%, 773 строки) и тестовую (остальные ~30%) выборки.
3. Загрузка библиотеки: Используется пакет neuralnet.
4. Построение модели: Модель обучается на тренировочных данных. Синтаксис: neuralnet(Strangs ~ Цемент + Вода + ..., data = ConcretTrain).
5. Предсказание: Обученная модель применяется к тестовой выборке (без целевого столбца) через функцию compute().
6. Оценка качества: Создается столбец разницы между реальной и предсказанной прочностью, возведенной в квадрат. Рассчитывается метрика RMSE (Root Mean Square Error) — среднеквадратичная ошибка (в примере получилось около 0.1 или 10% в нормализованном масштабе).
7. Визуализация и эксперименты: Лектор визуализирует архитектуру сети:
o 1 нейрон в скрытом слое: простая сеть, все веса, кроме «воды», отрицательные.
o 5 нейронов: ошибка падает в 2 раза, но время обучения и число шагов растет (~26 000 шагов).
o 3 нейрона: признаются оптимальным балансом между скоростью, точностью и риском переобучения.

В конце упоминается пакет Caret как универсальный инструмент для машинного обучения в R (аналог sklearn в Python).

Выводы

1. Нейронные сети эффективны для регрессии: Они успешно справляются с предсказанием прочности бетона на основе химического состава, что имеет практическую ценность (подбор компонентов под заданную прочность).
2. Качество зависит от предобработки: Без нормализации данных нейронная сеть работать не будет или будет давать некорректные результаты.
3. Сложность сети — это палка о двух концах: Усложнение архитектуры (больше нейронов) повышает точность на обучении, но требует больше ресурсов и может привести к переобучению. Нет единственно верной архитектуры — ее нужно подбирать экспериментально.
4. Интеграция R и Power BI: Показана возможность встраивания R-скриптов для построения сложных моделей машинного обучения непосредственно в среду бизнес-аналитики Power BI.
5. Визуализация помогает пониманию: Графическое отображение нейронной сети с весами позволяет интерпретировать, какие факторы (например, вода) вносят вклад в результат.

Вопросы для самопроверки

1. Чем задача регрессии, рассмотренная в лекции, принципиально отличается от задачи классификации, которая упоминалась ранее?
2. Почему перед подачей данных в нейронную сеть требуется их нормализация? Что произойдет, если этого не сделать?
3. Как в R-скрипте разделяются данные на обучающую и тестовую выборки? Какая пропорция была использована и почему она считается классической?
4. Для чего в узлах нейронной сети используется функция активации, а не просто взвешенная сумма?
5. Что такое RMSE и как интерпретировать полученное в лекции значение ошибки (~0.1 при диапазоне данных от 0 до 1)?
6. В чем заключается компромисс при выборе количества нейронов в скрытом слое? Почему сеть с 5 нейронами может быть хуже, чем с 3, несмотря на меньшую ошибку на обучении?
7. Как в рассмотренном коде происходит создание столбца с предсказанными значениями (Prediction) и почему важно было нормализовать целевой столбец перед сравнением?
Вернуться к учебному плану