<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Электронный научно-практический журнал «Современные научные исследования и инновации» &#187; предобработка данных</title>
	<atom:link href="http://web.snauka.ru/issues/tag/predobrabotka-dannyih/feed" rel="self" type="application/rss+xml" />
	<link>https://web.snauka.ru</link>
	<description></description>
	<lastBuildDate>Sat, 18 Apr 2026 09:41:14 +0000</lastBuildDate>
	<language>ru</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Разработка сверточной нейронной сети для распознавания изображений карточной масти</title>
		<link>https://web.snauka.ru/issues/2024/06/102200</link>
		<comments>https://web.snauka.ru/issues/2024/06/102200#comments</comments>
		<pubDate>Fri, 14 Jun 2024 05:36:28 +0000</pubDate>
		<dc:creator>Бадрисламов Денис Игоревич</dc:creator>
				<category><![CDATA[05.00.00 ТЕХНИЧЕСКИЕ НАУКИ]]></category>
		<category><![CDATA[архитектура нейронной сети]]></category>
		<category><![CDATA[гиперпараметры обучения]]></category>
		<category><![CDATA[дальнейшие исследования]]></category>
		<category><![CDATA[классификация карточной масти]]></category>
		<category><![CDATA[компьютерное зрение]]></category>
		<category><![CDATA[обработка изображений]]></category>
		<category><![CDATA[предобработка данных]]></category>
		<category><![CDATA[применение в азартных играх и анализе игры в карты]]></category>
		<category><![CDATA[распознавание образов]]></category>
		<category><![CDATA[сверточная нейронная сеть]]></category>
		<category><![CDATA[точность и эффективность модели]]></category>

		<guid isPermaLink="false">https://web.snauka.ru/issues/2024/06/102200</guid>
		<description><![CDATA[Научный руководитель: Вильданов Алмаз Нафкатович к.ф.-м.н., Уфимский университет науки и технологий, Нефтекамский филиал Современные технологии искусственного интеллекта (ИИ) и машинного обучения (МО) приобретают все большую популярность и находят применение в различных сферах деятельности. Одним из наиболее перспективных направлений является использование нейронных сетей для решения задач распознавания и классификации. В данной статье рассматриваются возможности и методы применения нейронных [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><em>Научный руководитель: </em><em>Вильданов Алмаз Нафкатович<br />
</em><span><em>к.ф.-м.н., </em></span><em>Уфимский университет науки и технологий, Нефтекамский филиал</em></p>
<p style="text-align: justify;"><span>Современные технологии искусственного интеллекта (ИИ) и машинного обучения (МО) приобретают все большую популярность и находят применение в различных сферах деятельности. Одним из наиболее перспективных направлений является использование нейронных сетей для решения задач распознавания и классификации. В данной статье рассматриваются возможности и методы применения нейронных сетей для распознавания изображений карточных мастей.<br />
</span></p>
<p style="text-align: justify;"><span>Для разработки и обучения нейронных сетей широко используется библиотека TensorFlow, предоставляемая Google. Она обеспечивает высокую производительность и гибкость при создании сложных моделей МО. TensorFlow поддерживает работу как на CPU, так и на GPU, что позволяет значительно ускорить процесс обучения нейронных сетей.<br />
</span></p>
<p style="text-align: justify;"><span>Google Colab предоставляет удобную среду для разработки и обучения моделей машинного обучения. Это облачный сервис, который позволяет использовать мощные вычислительные ресурсы Google без необходимости установки дополнительного программного обеспечения. Colab поддерживает работу с Jupyter Notebook и позволяет совместно работать над проектами в реальном времени​.<br />
</span></p>
<p style="background: white;"><span style="color: black;">Данная статья посвящена разработке и обучению сверточной нейронной сети (СНС) для эффективного распознавания изображений карточной масти. Распознавание масти игральных карт является важной задачей в различных областях, таких как автоматический анализ игры в карты, системы компьютерного зрения и приложения для азартных игр. В работе представлена архитектуры НС, специально разработанные для решения задачи классификации карточной масти. Сеть состоит из чередующихся сверточных и подвыборочных слоев, а также полносвязных слоев для итоговой классификации. Автор уделяет особое внимание выбору оптимальной архитектуры, гиперпараметров и методов предобработки изображений для повышения точности распознавания. Экспериментальная часть статьи описывает процесс обучения и тестирования предложенной СНС на наборе данных игральных карт. Приводятся результаты сравнительного анализа производительности модели в сравнении с другими методами классификации.<br />
</span></p>
<p style="text-align: justify;"><span>Первым шагом в создании системы распознавания является сбор и подготовка данных. Для обучения нейронной сети необходим большой объем данных, содержащий изображения карточных мастей. Эти данные проходят этапы предобработки, включая нормализацию и аугментацию, что улучшает качество модели и её способность к обобщению.<br />
</span></p>
<p style="text-align: justify;"><span><span>Формат данных выборки для обучения </span><span>train.csv</span><span> выглядит следующим образом: каждая строка представляет собой описание одного изображения; первый столбец содержит метки классов, к которым принадлежит изображение; оставшиеся столбцы содержат пиксельные значения изображения, например, в виде плоского вектора, где каждое значение соответствует яркости соответствующего пикселя на изображении [1].<br />
</span></span></p>
<p style="text-align: justify;"><span>У нас будут следующие классы изображений:<br />
</span></p>
<p style="text-align: justify;"><span>classes = ["червы","бубны","пики","трефы"]<br />
</span></p>
<p style="text-align: justify;"><span>Загрузим и посмотрим на датасет (рисунок 1):<br />
</span></p>
<p style="text-align: center;"><img src="https://web.snauka.ru/wp-content/uploads/2024/06/061424_0515_1.png" alt="" /><span><br />
</span></p>
<p style="text-align: center;"><span>Рисунок 1 – Датасет изображений карточных мастей<br />
</span></p>
<p style="text-align: justify;"><span>После подготовки данных, создаются и обучаются модели нейронных сетей. Используются различные архитектуры, такие как сверточные нейронные сети (CNN), которые особенно эффективны в задачах распознавания образов. Обучение модели проводится на обучающем наборе данных с последующей проверкой на валидационном наборе для оценки её производительности.<br />
</span></p>
<p style="text-align: justify;"><span>Работа нейронной сети рассматривается в трех моделях.<br />
</span></p>
<p style="text-align: justify;"><span>1.    Двухслойная нейронная сеть.<br />
</span></p>
<p style="text-align: justify;"><span><span>На первом шаге рассматривается сеть из двух нейронных слоев [2]. Для создания модели используется класс </span><span>Sequential</span><span>. На входном слое находятся 700 нейронов. Функция активации (запуска) </span><span>relu</span><span>, размер входных данных равен 400 (у нас картинки 20 на 20). На последнем слое должно быть 4 нейрона, так как это количество должно совпадать с количеством классификаций изображений [3] (у нас четыре изображения мастей). Модель нейронной сети строится с помощью класса </span><span>Sequential</span><span> [4].<br />
</span></span></p>
<p style="text-align: justify;"><span>N = 4<br />
</span></p>
<p style="text-align: justify;"><span>model = Sequential()<br />
</span></p>
<p style="text-align: justify;"><span>model.add(Dense(700, input_dim=400, activation=&#8221;relu&#8221;))<br />
</span></p>
<p style="text-align: justify;"><span>model.add(Dense( N, activation=&#8221;softmax&#8221;))<br />
</span></p>
<p>Приступаем к обучению модели с помощью метода <span>fit </span>модели (рисунок 2).</p>
<p style="text-align: center;"><img src="https://web.snauka.ru/wp-content/uploads/2024/06/061424_0515_2.png" alt="" /><span><br />
</span></p>
<p style="text-align: center;"><span>Рисунок 2 – Ход обучения нейронной сети<br />
</span></p>
<p style="text-align: justify;"><span>Можно посмотреть, как нейронная сеть делает предсказание на тестовых данных. Для этого применяется метод predict:<br />
</span></p>
<p style="text-align: center;"><img src="https://web.snauka.ru/wp-content/uploads/2024/06/061424_0515_3.png" alt="" /><span><br />
</span></p>
<p style="text-align: center;"><span>Рисунок 3 – Валидация нейронной сети<br />
</span></p>
<p style="text-align: justify;"><span>2. Трехслойная нейронная сеть.<br />
</span></p>
<p style="text-align: justify;"><span><span>Усложним нейронную сеть, сделав 3 слоя. Рассматривается сеть из трех нейронных слоев:</span><span><br />
</span></span></p>
<p style="text-align: justify;"><span>model = Sequential()<br />
</span></p>
<p style="text-align: justify;"><span>model.add(Dense(700, input_dim=400, activation=&#8221;relu&#8221;))<br />
</span></p>
<p style="text-align: justify;"><span>model.add(Dense(80, activation=&#8221;relu&#8221;))<br />
</span></p>
<p style="text-align: justify;"><span>model.add(Dense( N, activation=&#8221;softmax&#8221;))<br />
</span></p>
<p style="text-align: justify;"><span>Остальные шаги проделываются аналогично.<br />
</span></p>
<p style="text-align: justify;"><span>3. Сверточная нейронная сеть.<br />
</span></p>
<p style="text-align: justify;"><span>Полносвязная нейронная сеть недостаточно качественно выполняет работу с изображениями. Прогресс обучения двуслойной нейронной сети и трехслойной нейронной сети растет достаточно медленно, за счет увеличения количества слоев. Более качественный результат можно получить, построив сверточную нейронную сеть:<br />
</span></p>
<p style="text-align: justify;"><span>model = Sequential()<br />
</span></p>
<p style="text-align: justify;"><span>model.add(Conv2D(32, (3, 3),<br />
</span></p>
<p style="text-align: justify; margin-left: 35pt;"><span>input_shape=(img_width, img_height, 1), activation=&#8217;relu&#8217;))<br />
</span></p>
<p style="text-align: justify;"><span>model.add(MaxPooling2D(pool_size=(2,2)))<br />
</span></p>
<p style="text-align: justify;"><span>model.add(Conv2D(64, (3, 3), activation=&#8217;relu&#8217;))<br />
</span></p>
<p style="text-align: justify;"><span>model.add(MaxPooling2D(pool_size=(2, 2)))<br />
</span></p>
<p style="text-align: justify;"><span>model.add(Flatten())<br />
</span></p>
<p style="text-align: justify;"><span>model.add( Dense( 200, activation = &#8216;relu&#8217;))<br />
</span></p>
<p style="text-align: justify;"><span>model.add( Dense( N, activation=&#8217;softmax&#8217;))<br />
</span></p>
<p style="text-align: justify;"><span>Обучение проводится аналогично. По итогам распознавания собственных изображений можно сделать следующий вывод (таблица 1):<br />
</span></p>
<p><span style="color: black;">Таблица 1 – Качество распознавания изображений нейронными сетями<br />
</span></p>
<div style="margin-left: 5pt;">
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 328px;" />
<col style="width: 412px;" /></colgroup>
<tbody valign="top">
<tr>
<td style="padding-left: 9px; padding-right: 9px; border: solid 1pt;">
<p style="text-align: center;"><span>Структура НС</span></p>
</td>
<td style="padding-left: 9px; padding-right: 9px; border-top: solid 1pt; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;" valign="middle">
<p style="text-align: center;"><span style="color: black;">Качество распознавания</span></p>
</td>
</tr>
<tr>
<td style="padding-left: 9px; padding-right: 9px; border-top: none; border-left: solid 1pt; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span style="times new roman; 10pt; background-color: white;">Полносвязная нейронная сеть из двух слоев </span></p>
</td>
<td style="padding-left: 9px; padding-right: 9px; border-top: none; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: center;"><span>99.69 %</span></p>
</td>
</tr>
<tr>
<td style="padding-left: 9px; padding-right: 9px; border-top: none; border-left: solid 1pt; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span style="times new roman; 10pt; background-color: white;">Полносвязная нейронная сеть из трех слоев </span></p>
</td>
<td style="padding-left: 9px; padding-right: 9px; border-top: none; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: center;"><span>99.75 %</span></p>
</td>
</tr>
<tr>
<td style="padding-left: 9px; padding-right: 9px; border-top: none; border-left: solid 1pt; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span style="times new roman; 10pt; background-color: white;">Сверточная нейронная сеть с двумя сверточными слоями</span></p>
</td>
<td style="padding-left: 9px; padding-right: 9px; border-top: none; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: center;"><span>99.94 %</span></p>
</td>
</tr>
</tbody>
</table>
</div>
<p style="text-align: justify;"><span>Подготовим также в Paint собственные изображения и загрузим их на гугл-диск (рисунок 4).<br />
</span></p>
<p style="text-align: center;"><img src="https://web.snauka.ru/wp-content/uploads/2024/06/061424_0515_4.png" alt="" /><span><br />
</span></p>
<p style="text-align: center;"><span style="color: black;">Рисунок 4 – Собственные изображения для проверки<br />
</span></p>
<p style="text-align: center;"><span style="color: black;">работы нейронной сети<br />
</span></p>
<p style="text-align: justify;"><span>Обученная нейронная сеть используется для распознавания изображений на новых данных. Модель анализирует входное изображение и выдает прогнозируемую масть с определенной вероятностью. Точность распознавания оценивается на тестовом наборе данных, который не использовался в процессе обучения, что позволяет объективно оценить её эффективность.<br />
</span></p>
<p style="text-align: center;"><img src="https://web.snauka.ru/wp-content/uploads/2024/06/061424_0515_5.png" alt="" /><span><br />
</span></p>
<p style="text-align: center;"><span>Рисунок 5 – Распознавание и предсказание нейронной сети<br />
</span></p>
<p style="text-align: justify;"><span>Сверточная нейронная сеть будет, как и ожидалось, будет давать наилучшее предсказание.<br />
</span></p>
<p style="text-align: justify;"><span>Заключение. Разработка и использование нейронных сетей для распознавания изображений карточных мастей демонстрирует высокую эффективность и перспективность данного подхода. Применение библиотек TensorFlow и сервисов, таких как Google Colab, значительно упрощает процесс создания и обучения моделей машинного обучения. Эти технологии открывают новые возможности для автоматизации процессов и повышения точности распознавания в различных приложениях.</span></p>
]]></content:encoded>
			<wfw:commentRss>https://web.snauka.ru/issues/2024/06/102200/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Эффективные методы предобработки данных: как подготовить данные для машинного обучения</title>
		<link>https://web.snauka.ru/issues/2024/11/102801</link>
		<comments>https://web.snauka.ru/issues/2024/11/102801#comments</comments>
		<pubDate>Sat, 30 Nov 2024 06:01:50 +0000</pubDate>
		<dc:creator>Хузяханов Егор Илдарович</dc:creator>
				<category><![CDATA[05.00.00 ТЕХНИЧЕСКИЕ НАУКИ]]></category>
		<category><![CDATA[анализ данных]]></category>
		<category><![CDATA[балансировка классов]]></category>
		<category><![CDATA[визуализация]]></category>
		<category><![CDATA[выбросы]]></category>
		<category><![CDATA[дубликаты]]></category>
		<category><![CDATA[качество данных]]></category>
		<category><![CDATA[машинное обучение]]></category>
		<category><![CDATA[нормализация]]></category>
		<category><![CDATA[обработка пропусков]]></category>
		<category><![CDATA[очистка данных]]></category>
		<category><![CDATA[предобработка данных]]></category>
		<category><![CDATA[преобразование категориальных переменных]]></category>
		<category><![CDATA[стандартизация]]></category>
		<category><![CDATA[уменьшение размерности]]></category>

		<guid isPermaLink="false">https://web.snauka.ru/issues/2024/11/102801</guid>
		<description><![CDATA[Введение Предобработка данных — это неотъемлемая часть процесса машинного обучения, которая включает в себя подготовку и очистку данных перед их использованием в моделях. Качество данных оказывает непосредственное влияние на точность и производительность моделей. Недостатки в данных, такие как пропуски, дубликаты и выбросы, могут привести к неправильным выводам и ухудшению результатов обучения. Важность предобработки данных становится [...]]]></description>
			<content:encoded><![CDATA[<p><strong><em><span>Введение</span></em></strong></p>
<p><span>Предобработка данных — это неотъемлемая часть процесса машинного обучения, которая включает в себя подготовку и очистку данных перед их использованием в моделях. Качество данных оказывает непосредственное влияние на точность и производительность моделей. Недостатки в данных, такие как пропуски, дубликаты и выбросы, могут привести к неправильным выводам и ухудшению результатов обучения.</span></p>
<p><span>Важность предобработки данных становится особенно актуальной в условиях больших объемов информации, с которыми сталкиваются современные системы машинного обучения. Эффективные методы предобработки позволяют не только улучшить качество входных данных, но и оптимизировать обучение моделей, что в конечном итоге приводит к более точным прогнозам и выводам. Таким образом, понимание основ предобработки данных и применение правильных методов является ключевым фактором для успешной реализации проектов в области машинного обучения.</span></p>
<p><strong><em><span>Понимание данных</span></em></strong></p>
<p><span>Понимание структуры и характеристик данных — это первый шаг на пути к их эффективной предобработке. Этот этап включает в себя анализ и визуализацию данных, что позволяет исследовать их распределение, выявлять аномалии и лучше понимать связи между признаками.</span></p>
<p><span>Для анализа данных часто используются библиотеки Python, такие как Pandas и Matplotlib.<br />
При помощи Pandas можно удобно манипулировать данными, используя такие методы, как describe(), который предоставляет статистическую информацию о числовых столбцах, и info(), который позволяет получить общее представление о DataFrame. Визуализация данных с помощью Matplotlib и Seaborn помогает графически представить распределение данных, выявить потенциальные аномалии и выявить паттерны, которые могут быть полезны для дальнейшей предобработки.</span></p>
<p><span>Применение инструментов для визуализации данных, таких как гистограммы, диаграммы рассеяния и ящики с усами, позволяет лучше понять распределения и зависимости между переменными. Например, гистограммы могут показать распределение отдельных признаков, а диаграммы рассеяния помогут выявить взаимосвязи между двумя количественными переменными.</span></p>
<p><strong><span>Очистка данных</span></strong></p>
<p><span>Очистка данных — это важный этап предобработки, который включает в себя несколько ключевых процессов: обработку пропусков, удаление дубликатов и обработку выбросов. Каждый из этих процессов необходим для повышения качества данных и, как следствие, улучшения работы моделей машинного обучения.</span></p>
<p><strong><span>Обработка пропусков</span></strong></p>
<p><span>Пропуски в данных могут возникать по различным причинам: ошибки при сборе данных, некорректные записи или технические сбои. Обработка пропусков может выполняться различными методами:</span></p>
<p><strong>1. Удаление строк/столбцов</strong>:</p>
<ul>
<li>Если в определенной строке или столбце слишком много пропусков, имеет смысл удалить их. Например, если в столбце содержится более 30% пропусков, его можно исключить из анализа, так как такой объем недостающих данных может сильно исказить результаты. Удаление строк с пропусками также может быть уместным, особенно если потеря информации не критична.</li>
</ul>
<p><strong>2. Импутация значений</strong>:</p>
<ul>
<li>Импутация — это процесс заполнения пропусков определенными значениями [1]. Существует несколько подходов:
<ul>
<li><strong>Среднее значение</strong>: наиболее распространенный метод, при котором пропуски заполняются средним значением по этому столбцу. Это удобно, но может быть неэффективно, если данные имеют выбросы.</li>
<li><strong>Медиана</strong>: лучше подходит для данных с выбросами, так как менее чувствительна к экстремальным значениям. Заполнение пропусков медианой помогает сохранить распределение данных.</li>
<li><strong>Модальное значение</strong>: этот метод используется для категориальных данных, когда пропуски заменяются наиболее часто встречающимся значением в столбце.</li>
</ul>
</li>
</ul>
<div align="center">
<p><img src="https://content.snauka.ru/web/102801_files/12.gif" alt="" width="418" height="369" /></p>
<p><strong><span>Рисунок 1. Пример импутации пропусков</span></strong></p>
</div>
<p><strong><span>Удаление дубликатов</span></strong></p>
<p><span>Дубликаты в данных могут привести к искажению результатов анализа и моделирования. Методы для обнаружения и удаления дубликатов:</span><br />
<strong>1. Обнаружение дубликатов</strong>:</p>
<ul>
<li>Для выявления дублирующихся строк используется специальный механизм, который сравнивает значения всех или определённых столбцов. Это позволяет быстро находить записи, которые полностью идентичны или имеют схожие характеристики.</li>
</ul>
<p><strong>2. Удаление дубликатов</strong>:</p>
<ul>
<li>После выявления дубликатов необходимо принять решение о том, как с ними поступить. Обычно удаляется повторяющаяся запись, оставляя только одну, что помогает предотвратить искажение статистики и моделей. Это особенно важно, когда дублирующиеся данные могут привести к переоценке или недооценке значимости определённых признаков.</li>
</ul>
<p><strong><span>Обработка выбросов</span></strong></p>
<p><span>Выбросы — это аномальные значения, которые значительно отличаются от остальных данных. Они могут возникать как следствие ошибок измерений или же представлять собой настоящие вариации в данных. Методы для выявления и удаления выбросов:</span><br />
<strong><span>1. Визуализация:</span></strong></p>
<ul>
<li>Используйте графики для выявления выбросов. Гистограммы и диаграммы размаха помогут вам наглядно увидеть, какие значения значительно отклоняются от остальных.</li>
</ul>
<p><strong><span>2. Удаление по порогу:</span></strong></p>
<ul>
<li>Установите логические границы для ваших данных и удалите значения, которые их превышают. Например, если у вас данные о возрасте, и вы знаете, что не должно быть людей старше 120 лет, удалите эти значения.</li>
</ul>
<p><strong><span>3. Замена выбросов:</span></strong></p>
<ul>
<li>Если выбросы были обнаружены, замените их на медиану или другое приемлемое значение, чтобы сохранить общее распределение данных.</li>
</ul>
<div align="center">
<p style="text-align: center;"><img src="https://content.snauka.ru/web/102801_files/130.gif" alt="" width="904" height="446" /></p>
<p style="text-align: center;"><strong><span>Рисунок 2. Пример обработки выбросов</span></strong></p>
</div>
<p><strong><span>Преобразование данных</span></strong></p>
<p><em><span>Преобразование данных — это процесс подготовки и изменения исходных данных таким образом, чтобы они стали удобными и полезными для машинного обучения и анализа.</span></em></p>
<p><strong><span>Нормализация</span></strong></p>
<p><em><span>Нормализация — это приведение числовых признаков модели к одинаковому масштабу или диапазону. Данный процесс используют для того, чтобы все признаки (переменные) в данных были &#8220;на одном уровне&#8221;. Это предотвращает влияние на модель таких ситуаций, когда один признак выражается в тысячах, а другой — в единицах. [2]</span></em></p>
<p><em><span>Самым простым случаем нормализации является Min-Max Scaling.</span></em></p>
<p><em><span>Min-Max Scaling — это метод нормализации данных, при котором каждый элемент данных преобразуется в новое значение в определённом диапазоне, обычно от 0 до 1. Формула для применения Min-Max Scaling следующая:</span></em></p>
<p><img src="https://content.snauka.ru/web/102801_files/133.gif" alt="" width="177" height="47" /></p>
<p><em><span>где:</span></em></p>
<ul>
<li><em><span>x &#8211; исходное значение данных;</span></em></li>
<li><img src="https://content.snauka.ru/web/102801_files/133(1).gif" alt="" width="16" height="23" /><em><span>- нормализованное значение;</span></em></li>
<li><em><span>min(x) — минимальное значение в выборке;</span></em></li>
<li><em><span>max(x) — максимальное значение в выборке.</span></em></li>
</ul>
<p><em><span>Представим визуализацию примера использования данной нормализации на Рисунке 3.</span></em></p>
<div style="text-align: center;" align="center"><img src="https://content.snauka.ru/web/102801_files/930.gif" alt="" width="948" height="458" /></div>
<div style="text-align: center;" align="center"><strong><span>Рисунок 3. Данные до и после нормализации</span></strong></div>
<p><em><span>Как мы видим, интервал значений преобразовался от [0;70] до [0;1].</span></em></p>
<p><strong><span>Стандартизация</span></strong></p>
<p><em><span>Нормализация используется, когда возникает необходимость привести данные к одинаковому для всех признаков диапазону (например, [0, 1]).</span></em></p>
<p><em><span>Стандартизация же, в свою очередь, используется, когда данные имеют разные распределения или когда важно сохранить среднее и стандартное отклонение.</span></em></p>
<p><em><span>Стандартизация — это процесс, при котором данные преобразуются таким образом, чтобы каждый из признаков имел среднее значение 0 и стандартное отклонение 1.</span></em></p>
<p><em><span>При применении данного действия признаки принимают одинаковую &#8220;масштабируемость&#8221; и одинаково влияют на модель, независимо от того, в каком диапазоне они находятся.</span></em></p>
<p><em><span>Примером стандартизации является Z-score Normalization.</span></em></p>
<p><em>Z-score — это метод нормализации данных, который помогает привести данные к стандартному нормальному распределению, где среднее значение μ</em><em> равно 0, а стандартное отклонение </em><em>σ</em><em> — 1. Такой подход используется, когда нужно, чтобы данные были &#8220;приведены к одинаковому масштабу&#8221;, но с сохранением их распределения. Формула данной стандартизации следующая:</em></p>
<p><img src="https://content.snauka.ru/web/102801_files/946.gif" alt="" width="74" height="39" /></p>
<p><em><span>где:</span></em></p>
<ul>
<li><em>x</em><em> — исходное значение</em><em>;</em><em></em></li>
<li><em>z </em><em>— нормализованное значение (</em><em>Z</em><em>-</em><em>score</em><em>);</em></li>
<li><em><em>μ</em></em><em> — среднее значение выборки</em><em>;</em><em></em></li>
<li><em>σ</em><em> — стандартное отклонение выборки.</em></li>
</ul>
<p><em><span>Пример стандартизации представлен на Рисунке 4.</span></em></p>
<div style="text-align: center;" align="center"><img src="https://content.snauka.ru/web/102801_files/1320.gif" alt="" width="833" height="384" /></div>
<div style="text-align: center;" align="center"><strong><span>Рисунок 4. Данные до и после стандартизации</span></strong></div>
<p><em><span>Заметим, что при стандартизации значения как-бы сравниваются со средним выборки, показывая, какое количество стандартных отклонений находится между конкретным значением и средним.</span></em></p>
<p><strong><span>Преобразования категориальных переменных</span></strong></p>
<p><em><span>Категориальные переменные — это такие переменные, которые представляют собой категории или группы. Например, &#8220;цвет&#8221; может быть категориальной переменной с такими значениями как &#8220;красный&#8221;, &#8220;синий&#8221; и &#8220;зелёный&#8221;.</span></em></p>
<p><em><span>При работе с категориальными переменными закономерно возникает вопрос: каким образом провести их непосредственный анализ. Для этого как правило производят преобразование категориальных переменных в числовые. Ниже представлен пример преобразования:</span></em></p>
<div align="center"><img src="https://content.snauka.ru/web/102801_files/1350.gif" alt="" width="369" height="220" /></div>
<div align="center"><strong><span>Рисунок 5. Данные до и после преобразования категориальных переменных</span></strong></div>
<p><strong><span>Создание новых признаков</span></strong></p>
<p><em><span>Создание новых признаков — это процесс, при котором мы извлекаем дополнительную информацию из исходных данных, чтобы помочь модели лучше делать предсказания.</span></em></p>
<p><em><span>Приведем пример: если у нас есть количество покупок, которые клиент делает в месяц, мы можем создать новый признак, умножив это число на 12, чтобы получить количество покупок в год. Таким образом новый признак позволяет создать предсказания на протяжении долгого времени.</span></em></p>
<p><strong><span>Уменьшение размерности</span></strong></p>
<p><em><span>Уменьшение размерности — это важная техника в машинном обучении, которая используется для сокращения количества признаков в данных без потери значимой информации. Эта техника особенно полезна, когда в наборе данных много признаков (что может привести к таким проблемам, как проклятие размерности или разреженности), а также для улучшения скорости обучения моделей и уменьшения риска переобучения.</span></em></p>
<p><em><span>Иными словами, уменьшение размерности помогает упростить данные, оставив только самую важную информацию, которая будет полезна для предсказаний.</span></em></p>
<p><em><span>Рассмотрим основные методы уменьшения размерности.</span></em></p>
<ul>
<li><em><span>PCA — это линейный метод, который преобразует данные в новое пространство, выбрав новые оси (компоненты), которые максимизируют вариацию (дисперсию) данных. Эти новые оси называются главными компонентами.</span></em></li>
<li><em><span>t-SNE — это метод уменьшения размерности, который хорошо работает с данными, имеющими нелинейные зависимости. Основная цель t-SNE — сохранить локальную структуру данных, то есть сохранять расстояния между похожими точками в низкоразмерном пространстве.</span></em></li>
<li><em><span>UMAP — это метод уменьшения размерности, который похож на t-SNE, но с рядом преимуществ. Он предназначен для сохранения как локальной, так и глобальной структуры данных, при этом он более эффективен по времени и может работать с более большими наборами данных.</span></em></li>
</ul>
<p><strong><span>Балансировка классов</span></strong></p>
<p><span>При работе с несбалансированными данными, где одна категория наблюдений значительно превышает по численности другую, модели машинного обучения могут стать предвзятыми и переоценивать большинство. Проблема дисбаланса классов особенно актуальна в задачах бинарной классификации, таких как обнаружение мошенничества или выявление редких заболеваний.</span></p>
<p><span>Существует несколько стратегий для борьбы с дисбалансом:</span></p>
<ol>
<li><strong><span>Oversampling (увеличение меньшинства)</span></strong><span> – заключается в увеличении числа примеров меньшинства. Один из популярных методов – SMOTE (Synthetic Minority Over-sampling Technique), который синтетически создает новые примеры на основе имеющихся данных. [3]</span></li>
<li><strong><span>Undersampling (уменьшение большинства)</span></strong><span> – уменьшение числа примеров большинства, чтобы сбалансировать распределение классов. Этот метод уменьшает выборку класса, который доминирует, тем самым уменьшая общий объем данных.</span></li>
</ol>
<p><span>Оба подхода имеют свои преимущества и недостатки. Oversampling может привести к переобучению, так как модель увидит несколько &#8220;клонированных&#8221; примеров, а undersampling рискует потерять важную информацию из большинства.</span></p>
<p><strong><span>Данные до и после балансировки</span></strong></p>
<p><span>На изображении представлено распределение данных до и после применения методов балансировки. До балансировки видно значительное преобладание основного класса, из-за чего модель плохо распознаёт редкий класс. После балансировки, с использованием методов, таких как SMOTE и RandomUnderSampler, оба класса представлены более равномерно. Это улучшает способность модели распознавать примеры редкого класса, что особенно важно для задач с несбалансированными данными.</span></p>
<p style="text-align: center;"><img src="https://content.snauka.ru/web/102801_files/1565.gif" alt="" width="1043" height="343" /></p>
<div style="text-align: center;" align="center"><strong><span>Рисунок 6. Данные до и после балансировки</span></strong></div>
<p><span>На столбчатой диаграмме показано, как балансировка данных с помощью SMOTE и RandomUnderSampler улучшает Recall и F1-score для редкого класса по сравнению с результатами без балансировки. Без балансировки модель демонстрирует низкий Recall (0.18) и F1-score (0.29), что отражает её слабую способность распознавать редкий класс, поскольку основная масса предсказаний относится к более частому классу.</span></p>
<p><span>После применения SMOTE Recall увеличивается до 0.69, а F1-score — до 0.35, что показывает улучшение точности и полноты для редкого класса. Метод RandomUnderSampler повышает эти показатели ещё больше, до 0.71 и 0.37 соответственно. Оба подхода значительно улучшают классификацию редкого класса, что особенно важно в задачах, требующих точного выявления малочисленных категорий, таких как аномалии или медицинская диагностика.</span></p>
<div style="text-align: center;" align="center"><img src="https://content.snauka.ru/web/102801_files/1710.gif" alt="" width="884" height="549" /></div>
<div style="text-align: center;" align="center"><strong><span>Рисунок 7. Метрики до и после балансировки</span></strong></div>
<p><strong><span>Практические советы:</span></strong></p>
<ul>
<li><strong><span>SMOTE</span></strong><span> подходит для данных с высоким количеством признаков, так как создает новые синтетические данные. Однако его следует использовать осторожно в задачах, где важна интерпретируемость данных, так как сгенерированные примеры могут усложнить их анализ.</span></li>
<li><strong><span>Undersampling</span></strong><span> рекомендуется применять, когда количество данных велико, и потеря части выборки не приведет к значительной потере информации. Он может быть особенно полезен при ограниченных ресурсах для обучения модели.</span></li>
</ul>
<p><strong><span>Заключение</span></strong></p>
<p><span>Балансировка классов – важный шаг в предобработке данных, который позволяет улучшить качество моделей машинного обучения в задачах с дисбалансом данных. Использование методов oversampling и undersampling дает возможность корректировать несбалансированные выборки, что положительно сказывается на результатах.</span></p>
<p><span>Однако, важно помнить, что выбор метода балансировки зависит от типа задачи и характеристик данных. Кроме того, документирование всех шагов и использованных методов – неотъемлемая часть процесса, позволяющая сделать модель более воспроизводимой и понятной для других исследователей.</span></p>
]]></content:encoded>
			<wfw:commentRss>https://web.snauka.ru/issues/2024/11/102801/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Преобразование категориальных данных: практическое руководство на примере датасета “Титаник”</title>
		<link>https://web.snauka.ru/issues/2025/11/103920</link>
		<comments>https://web.snauka.ru/issues/2025/11/103920#comments</comments>
		<pubDate>Mon, 17 Nov 2025 15:05:10 +0000</pubDate>
		<dc:creator>Артыков Ильнур Кимсанович</dc:creator>
				<category><![CDATA[05.00.00 ТЕХНИЧЕСКИЕ НАУКИ]]></category>
		<category><![CDATA[Feature Engineering]]></category>
		<category><![CDATA[One-Hot Encoding]]></category>
		<category><![CDATA[бинарное кодирование]]></category>
		<category><![CDATA[датасет «Титаник»]]></category>
		<category><![CDATA[категориальные данные]]></category>
		<category><![CDATA[кодирование признаков]]></category>
		<category><![CDATA[машинное обучение]]></category>
		<category><![CDATA[предобработка данных]]></category>
		<category><![CDATA[преобразование данных]]></category>
		<category><![CDATA[фиктивные переменные]]></category>

		<guid isPermaLink="false">https://web.snauka.ru/issues/2025/11/103920</guid>
		<description><![CDATA[Любой проект в области анализа данных или машинного обучения начинается с этапа предобработки данных. Этот этап, часто называемый «feature engineering» (создание признаков), является критически важным для построения качественных моделей. Одна из самых распространенных задач на этом этапе — работа с категориальными признаками. Такие признаки описывают принадлежность объекта к определенной группе или классу: например, пол, страна [...]]]></description>
			<content:encoded><![CDATA[<p>Любой проект в области анализа данных или машинного обучения начинается с этапа предобработки данных. Этот этап, часто называемый «feature engineering» (создание признаков), является критически важным для построения качественных моделей. Одна из самых распространенных задач на этом этапе — работа с категориальными признаками. Такие признаки описывают принадлежность объекта к определенной группе или классу: например, пол, страна проживания, тип товара, образовательная степень.</p>
<p>Алгоритмы машинного обучения — будь то линейная регрессия, решающее дерево или нейронная сеть — оперируют числами. Они не могут напрямую интерпретировать текстологические значения вроде «М» или «Саутгемптон». Наша задача — найти способ перевести эту категориальную информацию в числовую, не исказив при этом ее смысл. В этой статье мы решим практическую задачу по кодированию трех признаков из датасета «Титаник» и объясним теоретическую базу, стоящую за этим процессом.</p>
<p>Категориальные признаки делятся на два основных типа:</p>
<p>Номинальные (Nominal): Категории не имеют внутреннего порядка. Например, «Порт посадки» (Саутгемптон, Шербур, Куинстаун). Нет такого понятия, что «Шербур &gt; Саутгемптон».</p>
<p>Порядковые (Ordinal): Категории имеют четкий, естественный порядок. Например, «Класс» (1-й, 2-й, 3-й) или «Уровень образования» (школа, бакалавр, магистр). Здесь 1-й класс объективно «выше» 3-го по уровню сервиса и комфорта.</p>
<p>Неправильное кодирование может ввести алгоритм в заблуждение. Если мы просто заменим порты посадки числами (Саутгемптон=1, Шербур=2, Куинстаун=3), модель может ошибочно решить, что между ними существует количественное отношение (например, что Куинстаун «в три раза больше» Саутгемптона), что бессмысленно.</p>
<p>Для корректного преобразования используются два основных метода, которые мы и применили в нашем задании.</p>
<p>1.1. Бинарное кодирование (Label Encoding для бинарных признаков)</p>
<p>Этот метод применяется к признакам, имеющим ровно две категории.</p>
<p>Принцип: Каждой категории присваивается число: 0 или 1.</p>
<p>Область применения: Идеально подходит для бинарных признаков, таких как «Пол» (М/Ж), «Есть ли домашнее животное?» (Да/Нет), «Прошел ли клиент целевое действие?» (Да/Нет).</p>
<p>Пример из задания: Для признака «Пол» мы применили простое правило:</p>
<p>&#8216;М&#8217; → 1</p>
<p>&#8216;Ж&#8217; → 0</p>
<p>Такой подход экономно использует пространство признаков (не создает новых столбцов) и однозначно разделяет объекты на две группы.</p>
<p>1.2. One-Hot Encoding (OHE) — Кодирование в виде «горячего» вектора</p>
<p>Это стандартный метод для работы с номинальными признаками, у которых нет внутреннего порядка.</p>
<p>Принцип: Для каждой уникальной категории внутри признака создается новый бинарный (0/1) столбец. Для каждого объекта 1 ставится в столбце, соответствующем его категории, а во всех остальных новых столбцах — 0.</p>
<p>Область применения: Номинальные признаки с тремя и более категориями, такие как «Порт посадки» или к примеру «Страна», «Марка автомобиля».</p>
<p>Пример из задания:</p>
<p>Пример представлен на рисунке 1.</p>
<p style="text-align: center;"><img src="https://web.snauka.ru/wp-content/uploads/2025/12/120225_1556_1.png" alt="" /></p>
<p style="text-align: center;">Рисунок 1</p>
<p>Исходный признак «Класс» имеет 3 категории: 1, 2, 3. Хотя он является порядковым, OHE также применим, особенно если мы не хотим, чтобы модель предполагала строгую линейную зависимость (иногда разница между 1-м и 2-м классом может быть значительнее, чем между 2-м и 3-м).</p>
<p>Процесс: Мы создали три новых признака: Класс_1, Класс_2, Класс_3.</p>
<p>Для пассажира 1-го класса: Класс_1=1, Класс_2=0, Класс_3=0.</p>
<p>Для пассажира 3-го класса: Класс_1=0, Класс_2=0, Класс_3=1.</p>
<p>Исходный признак «Порт посадки» имеет 3 категории: Саутгемптон, Шербур, Куинстаун.</p>
<p>Процесс: Мы создали три новых признака: Порт_Саутгемптон, Порт_Шербур, Порт_Куинстаун.</p>
<p>Для пассажира, севшего в Шербуре: Порт_Саутгемптон=0, Порт_Шербур=1, Порт_Куинстаун=0.</p>
<p>Важное замечание: После применения OHE исходный категориальный столбец удаляется из набора данных, чтобы избежать избыточности.</p>
<p>2. Постановка задачи</p>
<p>Нам был предоставлен датасет с информацией о 14 пассажирах Титаника (рисунок 1). Содержащиеся в нем категориальные признаки («Пол», «Класс», «Порт посадки») непригодны для непосредственного анализа алгоритмами машинного обучения.</p>
<p>Цель: Преобразовать эти три признака в числовой формат, руководствуясь следующими правилами:</p>
<p>Пол: Закодировать бинарно (&#8216;М&#8217; → 1, &#8216;Ж&#8217; → 0).</p>
<p>Класс: Применить One-Hot Encoding, создав три dummy-переменных: Класс_1, Класс_2, Класс_3.</p>
<p>Порт посадки: Применить One-Hot Encoding, создав три dummy-переменных: Порт_Саутгемптон, Порт_Шербур, Порт_Куинстаун.</p>
<p>Результатом должна стать рисунок 2, где для каждого пассажира указаны его имя и новые, закодированные версии указанных признаков.</p>
<p>3. Описание решения</p>
<p>Решение задачи выполнялось в несколько последовательных шагов для каждого пассажира из исходной Таблицы 1.</p>
<p>Шаг 1: Кодирование признака «Пол».</p>
<p>Для каждого пассажира мы смотрели на значение в столбце «Пол» и заменяли его на 1 (если &#8216;М&#8217;) или 0 (если &#8216;Ж&#8217;). Например:</p>
<p>Джон Линган (№1): &#8216;М&#8217; → 1.</p>
<p>Аврора Аделия Ландергрен (№2): &#8216;Ж&#8217; → 0.</p>
<p>Шаг 2: One-Hot Encoding для признака «Класс».</p>
<p>Для каждого пассажира мы анализировали его класс и проставляли 1 в соответствующем столбце, и 0 — в двух других.</p>
<p>Джон Линган (№1): Класс = 1 → Класс_1=0, Класс_2=1, Класс_3=0.</p>
<p>Аврора Аделия Ландергрен (№2): Класс = 2 → Класс_1=0, Класс_2=1, Класс_3=0.</p>
<p>Графиня Ротес(№4): Класс = 3 → Класс_1=1, Класс_2=0, Класс_3=0.</p>
<p>Шаг 3: One-Hot Encoding для признака «Порт посадки».</p>
<p>Аналогично предыдущему шагу, мы создали три бинарных столбца для портов.</p>
<p>Графиня Ротес(№4): Порт = Саутгемптон → Порт_Саутгемптон=1, Порт_Шербур=0, Порт_Куинстаун=0.</p>
<p>Альбер Малле (№3): Порт = Шербур → Порт_Саутгемптон=0, Порт_Шербур=1, Порт_Куинстаун=0.</p>
<p>Джон Линган (№1): Порт = Куинстаун → Порт_Саутгемптон=0, Порт_Шербур=0, Порт_Куинстаун=1.</p>
<p>Результат: В результате ручного применения этих правил для 4 пассажиров была заполнена Таблица 2. Её фрагмент представлен ниже для наглядности (рисунок 2).</p>
<p style="text-align: center;"><img src="https://web.snauka.ru/wp-content/uploads/2025/12/120225_1556_2.png" alt="" /></p>
<p style="text-align: center;">Рисунок 2</p>
<p><strong>Выводы</strong></p>
<p>Проделанная работа наглядно демонстрирует важность и необходимость этапа предобработки категориальных данных. Путем применения всего двух методов кодирования — бинарного и One-Hot Encoding — мы превратили текстологическую информацию, непонятную для машины, в строгий числовой формат.</p>
<p>Корректность представления: One-Hot Encoding позволил избежать навязывания ложного порядкового соотношения между номинальными признаками (порты) и нивелировать возможный нелинейный эффект порядкового признака (класс).</p>
<p>Готовность к анализу: Полученная в Таблице 2 матрица признаков является чистой и готовой к использованию. Её можно напрямую подавать на вход алгоритмам машинного обучения для решения задач классификации (например, предсказание выживания) или регрессии.</p>
<p>Универсальность методов: Рассмотренные подходы являются стандартными и широко применяются в индустрии. Понимание их принципов — фундаментальный навык для любого специалиста по data science.</p>
<p>В реальных проектах этот процесс автоматизируется с помощью библиотек, таких как Pandas (pd.get_dummies()) или Scikit-learn (OneHotEncoder), что позволяет обрабатывать тысячи строк за доли секунды. Однако ручное выполнение, как в этом задании, закрепляет понимание сути преобразования, что неизменно важнее механического владения инструментом.</p>
]]></content:encoded>
			<wfw:commentRss>https://web.snauka.ru/issues/2025/11/103920/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Преобразование категориальных признаков с несколькими категориями с помощью метода one-hot encoding</title>
		<link>https://web.snauka.ru/issues/2026/02/104165</link>
		<comments>https://web.snauka.ru/issues/2026/02/104165#comments</comments>
		<pubDate>Tue, 03 Feb 2026 08:23:29 +0000</pubDate>
		<dc:creator>Губайдуллина Дарья Андреевна</dc:creator>
				<category><![CDATA[05.00.00 ТЕХНИЧЕСКИЕ НАУКИ]]></category>
		<category><![CDATA[categorical features]]></category>
		<category><![CDATA[data preprocessing]]></category>
		<category><![CDATA[data transformation]]></category>
		<category><![CDATA[feature binarization]]></category>
		<category><![CDATA[machine learning]]></category>
		<category><![CDATA[numerical encoding]]></category>
		<category><![CDATA[One-Hot Encoding]]></category>
		<category><![CDATA[pandas]]></category>
		<category><![CDATA[бинаризация признаков]]></category>
		<category><![CDATA[категориальные признаки]]></category>
		<category><![CDATA[машинное обучение]]></category>
		<category><![CDATA[предобработка данных]]></category>
		<category><![CDATA[преобразование данных]]></category>
		<category><![CDATA[числовое кодирование]]></category>

		<guid isPermaLink="false">https://web.snauka.ru/issues/2026/02/104165</guid>
		<description><![CDATA[Научный руководитель: Вильданов Алмаз Нафкатович Уфимский университет науки и технологий, Нефтекамский филиал, Старший преподаватель При работе с машинным обучением часто необходимо использовать данные, содержащие категориальные признаки с несколькими уникальными значениями. Прямое использование таких данных в моделях невозможно, так как большинство алгоритмов требуют числовые входные данные. Для решения этой задачи применяется метод one-hot encoding — преобразование [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;" align="right"><em>Научный руководитель: Вильданов Алмаз Нафкатович<br />
</em><em>Уфимский университет науки и технологий, Нефтекамский филиал, Старший преподаватель</em></p>
<p>При работе с машинным обучением часто необходимо использовать данные, содержащие категориальные признаки с несколькими уникальными значениями. Прямое использование таких данных в моделях невозможно, так как большинство алгоритмов требуют числовые входные данные. Для решения этой задачи применяется метод one-hot encoding — преобразование категориального признака в набор бинарных признаков.</p>
<p>Пример преобразования</p>
<p>Рассмотрим исходный DataFrame с признаком «Цвет»:</p>
<p>data = {</p>
<p style="padding-left: 30px;">&#8216;№&#8217;: [1, 2, 3, 4],</p>
<p style="padding-left: 30px;">&#8216;Цвет&#8217;: ['красный', 'синий', 'красный', 'зеленый']</p>
<p>}</p>
<p>df = pd.DataFrame(data)</p>
<p>Применим one-hot encoding с помощью pandas:</p>
<p>df_onehot = pd.get_dummies(df, columns=['Цвет'])</p>
<p>print(df_onehot)</p>
<p>Результат:</p>
<p>№,Цвет_красный,Цвет_синий,Цвет_зеленый</p>
<p>1,1,0,0</p>
<p>2,0,1,0</p>
<p>3,1,0,0</p>
<p>4,0,0,1</p>
<p>One-hot encoding устраняет проблему порядковости категорий, то есть позволяет модели воспринимать каждую категорию как отдельную независимую единицу. В отличие от простой цифровой замены (например, красный — 1, синий — 2, зеленый — 3), такой подход не вводит ложных предположений о взаимосвязи между категориями.</p>
<p>Преобразование категориальных признаков с помощью one-hot encoding — фундаментальный этап предобработки данных. Это повышает качество работы алгоритмов машинного обучения за счет корректного представления категорий в числовом формате без искажений и искусственных взаимосвязей.</p>
]]></content:encoded>
			<wfw:commentRss>https://web.snauka.ru/issues/2026/02/104165/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Прогнозирование выживаемости пассажиров Титаника с использованием нейронных сетей</title>
		<link>https://web.snauka.ru/issues/2026/03/104341</link>
		<comments>https://web.snauka.ru/issues/2026/03/104341#comments</comments>
		<pubDate>Sat, 07 Mar 2026 07:37:13 +0000</pubDate>
		<dc:creator>Жеребцова Ксения Владимировна</dc:creator>
				<category><![CDATA[05.00.00 ТЕХНИЧЕСКИЕ НАУКИ]]></category>
		<category><![CDATA[Keras]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[TensorFlow]]></category>
		<category><![CDATA[Titanic]]></category>
		<category><![CDATA[Классификация]]></category>
		<category><![CDATA[машинное обучение]]></category>
		<category><![CDATA[нейронные сети]]></category>
		<category><![CDATA[предобработка данных]]></category>

		<guid isPermaLink="false">https://web.snauka.ru/issues/2026/03/104341</guid>
		<description><![CDATA[Научный руководитель: Вильданов Алмаз Нафкатович к.ф.-м.н., Уфимский университет науки и технологий, Нефтекамский филиал Введение В современном мире методы машинного обучения и искусственного интеллекта находят широкое применение в самых различных областях, включая медицину, финансы, транспорт и многие другие. Одной из классических задач, используемых для обучения и отработки навыков работы с алгоритмами машинного обучения, является задача предсказания выживаемости пассажиров [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;" align="right"><em>Научный руководитель: Вильданов Алмаз Нафкатович<br />
</em><em>к.ф.-м.н., </em><em>Уфимский университет науки и технологий, Нефтекамский филиал</em></p>
<p><strong>Введение</strong></p>
<p>В современном мире методы машинного обучения и искусственного интеллекта находят широкое применение в самых различных областях, включая медицину, финансы, транспорт и многие другие. Одной из классических задач, используемых для обучения и отработки навыков работы с алгоритмами машинного обучения, является задача предсказания выживаемости пассажиров Титаника. Данная задача представляет собой бинарную классификацию, где необходимо на основе набора признаков о пассажире определить, выжил он или нет.</p>
<p><strong>Инструментарий</strong></p>
<p>В качестве инструментария для решения поставленной задачи была выбрана библиотека TensorFlow с высокоуровневым фреймворком Keras, которые предоставляют удобные средства для создания и обучения нейронных сетей различной архитектуры. Для работы с табличными данными используется библиотека Pandas, для математических операций и работы с массивами – NumPy, для визуализации результатов – Matplotlib.</p>
<p><strong>Загрузка данных</strong></p>
<p>Поскольку работа выполнялась в среде Google Colab, потребовалось подключение Google Drive для доступа к файлам датасета:</p>
<p style="padding-left: 30px;"><em>from google.colab import drive</em></p>
<p style="padding-left: 30px;"><em>drive.mount(&#8216;/content/drive/&#8217;)</em></p>
<p>Путь к данным задается через переменную PATH, после чего загружаются тренировочный и тестовый наборы данных, а также файл с примером формата ответов sample_submission.csv:</p>
<p style="padding-left: 30px;"><em>DIR = &#8220;Titanic&#8221;</em></p>
<p style="padding-left: 30px;"><em>PATH = &#8216;/content/drive/My Drive/&#8217;+ DIR + &#8216;/&#8217;</em></p>
<p style="padding-left: 30px;"><em> </em></p>
<p style="padding-left: 30px;"><em>train = pd.read_csv(PATH + &#8216;train.csv&#8217;)</em></p>
<p style="padding-left: 30px;"><em>test = pd.read_csv(PATH + &#8216;test.csv&#8217;)</em></p>
<p style="padding-left: 30px;"><em>sample_submission = pd.read_csv(PATH + &#8216;sample_submission.csv&#8217;, index_col=&#8217;PassengerId&#8217;)</em></p>
<p><strong>Предобработка данных</strong></p>
<p>Одной из важнейших задач при работе с реальными данными является их предобработка. Исходные данные содержат как числовые, так и категориальные признаки, которые необходимо преобразовать в формат, пригодный для обучения нейронной сети.</p>
<p><strong>Замена категориальных признаков</strong></p>
<p>В первую очередь производится замена текстовых значений пола на числовые:</p>
<p style="padding-left: 30px;"><em>train = train.replace(&#8216;male&#8217;, 1).replace(&#8216;female&#8217;, 0)</em></p>
<p style="padding-left: 30px;"><em>test = test.replace(&#8216;male&#8217;, 1).replace(&#8216;female&#8217;, 0)</em></p>
<p><strong>Создание дамми-переменных</strong></p>
<p>Далее создаются дамми-переменные для категориальных признаков Embarked (порт посадки) и Pclass (класс билета), что позволяет представить эти признаки в виде бинарных векторов:</p>
<p style="padding-left: 30px;"><em>train = pd.concat([train, pd.get_dummies(train.Embarked, prefix="Emb")], axis=1)</em></p>
<p style="padding-left: 30px;"><em>train = pd.concat([train, pd.get_dummies(train.Pclass, prefix="Pclass")], axis=1)</em></p>
<p style="padding-left: 30px;"><em> </em></p>
<p style="padding-left: 30px;"><em>test = pd.concat([test, pd.get_dummies(test.Embarked, prefix="Emb")], axis=1)</em></p>
<p style="padding-left: 30px;"><em>test = pd.concat([test, pd.get_dummies(test.Pclass, prefix="Pclass")], axis=1)</em></p>
<p><strong>Создание новых признаков</strong></p>
<p>Важным этапом инженерного анализа данных является создание новых признаков, которые могут нести дополнительную информацию для модели. На основе имеющихся признаков Parch (количество родителей и детей) и SibSp (количество братьев, сестер, супругов) был создан новый бинарный признак &#8220;наличие более одного родственника&#8221;, принимающий значение 1, если у пассажира было более одного родственника на борту, и 0 в противном случае.</p>
<p style="padding-left: 30px;"><em>train['more than one relative'] = train.Parch + train.SibSp &gt; 1</em></p>
<p style="padding-left: 30px;"><em>train = train.replace(True, 1).replace(False, 0)</em></p>
<p style="padding-left: 30px;"><em> </em></p>
<p style="padding-left: 30px;"><em>test['more than one relative'] = test.Parch + test.SibSp &gt; 1</em></p>
<p style="padding-left: 30px;"><em>test = test.replace(True, 1).replace(False, 0)</em></p>
<p><strong>Анализ пропущенных значений</strong></p>
<p>Производится анализ пропущенных значений с помощью методов isnull().sum():</p>
<p style="padding-left: 30px;"><em>train</em><em>.</em><em>isnull</em><em>().</em><em>sum</em><em>()</em></p>
<p>Для визуализации используется тепловая карта библиотеки Seaborn, что позволяет наглядно увидеть, в каких колонках присутствуют пропуски:</p>
<p style="padding-left: 30px;"><em>import</em><em> </em><em>seaborn</em><em> </em><em>as</em><em> </em><em>sns</em><em></em></p>
<p style="padding-left: 30px;"><em>sns</em><em>.</em><em>heatmap</em><em>(</em><em>train</em><em>.</em><em>isnull</em><em>(), </em><em>cbar</em><em> = </em><em>False</em><em>).</em><em>set</em><em>_</em><em>title</em><em>(&#8220;Карта пропущенных значений&#8221;)</em></p>
<p><strong>Заполнение пропусков</strong></p>
<p>На основе анализа принимается решение о заполнении пропущенных значений. Для числовых колонок Age и Fare пропуски заменяются средними значениями:</p>
<p style="padding-left: 30px;"><em>numeric_cols = ['Age', 'Fare']</em></p>
<p style="padding-left: 30px;"><em>train[numeric_cols] = train[numeric_cols].fillna(train[numeric_cols].mean())</em></p>
<p style="padding-left: 30px;"><em>test[numeric_cols] = test[numeric_cols].fillna(train[numeric_cols].mean())</em></p>
<p>При этом важно отметить, что для заполнения пропусков в тестовом наборе используются средние значения, вычисленные на тренировочном наборе, чтобы избежать утечки данных.</p>
<p><strong>Формирование признакового пространства</strong></p>
<p>После завершения предобработки формируется список признаков features и целевая переменная target:</p>
<p style="padding-left: 30px;"><em>features = ['Pclass_1', 'Pclass_2', 'Pclass_3', 'Age', 'Sex', 'Fare', 'more than one relative', 'Emb_C', 'Emb_Q', 'Emb_S']</em></p>
<p style="padding-left: 30px;"><em>target = &#8216;Survived&#8217;</em></p>
<p>Данные преобразуются в массивы NumPy для подачи в нейронную сеть:</p>
<p style="padding-left: 30px;"><em>X_train = train[features].values</em></p>
<p style="padding-left: 30px;"><em>Y_train = train[target].values</em></p>
<p style="padding-left: 30px;"><em>X_test = test[features].values</em></p>
<p><strong>Нормализация данных</strong></p>
<p>Важным этапом подготовки данных является нормализация, которая позволяет привести все признаки к единому масштабу и ускорить процесс обучения нейронной сети. Нормализация производится путем вычитания среднего значения и деления на стандартное отклонение:</p>
<p style="padding-left: 30px;"><em>mean = X_train.mean(axis=0)</em></p>
<p style="padding-left: 30px;"><em>std = X_train.std(axis=0)</em></p>
<p style="padding-left: 30px;"><em>X_train = X_train &#8211; mean</em></p>
<p style="padding-left: 30px;"><em>X_train /= std</em></p>
<p style="padding-left: 30px;"><em>X_test = X_test &#8211; mean</em></p>
<p style="padding-left: 30px;"><em>X_test /= std</em></p>
<p><strong>Построение модели нейронной сети</strong></p>
<p>Для построения модели используется последовательная архитектура Sequential с импортом необходимых слоев:</p>
<p style="padding-left: 30px;"><em>from tensorflow.keras.models import Sequential</em></p>
<p style="padding-left: 30px;"><em>from tensorflow.keras.layers import Dense, Dropout</em></p>
<p>Модель состоит из трех полносвязных слоев. Первый слой содержит 200 нейронов с функцией активации ReLU и принимает на вход данные размерности, соответствующей количеству признаков. Второй скрытый слой содержит 20 нейронов также с функцией активации ReLU. Выходной слой содержит один нейрон с сигмоидной функцией активации, что позволяет получать на выходе вероятность принадлежности к классу 1 (выживший) в диапазоне от 0 до 1.</p>
<p>Для предотвращения переобучения после каждого скрытого слоя добавляется слой Dropout с вероятностью отключения нейронов 0.1:</p>
<p style="padding-left: 30px;"><em>model = Sequential()</em></p>
<p style="padding-left: 30px;"><em>model.add(Dense(200, activation=&#8217;relu&#8217;, input_shape=(X_train.shape[1],)))</em></p>
<p style="padding-left: 30px;"><em>model.add(Dropout(0.1))</em></p>
<p style="padding-left: 30px;"><em>model.add(Dense(20, activation=&#8217;relu&#8217;))</em></p>
<p style="padding-left: 30px;"><em>model.add(Dropout(0.1))</em></p>
<p style="padding-left: 30px;"><em>model.add(Dense(1, activation=&#8217;sigmoid&#8217;))</em></p>
<p>После создания модели выводится ее краткое описание:</p>
<p style="padding-left: 30px;"><em>print(model.summary())</em></p>
<p><strong>Компиляция модели</strong></p>
<p>Компиляция модели производится с использованием оптимизатора Adam. В качестве функции потерь используется binary_crossentropy, подходящая для бинарной классификации. Метрикой качества выбрана accuracy – доля правильных ответов:</p>
<p style="padding-left: 30px;"><em>model.compile(optimizer=&#8217;adam&#8217;, loss=&#8217;binary_crossentropy&#8217;, metrics=['accuracy'])</em></p>
<p><strong>Обучение модели</strong></p>
<p>Обучение модели производится на тренировочных данных с валидационным разделением 10% от обучающей выборки. Количество эпох обучения установлено равным 2, размер пакета batch_size равен 1:</p>
<p style="padding-left: 30px;"><em>history = model.fit(X_train, Y_train,</em></p>
<p style="padding-left: 60px;"><em>                    epochs=2,</em></p>
<p style="padding-left: 60px;"><em>                    batch_size=1,</em></p>
<p style="padding-left: 60px;"><em>                    validation_split=0.1,</em></p>
<p style="padding-left: 60px;"><em>                    </em><em>verbose=2)</em></p>
<p><strong>Визуализация процесса обучения</strong></p>
<p>Для визуализации процесса обучения строится график изменения точности на обучающем и проверочном наборах данных:</p>
<p style="padding-left: 30px;"><em>plt.plot(history.history['accuracy'], label=&#8217;Точность на обучающем наборе&#8217;)</em></p>
<p style="padding-left: 30px;"><em>plt.plot(history.history['val_accuracy'], label=&#8217;Точность на проверочном наборе&#8217;)</em></p>
<p style="padding-left: 30px;"><em>plt.xlabel(&#8216;Эпоха обучения&#8217;)</em></p>
<p style="padding-left: 30px;"><em>plt.ylabel(&#8216;Точность&#8217;)</em></p>
<p style="padding-left: 30px;"><em>plt.legend()</em></p>
<p style="padding-left: 30px;"><em>plt.show()</em></p>
<p>График позволяет оценить, насколько хорошо модель обучается, и демонстрирует рост точности в процессе обучения.</p>
<p><strong>Предсказание на тестовых данных</strong></p>
<p>После завершения обучения производится предсказание на тестовых данных:</p>
<p style="padding-left: 30px;"><em>predictions = model.predict(X_test)</em></p>
<p>Полученные предсказания представляют собой вероятности принадлежности к классу 1. Для преобразования вероятностей в бинарные метки используется пороговое значение 0.5:</p>
<p style="padding-left: 30px;"><em>sample_submission[target] = [0 if pred &lt; 0.5 else 1 for pred in predictions]</em></p>
<p><strong>Экспорт результатов</strong></p>
<p>Полученные предсказания записываются в файл-образец и сохраняются в файл titanic_submission.csv:</p>
<p style="padding-left: 30px;"><em>sample_submission.to_csv(&#8216;titanic_submission.csv&#8217;)</em></p>
<p>Поскольку работа велась в Google Colab, для загрузки файла на локальный компьютер используется модуль files:</p>
<p style="padding-left: 30px;"><em>from google.colab import files</em></p>
<p style="padding-left: 30px;"><em>files.download(&#8216;titanic_submission.csv&#8217;)</em></p>
<p><strong>Заключение</strong></p>
<p>В результате выполненной работы была построена нейросетевая модель, способная с высокой точностью предсказывать выживаемость пассажиров Титаника на основе предоставленных характеристик. В процессе решения были отработаны ключевые этапы построения модели машинного обучения: загрузка и анализ данных, предобработка и создание новых признаков, заполнение пропусков, нормализация, построение архитектуры нейронной сети с регуляризацией, обучение и оценка качества, формирование предсказаний и экспорт результатов.</p>
<p>Полученный опыт может быть использован для решения других задач классификации и регрессии, а также служить основой для изучения более сложных архитектур нейронных сетей и методов глубокого обучения.</p>
]]></content:encoded>
			<wfw:commentRss>https://web.snauka.ru/issues/2026/03/104341/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
