数学建模之Python-tensorflow神经网络实现二分类预测

题目要求

五列值 标签为01 预测病马的死亡率。
原本使用了logitic逻辑回归模型 预测了结果 但没有概率 后来尝试借鉴大佬的手撸代码 结果不太对
后来又学习到大佬的tensorflow神经网络 可以正确预测出概率 并画出正确率图,且正确率很高

数据集

data_horse.csv(https://download.csdn.net/download/weixin_45678130/33622466
在这里插入图片描述

代码:

import tensorflow as tf

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

frTrain = pd.read_csv("data_horse.csv",encoding="ANSI")
frTest = pd.read_csv("data_horse.csv",encoding="ANSI")
train_image = frTrain.iloc[:357, 0:5].values
train_lable = frTrain.iloc[:357, 5].values
test_image = frTest.iloc[357:, 0:5].values
test_lable = frTest.iloc[357:, 5].values

# print(train_image.size)

# 创建模型
model = tf.keras.Sequential()

model.add(tf.keras.layers.Dense(256, input_shape=(356, 5), activation='relu'))  # 第一层
model.add(tf.keras.layers.Dense(128, activation='relu'))  # 第二层   自动推断输入层
model.add(tf.keras.layers.Dense(64, activation='relu'))  # 第二层   自动推断输入层
model.add(tf.keras.layers.Dense(1, activation='sigmoid'))  # 第三层 激活函数选择sigmod  将输出结果映射到sigmoid函数上 输出一个概率
# 编译  =---优化器,损失函数,评估函数
model.compile(optimizer='adam',  # rmspropadam
              loss='binary_crossentropy',
              metrics=['acc']

              )
# 训练模型---输入参数
history = model.fit(train_image, train_lable, epochs=1100)  # epochs训练迭代轮次
# 保存模型
model.save("my_model3")
# 调用保存的模型
reconstructed_model = tf.keras.models.load_model("my_model3")

# print(reconstructed_model.predict(test_image))

gailv = reconstructed_model.predict(test_image)

# 输出概率后6位小数
for i in gailv:
    print("%.6f" % i)

print(gailv)

for i in gailv:
    if i > 0.5:
        print("1")
    else:
        print("0")

# 绘制正确率折线图
plt.plot(history.epoch, history.history.get('acc'))

plt.show()

补充:
在这里插入图片描述
如上sigmoid代表二分类,如果需要多分类需要其他参数
在这里插入图片描述
如上代表356行5列训练集 需要适当调整好自己的参数

运行截图:

代表1000代时正确率已经很高了 接近于1
在这里插入图片描述
如下为预测集最后的概率预测结果
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45678130/article/details/119798747