线性回归预测连续值,逻辑回归给出“是”或“否”,使用Sigmoid做激活函数。Sigmoid是一个概率函数。
对于分类问题使用交叉熵刻画损失函数会更有效,交叉熵会输出一个更大的“损失”。交叉熵刻画的是实际输出概率与期望输出概率的距离。交叉熵越小,两个概率分布就越接近。
概率分布为期望输出,概率分布
为实际输出,
为交叉熵:
代码实现:
import tensorflow as tf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
data=pd.read_csv(file_path,header=None) #没有表头时,第一行就是参数,用header=None设置默认表头
data.head()
data.iloc[:,-1].value_counts() #查看最后一列,判断是不是二元分类
x = data.iloc[:,:-1]
y = data.iloc[:,-1].replace(-1,0) #将-1替换为0,1和-1适合支持向量机的算法
#模型初始化
model = tf.keras.Sequential()
#模型添加层
model.add(tf.keras.layers.Dense(4, input_shape=(15,),activation = 'relu'))
model.add(tf.keras.layers.Dense(4, activation = 'relu')) #第二层不用写元组
model.add(tf.keras.layers.Dense(1, activation = 'sigmoid'))
#查看模型
model.summary()
#模型配置
model.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['acc'])
#metrics 可以测量很多东西,acc用于计算正确率状况
#模型训练
history = model.fit(x,y,epochs = 100)
#查看history中history字典里的key
history.history.keys()
#运行结果说明history记录了loss和acc的变化
#以迭代次数为x轴,key值为y轴,绘图查看
#损失函数的变化
plt.plot(history.epoch,history.history.get('loss')) #字典使用get方法取值
#正确率的变化
plt.plot(history.epoch,history.history.get('acc'))