<?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; Keras</title>
	<atom:link href="http://web.snauka.ru/issues/tag/keras/feed" rel="self" type="application/rss+xml" />
	<link>https://web.snauka.ru</link>
	<description></description>
	<lastBuildDate>Fri, 17 Apr 2026 07:29:22 +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/2025/12/103962</link>
		<comments>https://web.snauka.ru/issues/2025/12/103962#comments</comments>
		<pubDate>Mon, 08 Dec 2025 16:10:09 +0000</pubDate>
		<dc:creator>Бадрисламов Денис Игоревич</dc:creator>
				<category><![CDATA[01.00.00 ФИЗИКО-МАТЕМАТИЧЕСКИЕ НАУКИ]]></category>
		<category><![CDATA[Keras]]></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/12/103962</guid>
		<description><![CDATA[Анализ данных о пассажирах «Титаника» остается актуальной темой в области машинного обучения и исторической аналитики. Катастрофа 1912 года является не только трагическим событием, но и уникальным источником данных, позволяющим изучать влияние социально-демографических факторов на выживаемость в экстремальных условиях. Использование современных методов, таких как нейронные сети, позволяет строить точные модели для предсказания исхода, что важно для [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Анализ данных о пассажирах «Титаника» остается актуальной темой в области машинного обучения и исторической аналитики. Катастрофа 1912 года является не только трагическим событием, но и уникальным источником данных, позволяющим изучать влияние социально-демографических факторов на выживаемость в экстремальных условиях. Использование современных методов, таких как нейронные сети, позволяет строить точные модели для предсказания исхода, что важно для понимания исторических закономерностей и разработки алгоритмов классификации.</p>
<p style="text-align: justify;"><span>В данной работе анализируется набор данных, содержащий информацию о пассажирах: класс, пол, возраст, наличие родственников, порт посадки и другие признаки. Цель – построить модель, предсказывающую, выжил ли пассажир (бинарная классификация). Для этого используется нейронная сеть, реализованная на Keras, с предварительной обработкой данных: заполнением пропусков, кодированием категориальных переменных и нормализацией числовых признаков. Алгоритм включает следующие шаги:<br />
</span></p>
<p style="text-align: center;"><img src="https://web.snauka.ru/wp-content/uploads/2025/12/120825_1600_1.png" alt="" /><span><br />
</span></p>
<p style="text-align: center;"><span>Рисунок 1. Динамика точности модели в процессе обучения<br />
</span></p>
<ul>
<li><span style="text-align: justify;">импортируем необходимые библиотеки: TensorFlow/Keras, Pandas, NumPy, Matplotlib и Seaborn;</span></li>
<li>загружаем обучающий и тестовый наборы данных, монтируем Google Drive для доступа к файлам;</li>
<li>преобразуем категориальные признаки (пол, порт посадки, класс) в числовой формат с помощью one-hot кодирования;</li>
<li>создаем новый признак &#8220;more than one relative&#8221; на основе количества родственников на борту;</li>
<li>визуализируем пропущенные значения с помощью тепловой карты Seaborn;</li>
<li>заполняем пропуски в числовых столбцах средними значениями;</li>
<li>выделяем признаки и целевую переменную, преобразуем данные в массивы NumPy;</li>
<li>стандартизируем данные, вычитая среднее и деля на стандартное отклонение;</li>
<li>строим модель нейронной сети с тремя полносвязными слоями и Dropout для регуляризации;</li>
<li>компилируем модель с оптимизатором Adam, функцией потерь binary_crossentropy и метрикой accuracy;</li>
<li>обучаем модель на 10 эпохах с валидационной выборкой 10%;</li>
<li>
<div style="text-align: justify;">
<p style="display: inline !important;">визуализируем динамику точности на обучающей и валидационной выборках;</p>
</div>
</li>
</ul>
<p>Этот алгоритм является типовым для задач классификации и демонстрирует ключевые этапы работы с нейронными сетями в Keras.</p>
<p style="text-align: justify;">Ниже приведен фрагмент кода:</p>
<p style="background: white;"><span style="color: #9723b4;">from<span style="color: black;"> tensorflow.keras.models <span style="color: #9723b4;">import<span style="color: black;"> Sequential<br />
</span></span></span></span></p>
<p style="background: white;"><span style="color: #9723b4;">from<span style="color: black;"> tensorflow.keras.layers <span style="color: #9723b4;">import<span style="color: black;"> Dense, Dropout, BatchNormalization<br />
</span></span></span></span></p>
<p style="background: white;"><span style="color: #9723b4;">import<span style="color: black;"> pandas <span style="color: #9723b4;">as<span style="color: black;"> pd<br />
</span></span></span></span></p>
<p style="background: white;"><span style="color: #9723b4;">import<span style="color: black;"> numpy <span style="color: #9723b4;">as<span style="color: black;"> np<br />
</span></span></span></span></p>
<p style="background: white;"><span style="color: #9723b4;">import<span style="color: black;"> matplotlib.pyplot <span style="color: #9723b4;">as<span style="color: black;"> plt<br />
</span></span></span></span></p>
<p style="background: white;"><span style="color: blue;">%matplotlib <span style="color: black;">inline<br />
</span></span></p>
<p style="background: white;"><span style="color: green;"># Загружаем данные для обучения<span style="color: black;"><br />
train = pd.read_csv(PATH + <span style="color: #a31515;">&#8216;train.csv&#8217;<span style="color: black;">).replace(<span style="color: #a31515;">&#8216;male&#8217;<span style="color: black;">, <span style="color: #116644;">1<span style="color: black;">).replace(<span style="color: #a31515;">&#8216;female&#8217;<span style="color: black;">, <span style="color: #116644;">0<span style="color: black;">)<br />
</span></span></span></span></span></span></span></span></span></span></span></span></p>
<p style="background: white;"><span>train = pd.concat([train, pd.get_dummies(train.Embarked, prefix=<span style="color: #a31515;">"Emb"<span style="color: black;">)], axis=<span style="color: #116644;">1<span style="color: black;">)<br />
</span></span></span></span></span></p>
<p style="background: white;"><span>train = pd.concat([train, pd.get_dummies(train.Pclass, prefix=<span style="color: #a31515;">"Pclass"<span style="color: black;">)], axis=<span style="color: #116644;">1<span style="color: black;">)<br />
</span></span></span></span></span></p>
<p style="background: white;"><span>train[<span style="color: #a31515;">'more than one relative'<span style="color: black;">] = train.Parch + train.SibSp &gt; <span style="color: #116644;">1<span style="color: black;"><br />
</span></span></span></span></span></p>
<p style="background: white;"><span>train = train.replace(<span style="color: blue;">True<span style="color: black;">, <span style="color: #116644;">1<span style="color: black;">).replace(<span style="color: blue;">False<span style="color: black;">, <span style="color: #116644;">0<span style="color: black;">)<br />
</span></span></span></span></span></span></span></span></span></p>
<p style="background: white;"><span style="color: green;"># Загружаем данные для тестирования<br />
</span></p>
<p style="background: white;"><span>test = pd.read_csv(PATH + <span style="color: #a31515;">&#8216;test.csv&#8217;<span style="color: black;">).replace(<span style="color: #a31515;">&#8216;male&#8217;<span style="color: black;">, <span style="color: #116644;">1<span style="color: black;">).replace(<span style="color: #a31515;">&#8216;female&#8217;<span style="color: black;">, <span style="color: #116644;">0<span style="color: black;">)<br />
</span></span></span></span></span></span></span></span></span></span></span></p>
<p style="background: white;"><span>test = pd.concat([test, pd.get_dummies(test.Embarked, prefix=<span style="color: #a31515;">"Emb"<span style="color: black;">)], axis=<span style="color: #116644;">1<span style="color: black;">)<br />
</span></span></span></span></span></p>
<p style="background: white;"><span>test = pd.concat([test, pd.get_dummies(test.Pclass, prefix=<span style="color: #a31515;">"Pclass"<span style="color: black;">)], axis=<span style="color: #116644;">1<span style="color: black;">)<br />
</span></span></span></span></span></p>
<p style="background: white;"><span>test[<span style="color: #a31515;">'more than one relative'<span style="color: black;">] = test.Parch + test.SibSp &gt; <span style="color: #116644;">1<span style="color: black;"><br />
</span></span></span></span></span></p>
<p style="background: white;"><span>test = test.replace(<span style="color: blue;">True<span style="color: black;">, <span style="color: #116644;">1<span style="color: black;">).replace(<span style="color: blue;">False<span style="color: black;">, <span style="color: #116644;">0<span style="color: black;">)<br />
</span></span></span></span></span></span></span></span></span></p>
<p style="text-align: justify;">Процесс работы показан на рисунке 2 (изображение сгенерировано нейросетью):</p>
<p style="text-align: center;"><img src="https://web.snauka.ru/wp-content/uploads/2025/12/120825_1600_2.png" alt="" /></p>
<p style="text-align: center;">Рисунок 2. Архитектура построения нейронной сети</p>
<p style="text-align: left;"><strong>Заключение<br />
</strong></p>
<p style="text-align: justify;">Анализ данных о пассажирах «Титаника» с использованием нейронных сетей демонстрирует высокую эффективность машинного обучения для решения задач бинарной классификации. Модель позволяет выявить ключевые факторы, влиявшие на выживаемость, такие как класс билета, пол и возраст. Однако важно учитывать исторический контекст и этические аспекты работы с данными. Полученные результаты могут быть использованы в образовательных целях, а также для разработки более сложных моделей анализа выживаемости. Исследование подчеркивает ценность междисциплинарного подхода, сочетающего историю и data science.</p>
]]></content:encoded>
			<wfw:commentRss>https://web.snauka.ru/issues/2025/12/103962/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Классификация Ирисов Фишера с использованием нейронных сетей: подход на основе Keras</title>
		<link>https://web.snauka.ru/issues/2025/12/103966</link>
		<comments>https://web.snauka.ru/issues/2025/12/103966#comments</comments>
		<pubDate>Tue, 09 Dec 2025 09:57:53 +0000</pubDate>
		<dc:creator>Хасанов Даниэль Рустамович</dc:creator>
				<category><![CDATA[01.00.00 ФИЗИКО-МАТЕМАТИЧЕСКИЕ НАУКИ]]></category>
		<category><![CDATA[Keras]]></category>
		<category><![CDATA[TensorFlow]]></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/12/103966</guid>
		<description><![CDATA[Классификация Ирисов Фишера остается фундаментальной и актуальной задачей в области машинного обучения и искусственного интеллекта. Набор данных, включающий измерения чашелистиков и лепестков трех видов ирисов, десятилетиями используется как идеальный полигон для тестирования алгоритмов классификации, от линейных моделей до глубоких нейронных сетей. В эпоху повсеместного распространения ИИ эта задача сохраняет свою дидактическую ценность, позволяя наглядно демонстрировать [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Классификация Ирисов Фишера остается фундаментальной и актуальной задачей в области машинного обучения и искусственного интеллекта. Набор данных, включающий измерения чашелистиков и лепестков трех видов ирисов, десятилетиями используется как идеальный полигон для тестирования алгоритмов классификации, от линейных моделей до глубоких нейронных сетей. В эпоху повсеместного распространения ИИ эта задача сохраняет свою дидактическую ценность, позволяя наглядно демонстрировать этапы построения модели: от загрузки данных и их нормализации до проектирования архитектуры сети и анализа её точности. Использование современных фреймворков, таких как TensorFlow и Keras, делает процесс доступным даже для новичков, а сама задача служит отправной точкой для решения более сложных проблем компьютерного зрения и анализа данных.</p>
<p style="text-align: justify;"><span>В данной работе для классификации ирисов используется полносвязная нейронная сеть, реализованная на Keras. Модель принимает на вход четыре нормализованных признака: длину и ширину чашелистика, длину и ширину лепестка. Архитектура сети включает скрытые слои с функцией активации ReLU и выходной слой с функцией softmax для многоклассовой классификации. Обучение проводится с оптимизатором Adam на протяжении 20 эпох, а процесс отслеживается по графикам точности на обучающей и проверочной выборках. Такой подход позволяет достичь высокой точности предсказания и служит примером стандартного пайплайна для задач классификации табличных данных.<br />
</span></p>
<p style="text-align: center;"><img src="https://web.snauka.ru/wp-content/uploads/2025/12/120925_0954_1.png" alt="" /><span><br />
</span></p>
<p style="text-align: center;"><span>Рисунок 1. Динамика точности модели в процессе обучения<br />
</span></p>
<p style="text-align: justify;"><span>Алгоритм решения задачи по построению модели классификации для набора данных Ирисов Фишера включает следующие последовательные шаги с использованием языка Python и библиотек TensorFlow/Keras.<br />
</span></p>
<ul>
<li><span style="text-align: justify;">импортируем необходимые библиотеки: TensorFlow/Keras, pandas, numpy и matplotlib;</span></li>
<li>подключаем Google Drive и загружаем обучающий и тестовый наборы данных из CSV-файлов;</li>
<li>выделяем матрицу признаков и вектор целевой переменной из обучающих данных;</li>
<li>проводим стандартизацию признаков, вычитая среднее значение и деля на стандартное отклонение;</li>
<li>создаём последовательную модель нейронной сети с двумя скрытыми полносвязными слоями и выходным слоем на 3 нейрона;</li>
<li>компилируем модель, выбирая оптимизатор Adam и функцию потерь sparse_categorical_crossentropy;</li>
<li>обучаем модель на подготовленных данных, выделяя часть для валидации;</li>
<li><span style="text-align: justify;">строим график изменения точности на обучающей и проверочной выборках по эпохам;</span></li>
<li>используем обученную модель для предсказания классов на тестовом наборе данных;</li>
<li>
<div style="text-align: justify;">сохраняем результаты предсказаний в файл для отправки или последующего анализа.</div>
</li>
</ul>
<p>Этот алгоритм является типовым для задач классификации и демонстрирует ключевые этапы работы с нейронными сетями в Keras.</p>
<p style="text-align: justify;">Ниже приведен фрагмент кода, реализующий ключевые шаги алгоритма:<span style="background-color: lime;"><br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">from tensorflow.keras.models import Sequential<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">from tensorflow.keras.layers import Dense<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">import pandas as pd<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">import numpy as np<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">import matplotlib.pyplot as plt<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">train = pd.read_csv(&#8216;train.csv&#8217;)<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">test = pd.read_csv(&#8216;test.csv&#8217;)<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">features = ["SepalLength", "SepalWidth", "PetalLength", "PetalWidth"]<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">target = &#8216;Species&#8217;<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">x_train = train[features].values<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">y_train = train[target].values<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">x_test = test[features].values<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">mean = x_train.mean(axis=0)<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">std = x_train.std(axis=0)<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">x_train -= mean<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">x_train /= std<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">x_test -= mean<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">x_test /= std<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">model = Sequential()<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">model.add(Dense(100, activation=&#8217;relu&#8217;, input_shape=(x_train.shape[1],)))<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">model.add(Dense(16, activation=&#8217;relu&#8217;))<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">model.add(Dense(3, activation=&#8217;softmax&#8217;))<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">model.compile(optimizer=&#8217;adam&#8217;,<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;"> loss=&#8217;sparse_categorical_crossentropy&#8217;,<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;"> metrics=['accuracy'])<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">history = model.fit(x_train, y_train, epochs=20, validation_split=0.1, verbose=2)<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">plt.plot(history.history['accuracy'], label=&#8217;Точность на обучении&#8217;)<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">plt.plot(history.history['val_accuracy'], label=&#8217;Точность на валидации&#8217;)<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">plt.xlabel(&#8216;Эпоха&#8217;)<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">plt.ylabel(&#8216;Точность&#8217;)<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">plt.legend()<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">plt.show()<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">predictions = model.predict(x_test)<br />
</span></p>
<p style="text-align: justify;"><span style="color: #9723b4;">predictions = np.argmax(predictions, axis=1)</span></p>
<p style="text-align: justify;">Процесс обучения модели визуализирован на Рисунке 2 (изображение сгенерировано нейросетью):</p>
<p style="text-align: center;"><img src="https://web.snauka.ru/wp-content/uploads/2025/12/120925_0954_2.png" alt="" /></p>
<p style="text-align: center;">Рисунок 2. Архитектура используемой нейронной сети</p>
<p style="text-align: left;"><strong>Заключение<br />
</strong></p>
<p style="text-align: justify;">Задача классификации Ирисов Фишера, несмотря на свою простоту и давнюю историю, продолжает оставаться важным учебным и тестовым инструментом в области машинного обучения. Использование нейронных сетей, как показано в работе, позволяет эффективно решать эту задачу, демонстрируя типичный пайплайн для обработки табличных данных. Ключевыми этапами являются корректная предобработка данных, выбор архитектуры сети и мониторинг процесса обучения. Модель успешно справляется с классификацией, что подтверждает применимость полносвязных сетей для подобных задач. Освоение работы с этим набором данных формирует прочную основу для перехода к более сложным современным проблемам искусственного интеллекта.</p>
]]></content:encoded>
			<wfw:commentRss>https://web.snauka.ru/issues/2025/12/103966/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>
