前馈神经网络是没有任何循环的网络。数据从输入层,经过隐含层到输出层输出通过一次传递,而没有以前的任何“状态存储”。
前馈神经网络可以应用与分类,回归等。
分类:数据分析-深度学习-前馈神经网络-分类-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)