数据分析-深度学习-前馈神经网络-回归-Tensorflow

前馈神经网络是没有任何循环的网络。数据从输入层,经过隐含层到输出层输出通过一次传递,而没有以前的任何“状态存储”。 

前馈神经网络可以应用与分类,回归等。

分类:数据分析-深度学习-前馈神经网络-分类-Tensorflow_ITLiu_JH的博客-CSDN博客

本例使用保险费用数据集,实现对保险费用的预测。

预测保险费用

import tensorflow as tf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

 读入数据

data=pd.read_csv("d:/datasets/insurance.csv")

 查看数据集

 data.info()
RangeIndex: 1338 entries, 0 to 1337
Data columns (total 7 columns):
 #   Column    Non-Null Count  Dtype  
---  ------    --------------  -----  
 0   age       1338 non-null   int64  
 1   sex       1338 non-null   object 
 2   bmi       1338 non-null   float64
 3   children  1338 non-null   int64  
 4   smoker    1338 non-null   object 
 5   region    1338 non-null   object 
 6   charges   1338 non-null   float64
dtypes: float64(2), int64(2), object(3)
memory usage: 73.3+ KB

 数据集0-5为特征,6为标签,1338个样本。

data_=pd.get_dummies(data,columns=["sex","smoker","region"])

 特征标签分离、训练集测试集分离

x = data_.drop("charges",axis=1)
y = data_["charges"]
from sklearn.model_selection import train_test_split
train_x,test_x,train_y,test_y=train_test_split(x,y,train_size=0.8)

 标准化

from sklearn.preprocessing import StandardScaler
Sta=StandardScaler()
train_x=Sta.fit_transform(train_x)
test_x=Sta.transform(test_x)

构建模型(可单层,可多层,本例为输出系数和截距,采用单层无激活函数,需要更多的训练轮数) 

model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(1,input_shape=(11,)))  #单层,无激活函数,拟合计算W与bias
'''
model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(32,input_shape=(11,),activation="relu"))  model.add(tf.keras.layers.Dense(64,activation="relu"))
model.add(tf.keras.layers.Dense(32,activation="relu"))
model.add(tf.keras.layers.Dense(1))  #不用激活函数
'''
model.summary()

 编译模型

model.compile(optimizer='adam',
              loss='mse',
)

 训练模型

his=model.fit(train_x, 
              train_y,
              batch_size=32,
              epochs=3000,
              validation_data=(test_x,test_y))

        epochs:样本集被重复用于训练的次数(轮数)

        batch_size:每次训练使用的样本数

        完成一轮需要训练的次数为:int(样本总数/ batch_size)

 可视化训练过程

plt.figure(figsize=(14,5))
plt.plot(his.epoch,his.history.get("loss"),label="loss")
plt.plot(his.epoch,his.history.get("val_loss"),label="val_loss")
plt.legend()

 模型评价

y_pre=model.predict(test_x)
y_pre_=[x for i in y_pre for x in i]
#plt.plot(test_y.values-y_pre_)
print(np.mean(test_y.values-y_pre_))
from sklearn.metrics import r2_score
print(r2_score(test_y.values,y_pre_))

输出参数(权重与bias)

print(model.weights)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ITLiu_JH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值