1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/Python_Ai_Road-eat_tensorflow2_in_30_days

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
1-1,结构化数据建模流程范例.md 8 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 03.12.2024 15:14 374a95e

1-1, Пример процесса моделирования структурированных данных

Один, подготовка данных

Цель набора данных 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)

![](./data/1-1-Данные для демонстрации.jpg)

Поля:

  • Survived: 0 означает смерть, 1 означает выживание [метка класса]
  • Pclass: класс билета пассажира, имеет три значения (1,2,3) [преобразование в one-hot кодирование]
  • Name: имя пассажира [удалить]
  • Sex: пол пассажира [преобразовать в булевый признак]
  • Age: возраст пассажира (есть пропуски) [числовой признак, добавить «возраст отсутствует» как вспомогательный признак]
  • SibSp: количество братьев, сестёр или супругов пассажира (целое число) [числовой признак]
  • Parch: количество родителей или детей пассажира (целое число) [числовой признак]
  • Ticket: номер билета (строка) [удалить]
  • Fare: стоимость билета пассажира (число с плавающей точкой, от 0 до 500) [числовой признак]
  • Cabin: каюта пассажира (есть пропуски) [добавить «каюта отсутствует» как вспомогательный признак]
  • Embarked: порт посадки пассажира: S, C, Q (есть пропуски) [преобразовать в one-hot кодирование, четыре измерения S,C,Q,nan]

Используя возможности визуализации данных 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()

![](./data/1-1-Распределение меток.jpg)

Возрастное распределение:

%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()

![](./data/1-1-Возрастное распределение.jpg)

Связь возраста и метки:

%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()

![](./data/1-1-Связь возраста и меток.jpg)

Ниже приведена официальная предварительная обработка данных:

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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/Python_Ai_Road-eat_tensorflow2_in_30_days.git
git@api.gitlife.ru:oschina-mirror/Python_Ai_Road-eat_tensorflow2_in_30_days.git
oschina-mirror
Python_Ai_Road-eat_tensorflow2_in_30_days
Python_Ai_Road-eat_tensorflow2_in_30_days
master