多层感知器是最简单的神经网络模型,用于处理机器学习中的分类与回归问题。
第一个案例:印第安人糖尿病诊断
Pima Indians数据集:UCI Machine Learning免费下载的标准机器学习数据集。
http://archive.ics.uci.edu/ml/datasets
#导入必需的包
import tensorflow
import keras
from keras.models import Sequential
from keras.layers import Dense
import numpy as np
#使用固定随机数种子初始化随机数生成器
np.random.seed(7)
(1) 导入数据
#导入数据
dataset = np.loadtxt('pima-indians-diabetes.csv',delimiter=',')
#分割输入变量x和输出变量Y
x = dataset[:,0:8]
Y = dataset[:,8]
(2) 定义模型
#创建模型
model = Sequential()
#可视层,8个输入变量,与数据的维度一致
#Dense类定义完全连接层
#通常采用sigmoid和tanh作为激活函数,这是构建所有层的首选。现在的研究表明,使用ReLU作为激活函数,可以得到更好的性能
#第一个隐藏层有12个神经元
model.add(Dense(12,input_dim=8,activation='relu'))
#第二个隐藏层有8个神经元
model.add(Dense(8,activation='relu'))
#最后输出层有1个神经元预测数据结构。二分类的输出层采用sigmoid作为激活函数
model.add(Dense(1,activation='sigmoid'))
(3) 编译模型
#编译模型
#对于二进制分类问题的对数损失被定义为二进制交叉熵
#使用有效的梯度下降算法Adam作为优化器
model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy'])
(4) 训练模型
#训练模型
#参数可以通过试验和错误实验来选择合适的值
model.fit(x=x,y=Y,epochs=150,batch_size=10)
(5) 评估模型
#评估模型
scores = model.evaluate(x=x,y=Y)
print('\n%s:%.2f%%' %(model.metrics_names[1],scores[1]*100))
目标函数的常见选项:
MSE:预测值和真实值之间的均方误差。
Binary cross-entropy:二分对数损失。
Categorical cross-entropy:多分类对数损失
该目标函数适用于多分类标签预测。它也是与激活函数softmax关联的默认选择。
常见的性能评估指标:
Accuracy:准确率,针对预测目标的预测正确的比例。
Precision:查准率,衡量多分类问题中多少选择项是关联正确的。
Recall:查全率,衡量多分类问题中多少关联正确的数据被选出。