您现在的位置是:主页 > news > 网站设计背景图片/新东方留学机构官网
网站设计背景图片/新东方留学机构官网
admin2025/5/4 10:46:20【news】
简介网站设计背景图片,新东方留学机构官网,在手机上做网站是什么软件,常见的静态网页文章目录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_loss
和val_auc
否则只有loss 和 auc
7. 训练数据可视化
- 将要画的数据通过
pandas
进行结构化处理;- 这里把
loss
和val_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 的源代码基础上进行重写,重新思考和添加或删减的,如果有错误或者不能精准实现功能,请自行进行调整,毕竟每个人的思路都不是一样的,有错误望指正