<?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; Titanic</title>
	<atom:link href="http://web.snauka.ru/issues/tag/titanic/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/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>
