您现在的位置是:主页 > news > 网站设计背景图片/新东方留学机构官网

网站设计背景图片/新东方留学机构官网

admin2025/5/4 10:46:20news

简介网站设计背景图片,新东方留学机构官网,在手机上做网站是什么软件,常见的静态网页文章目录1. 数据集获取、分割2. 数据的可视化2.1 生还者和没生还者的比例2.2 年龄分布2.3 性别分布2.3 所有变量的相关性3. 数据预处理4. 建立模型5. 训练模型6. 查看训练过程数据7. 训练数据可视化8. 模型保存8.1 Keras 的方式保存和读取8.1 Keras 方式保存模型(不…

网站设计背景图片,新东方留学机构官网,在手机上做网站是什么软件,常见的静态网页文章目录1. 数据集获取、分割2. 数据的可视化2.1 生还者和没生还者的比例2.2 年龄分布2.3 性别分布2.3 所有变量的相关性3. 数据预处理4. 建立模型5. 训练模型6. 查看训练过程数据7. 训练数据可视化8. 模型保存8.1 Keras 的方式保存和读取8.1 Keras 方式保存模型(不…

文章目录

  • 1. 数据集获取、分割
  • 2. 数据的可视化
    • 2.1 生还者和没生还者的比例
    • 2.2 年龄分布
    • 2.3 性别分布
    • 2.3 所有变量的相关性
  • 3. 数据预处理
  • 4. 建立模型
  • 5. 训练模型
  • 6. 查看训练过程数据
  • 7. 训练数据可视化
  • 8. 模型保存
    • 8.1 Keras 的方式保存和读取
        • 8.1 Keras 方式保存模型(不能跨平台,只能python使用)
        • 8.2 Keras 方式重新加载模型和参数
    • 8.2 Tensorflow 原生的方式保存和读取
  • 9. 写在后面

1. 数据集获取、分割

kaggle 上有数据集,但是我只找到了训练集没有找到测试集合,所以我准备将训练集中的一部分拿出来当作测试集,以下是我分割训练集和测试集的代码。
下载网址: https://www.kaggle.com/chickgod/train-tatanic

  • 原文件叫 tatanic.csv
  • 训练集文件叫 tatanic_train.csv
  • 测试集文件叫 tatanic_test.csv
import csv
import pandas as pd# 把全部的数据读进来
with open('tatanic.csv','r') as f:o_file = csv.reader(f)# 每 8 个数据抽取一个做测试集counter = 0for row in o_file:if counter % 8 == 0:with open('tatanic_test.csv','a',newline='') as f2:writer = csv.writer(f2)writer.writerow(row)else:with open('tatanic_train.csv','a',newline='') as f3:writer = csv.writer(f3)writer.writerow(row)counter += 1## 这样操作之后,原来 csv 的标题行会被写入 tatanic_test.csv 中,但是不会写入 tatanic_train.csv 中
## 所以这里需要在 tatanic_train.csv 文件中重新加上标头行csv_file = pd.read_csv('tatanic.csv')
title_line = csv_file.columnstrain_file = pd.read_csv('tatanic_train.csv', header=None)
train_file.columns = title_line
train_file.to_csv('tatanic_train.csv')

错误写法:

csv_file = pd.read_csv('tatanic.csv')
title_line = csv_file.columnstrain_file = pd.read_csv('tatanic_train.csv', header=None)
train_file.to_csv('tatanic_train.csv',columns=title_line)

不可以直接在写入 csv 文件的时候指定 column,原因我也不知道是什么,总之大家注意一下

2. 数据的可视化

2.1 生还者和没生还者的比例

## 生还的人和没生还的比例
csv_doc = pd.read_csv('tatanic.csv')
df = pd.DataFrame(csv_doc)survive = df['Survived']
static_data = survive.value_counts()
print(static_data)
x_axis = [str(i) for i in static_data.keys()]
y_axis = static_data.values
plt.bar(x_axis,y_axis)
plt.show()

在这里插入图片描述

2.2 年龄分布

#######年龄分布age_info = df['Age']
plt.hist(age_info,bins=20,color='skyblue')
plt.show()

在这里插入图片描述

2.3 性别分布

#### 男女比例sex_info = df['Sex']
statistic_data = sex_info.value_counts()
x_axis = [i for i in statistic_data.keys()]
y_axis = statistic_data.values
plt.bar(x_axis,y_axis)
plt.show()

在这里插入图片描述

2.3 所有变量的相关性

corr_metrix = df.corr(method='pearson')
print(corr_metrix)
sns.heatmap(corr_metrix,annot=True,cmap=palettable.cmocean.diverging.Curl_10.mpl_colors)
# sns.heatmap(corr_metrix,annot=True)
plt.show()

在这里插入图片描述

3. 数据预处理

import pandas as pd# 有些特征没有用可以直接过滤掉,比如 passengerID,Name,Ticketdef processing(df_doc):df_result = pd.DataFrame()#### Pclass 转成one-hot编码df_doc_Pclass = pd.get_dummies(df_doc['Pclass'])df_doc_Pclass.columns = ['Pclass' + str(i) for i in df_doc_Pclass.columns]df_result = pd.concat((df_result,df_doc_Pclass),axis=1)#### Name 不要了#### sex 转换成独热码df_doc_Sex = pd.get_dummies(df_doc['Sex'])df_result = pd.concat((df_result,df_doc_Sex),axis=1)#### age 不需要转换直接添加, 因为存在空值,所以需要加一项辅助判断是否有空值df_result = pd.concat((df_result,df_doc['Age'].fillna(0)),axis=1)df_age_is_null = df_doc['Age'].isna().astype('int32')df_result['Age_is_null'] = df_age_is_nullprint(df_result)#### SibSp	Parch	Fare 作为数字特征直接搬过来  Ticket 不重要,直接舍去df_result = pd.concat((df_result,df_doc['SibSp'],df_doc['Parch'],df_doc['Fare']),axis=1)#### 对于 cabin 这一列的空值,我们不进行填充,但是增加辅助列 cabin_null 作为辅助特征df_result['Cabin_null'] = pd.isna(df_doc['Cabin']).astype('int32')#### embarked 一共分三类用独热编码处理df_doc_embarked = pd.get_dummies(df_doc['Embarked'])df_result = pd.concat((df_result,df_doc_embarked),axis=1)print(df_result)return df_resultif __name__ == '__main__':df_doc_train = pd.read_csv('tatanic_train.csv')df_doc_train = pd.DataFrame(df_doc_train)df_doc_test = pd.read_csv('tatanic_test.csv')df_doc_test = pd.DataFrame(df_doc_test)df_train_data = processing(df_doc_train)df_train_label = df_doc_train['Survived'].valuesdf_test_data = processing(df_doc_test)df_test_label = df_doc_test['Survived'].values

注释写的挺详细的,需要的自己看一下吧~

4. 建立模型

import tensorflow as tf
from tensorflow.keras import layers, modelsdef model(train_data,train_label):model = models.Sequential()model.add(layers.Dense(20, activation='relu', input_shape=(15,)))model.add(layers.Dense(40, activation='relu'))model.add(layers.Dense(80, activation='relu'))model.add(layers.Dense(40, activation='relu'))model.add(layers.Dense(1, activation='sigmoid'))model.compile(optimizer='adam', loss='binary_crossentropy', metrics=["AUC"])record = model.fit(train_data,train_label, batch_size=64, epochs=30, validation_split=0.2)return model, record

特别注意,这里一定要用 tensorflow.keras 而不要直接从 keras 里面import layer模块和models模块,否则会报以下错误:

    raise TypeError("Using a `tf.Tensor` as a Python `bool` is not allowed. "
TypeError: Using a `tf.Tensor` as a Python `bool` is not allowed. Use `if t is not None:` instead of `if t:` to test if a tensor is defined, and use TensorFlow ops such as tf.cond to execute subgraphs conditioned on the value of a tensor.
  • 模块导入的时候改成 from tensorflow.keras import models, layers 问题就解决了
  • 在训练模型 fit 的时候,我们用 record 变量来接受这个训练的过程,把所有的训练的信息都保存在了 record 里,可以方便后面用 record 里的数据来进行作图

5. 训练模型

model, record = model(df_train_data,df_train_label)

训练的部分是用 fit 函数来进行的,这里调用刚才定义的 model 进行训练 ,训练后返回 model 和 record;
在这里插入图片描述

6. 查看训练过程数据

    loss = record.history['loss']auc = record.history['auc']val_loss = record.history['val_loss']val_auc = record.history['val_auc']print(loss)print(auc)print(val_loss)print(val_auc)

在这里插入图片描述

注意!! 只有在 fit 函数里面设置了 validation_split 才会有 val_lossval_auc 否则只有 loss 和 auc

7. 训练数据可视化

  • 将要画的数据通过 pandas 进行结构化处理;
  • 这里把 lossval_loss 放在一个 dataframe
  • 使用 seaborn 这个库来进行图像绘制,是 matplotlib 的更高级封装,画出的图更好看,更强大
###### loss 曲线import matplotlib.pyplot as pltimport seaborn as snsdf = pd.DataFrame({'loss':loss,'val_loss':val_loss})sns.scatterplot(data=df)sns.lineplot(data=df)plt.show()

在这里插入图片描述

##### auc 曲线 #### val_auc 曲线df2 = pd.DataFrame({'auc':auc,'val_auc':val_auc})sns.scatterplot(data=df2)sns.lineplot(data=df2)plt.show()

在这里插入图片描述

8. 模型保存

8.1 Keras 的方式保存和读取

8.1 Keras 方式保存模型(不能跨平台,只能python使用)

    #### 整个模型保存model.save('./model.h5')#### 只保存权重model.save_weights('./model_weights.h5')#### 保存模型结构structure = model.to_json()

8.2 Keras 方式重新加载模型和参数

	#### 重新加载模型结构和参数model = models.load_model('./model.h5')evaluation = model.evaluate(df_test_data,df_test_label)#### 重新加载参数#(1) 需要先重新恢复模型的结构model_structure = models.model_from_json(json_string=structure)model_structure.compile(        # 重新把所有的模块连接起来并指定优化器、损失和 metricsoptimizer='adam',loss='binary_crossentropy',metrics=['AUC'])#(2) 再载入模型的参数model_structure.load_weights('./model_weights.h5')# 用加载出来的模型进行评估测试evaluation = model_structure.evaluate(df_test_data,df_test_label)  		

8.2 Tensorflow 原生的方式保存和读取

在这里插入图片描述

  • 存储的时候,只是在后面多了个参数设置 save_format = 'tf'
  • tensorflow 存储权重的时候有后缀 ckpt 但是存储整个模型的时候是存到一个文件夹里面
  • 读取的时候还是用的 tensorflow 中的 keras 的模块来进行加载

9. 写在后面

以上所有模块都是在 30天吃掉那只 tensorflow 的源代码基础上进行重写,重新思考和添加或删减的,如果有错误或者不能精准实现功能,请自行进行调整,毕竟每个人的思路都不是一样的,有错误望指正