Цель набора данных Titanic — предсказать, выжил ли пассажир после столкновения лайнера «Титаник» с айсбергом и его последующего затопления, основываясь на информации о пассажирах.
Структурированные данные обычно подвергаются предварительной обработке с использованием DataFrame из библиотеки Pandas.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import tensorflow as tf
from tensorflow.keras import models,layers
dftrain_raw = pd.read_csv('./data/titanic/train.csv')
dftest_raw = pd.read_csv('./data/titanic/test.csv')
dftrain_raw.head(10)

Поля:
Используя возможности визуализации данных Pandas, мы можем провести простой исследовательский анализ данных EDA (Exploratory Data Analysis).
Распределение меток:
%matplotlib inline
%config InlineBackend.figure_format = 'png'
ax = dftrain_raw['Survived'].value_counts().plot(kind = 'bar',
figsize = (12,8),fontsize=15,rot = 0)
ax.set_ylabel('Counts',fontsize = 15)
ax.set_xlabel('Survived',fontsize = 15)
plt.show()

Возрастное распределение:
%matplotlib inline
%config InlineBackend.figure_format = 'png'
ax = dftrain_raw['Age'].plot(kind = 'hist',bins = 20,color= 'purple',
figsize = (12,8),fontsize=15)
ax.set_ylabel('Frequency',fontsize = 15)
ax.set_xlabel('Age',fontsize = 15)
plt.show()

Связь возраста и метки:
%matplotlib inline
%config InlineBackend.figure_format = 'png'
ax = dftrain_raw.query('Survived == 0')['Age'].plot(kind = 'density',
figsize = (12,8),fontsize=15)
dftrain_raw.query('Survived == 1')['Age'].plot(kind = 'density',
figsize = (12,8),fontsize=15)
ax.legend(['Survived==0','Survived==1'],fontsize = 12)
ax.set_ylabel('Density',fontsize = 15)
ax.set_xlabel('Age',fontsize = 15)
plt.show()

Ниже приведена официальная предварительная обработка данных:
def preprocessing(dfdata):
dfresult= pd.DataFrame()
#Pclass
dfPclass = pd.get_dummies(dfdata['Pclass'])
dfPclass.columns = ['Pclass_' +str(x) for x in dfPclass.columns ]
dfresult = pd.concat([dfresult,dfPclass],axis = 1)
#Sex
dfSex = pd.get_dummies(dfdata['Sex'])
dfresult = pd.concat([dfresult,dfSex],axis = 1)
#Age
dfresult['Age'] = dfdata['Age'].fillna(0)
dfresult['Age_null'] = pd.isna(dfdata['Age']).astype('int32')
#SibSp,Parch,Fare
dfresult['SibSp'] = dfdata['SibSp']
dfresult['Parch'] = dfdata['Parch']
dfresult['Fare'] = dfdata['Fare']
#Carbin
dfresult['Cabin_null'] = pd.isna(dfdata['Cabin']).astype('int32')
#Embarked
dfEmbarked = pd.get_dummies(dfdata['Embarked'],dummy_na=True)
dfEmbarked.columns = ['Embarked_' + str(x) for x in dfEmbarked.columns]
dfresult = pd.concat([dfresult,dfEmbarked],axis = 1)
return(dfresult)
x_train = preprocessing(dftrain_raw)
y_train = dftrain_raw['Survived'].values
x_test = preprocessing(dftest_raw)
y_test = dftest_raw['Survived'].values
print("x_train.shape =", x_train.shape )
print("x_test.shape =", x_test.shape )
x_train.shape = (712, 15)
x_test.shape = (179, 15)
В Keras есть три способа создания модели: использование Sequential для построения модели по слоям, использование функционального API для создания моделей произвольной структуры и наследование от базового класса Model для создания пользовательских моделей. Здесь мы выбираем самый простой способ — Sequential, модель, построенная по слоям.
tf.keras.backend.clear_session()
model = models.Sequential()
model.add(layers.Dense(20,activation = 'relu',input_shape=(15,)))
model.add(layers.Dense(10,activation = 'relu' ))
model.add(layers.Dense(1,activation = 'sigmoid' ))
model.summary()
``` ```
dense_2 (Dense) (None, 1) 11
=================================================================
Всего параметров: 541
Обучаемых параметров: 541
Необучаемых параметров: 0
_________________________________________________________________
### 三,训练模型
Обучение модели обычно выполняется тремя способами: встроенным методом fit, встроенным методом train_on_batch и пользовательским циклом обучения. Здесь мы выбираем наиболее часто используемый и самый простой встроенный метод fit.
```python
# Для задачи бинарной классификации используется функция потерь бинарная кросс-энтропия
model.compile(optimizer='adam',
loss='binary_crossentropy',
metrics=['AUC'])
history = model.fit(x_train,y_train,
batch_size= 64,
epochs= 30,
validation_split=0.2 # Разделение части обучающих данных для валидации
)
Обучить на 569 образцах, валидировать на 143 образцах Эпоха 1/30 569/569 [==============================] - 1s 2ms/sample - потеря: 3.5841 - AUC: 0.4079 - val_потеря: 3.4429 - val_AUC: 0.4129 Эпоха 2/30 569/569 [==============================] - 0s 102us/sample - потеря: 2.6093 - AUC: 0.3967 - val_потеря: 2.4886 - val_AUC: 0.4139 ...
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )