深度学习之逻辑回归的实现--sigmoid
1 什么是逻辑回归
1.1逻辑回归与线性回归的区别:
线性回归预测的是⼀个连续的值,不论是单变量还是多变量(⽐如多层感知器),他都返回的是⼀个连续的值,放在图中就是条连续的曲线,他常⽤来表⽰的数学⽅法是Y=aX+b;
与之相对的,逻辑回归给出的值并不是连续的,⽽是类似于“是” 和 “否” 的回答,这就类似于⼆元分类的问题。
1.2逻辑回归实现(sigmoid):
在逻辑回归算法中,我们常使⽤的激活函数是Sigmoid函数,他能够将数据映射到 0 到 1 之间,并且通过映射判断,如果映射到的值在1 ,就返回出⼀个正⾯的结果,与之相反,当映射的值为0时就返回⼀个负⾯的结果,这就是我们上⾯所提到的回答: “是”或“否”。那么,什么是Sigmoid函数呢?
Sigmoid函数是⼀种在⽣物学中常见的S型函数,也称为S型⽣长曲线,他的值我们可以看做是恒在 0 到 1 之间的(因为这段区间使我
们真正所关⼼的)。sigmoid的形式如下图所⽰:
深度学习⽹络本质上来说也是⼀种多层映射⽹络,当我们输⼊特征后,在通过如多层感知器的映射后,会⼀层层的映射到⼀个最终的形式。使⽤Sigmoid函数的意义就在于,他会在最后的映射中将结果映射成为0 到 1 之间的值,这时候我们就可以将映射后的值看做是神经⽹络给出的概率的结果。
1.3逻辑回归的常⽤损失函数(交叉熵):
在线性回归中,我们常⽤ “m” (平⽅差)来进⾏损失的刻画,但是“m”⼀般来进⾏惩罚的是损失与原有的数据集在同⼀个数量级的情况,假如说数量级特别的庞⼤,但是损失值⽐较⼩,那么所得到的损失就会很⼩,不利于我们的训练。针对这种情形,我们在逻辑回归中(同时在⼤多数的⼆分类问题中)使⽤更有效的⽅法————交叉熵,他会给我们展现出⼀种更⼤的损失。下⾯这个图就直观的显⽰出了
L2(均⽅差)与logistic(交叉熵)之间关于在处理损失的差别。
在keras中,我们使⽤的函数是binary_crosntropy,下⾯会以⼀个例⼦的形式来使⽤交叉熵实现逻辑回归。
2逻辑回归的简单实现
这是⼀个关于信⽤卡是否存在欺诈⾏为的预测。
我们给出部分数据集,并查看是否为⼀个⼆分类问题
data = pd.read_csv('tensorflow_study\datat\credit-a.csv')
# 查看数据
print(data.head())
# 查看数据是否为⼆分类问题
print(data.iloc[:,-1].value_counts())
然后,我们取出数据,并建⽴⼀个神经⽹络模型,这⾥采⽤两个隐藏层,使得训练时拟合程度更⾼⼀些。
# 取出除了最后⼀列的所有数据
x = data.iloc[:, :-1]
# 取出数据并进⾏替换
y = data.iloc[:, -1].replace(-1,0)
# 模拟神经⽹络创建顺序模型,添加两个隐藏层
# 第⼀层是获取到的4个单元的隐藏层,数据集是15个数据的元组,使⽤relu激活
小小少年# 第⼆层是⼀个简单的数据处理层
# 第三层是输出层,使⽤Sigmoid进⾏激活,完成映射
model = tf.keras.Sequential(
[tf.keras.layers.Den(4,input_shape=(15,),activation='relu'),
tf.keras.layers.Den(4,activation='relu'),
tf.keras.layers.Den(1,activation='sigmoid')]
)天气冷图片
model.summary()
查看⼀下我们创建的模型是否符合我们的需求
再配置⼀个优化器,采⽤TensorFlow的梯度下降算法进⾏优化,使⽤交叉熵作为损失函数,并计算其正确率,开始训练我们的模型,再调⽤原始数据集中的前三个数据进⾏预测测试。
model.summary()
# 配置优化器
# 使⽤梯度下降算法进⾏优化,使⽤交叉熵作为损失函数,并计算其正确率
optimizer='adam',
loss='binary_crosntropy',
metrics=['acc']
)
# 训练模型
history = model.fit(x,y,epochs=100)
t_data = data.iloc[:3,:-1]
print(model.predict(t_data))
结果显⽽易见
这时候,我们也可以通过pandas进⾏对我们模型的训练过程进⾏可视化查看,⽅便我们能够更加准确的针对我们的模型训练做⼀些改进。
# 查看我们在训练过程中的loss和acc的变化情况
# 散点图展⽰数据
plt.figure(1)
ax1 = plt.subplot(2,1,1)
ax2 = plt.subplot(2,1,2)
plt.sca(ax1)
plt.title('loss ')
plt.plot(history.epoch,('loss'))
plt.sca(ax2)
plt.title('acc ')
plt.plot(history.epoch,('acc'))
plt.show()
在这⾥,我们就会明显的发现,当我们训练到18次的时候,loss的变化就趋于稳定状态了,⼆acc也是跟随着loss的稳定趋于更⼩的波动。
::下⾯附上源码和数据
'''
@Author: mountain
@Date: 2020-03-30 16:11:00
@Description: 逻辑回归 --预测信⽤卡是否存在欺诈⾏为
'''
import pandas as pd
学习目标作文import matplotlib.pyplot as plt
import tensorflow as tf
data = pd.read_csv('tensorflow_study\datat\credit-a.csv')
# 查看数据
print(data.head())
# 查看数据是否为⼆分类问题
print(data.iloc[:,-1].value_counts())
# 取出除了最后⼀列的所有数据
x = data.iloc[:, :-1]
# 取出数据并进⾏替换
y = data.iloc[:, -1].replace(-1,0)
# 模拟神经⽹络创建顺序模型,添加两个隐藏层
# 第⼀层是获取到的4个单元的隐藏层,数据集是15个数据的元组,使⽤relu激活
# 第⼆层是⼀个简单的数据处理层
# 第三层是输出层,使⽤Sigmoid进⾏激活,完成映射
model = tf.keras.Sequential(
[tf.keras.layers.Den(4,input_shape=(15,),activation='relu'),
tf.keras.layers.Den(4,activation='relu'),
tf.keras.layers.Den(1,activation='sigmoid')]
)
model.summary()
# 配置优化器
# 使⽤梯度下降算法进⾏优化,使⽤交叉熵作为损失函数,并计算其正确率
optimizer='adam',
loss='binary_crosntropy',
metrics=['acc']
)
# 训练模型
history = model.fit(x,y,epochs=100)
t_data = data.iloc[:3,:-1]
print(model.predict(t_data))
# 查看我们在训练过程中的loss和acc的变化情况# 散点图展⽰数据
plt.figure(1)
ax1 = plt.subplot(2,1,1)
ax2 = plt.subplot(2,1,2)
plt.sca(ax1)
plt.title('loss ')
plt.plot(history.epoch,('loss')) plt.sca(ax2)
plt.title('acc ')
plt.plot(history.epoch,('acc')) plt.show()
ljhg
0,30.83,0,0,0,9,0,1.25,0,0,1,1,0,202,0,-1
1,58.67,4.46,0,0,8,1,3.04,0,0,6,1,0,43,560,-1
1,24.5,0.5,0,0,8,1,1.5,0,1,0,1,0,280,824,-1
0,27.83,1.54,0,0,9,0,3.75,0,0,5,0,0,100,3,-1
0,20.17,5.625,0,0,9,0,1.71,0,1,0,1,2,120,0,-1
0,32.08,4,0,0,6,0,2.5,0,1,0,0,0,360,0,-1场面描写作文
0,33.17,1.04,0,0,7,1,6.5,0,1,0,0,0,164,31285,-1 1,22.92,11.585,0,0,2,0,0.04,0,1,0,1,0,80,1349,-1 0,54.42,0.5,1,1,5,1,3.96,0,1,0,1,0,180,314,-1
0,42.5,4.915,1,1,9,0,3.165,0,1,0,0,0,52,1442,-1 0,22.08,0.83,0,0,0,1,2.165,1,1,0,0,0,128,0,-1
0,29.92,1.835,0,0,0,1,4.335,0,1,0,1,0,260,200,-1 1,38.25,6,0,0,5,0,1,0,1,0,0,0,0,0,-1
0,48.08,6.04,0,0,5,0,0.04,1,1,0,1,0,0,2690,-1
1,45.83,10.5,0,0,8,0,5,0,0,7,0,0,0,0,-1
0,36.67,4.415,1,1,5,0,0.25,0,0,10,0,0,320,0,-1
0,28.25,0.875,0,0,6,0,0.96,0,0,3,0,0,396,0,-1
1,23.25,5.875,0,0,8,0,3.17,0,0,10,1,0,120,245,-1 0,21.83,0.25,0,0,1,1,0.665,0,1,0,0,0,0,0,-1
三年级语文辅导
1,19.17,8.585,0,0,2,1,0.75,0,0,7,1,0,96,0,-1
0,25,11.25,0,0,0,0,2.5,0,0,17,1,0,200,1208,-1
0,23.25,1,0,0,0,0,0.835,0,1,0,1,2,300,0,-1
1,47.75,8,0,0,0,0,7.875,0,0,6,0,0,0,1260,-1
1,27.42,14.5,0,0,10,1,3.085,0,0,1,1,0,120,11,-1 1,41.17,6.5,0,0,8,0,0.5,0,0,3,0,0,145,0,-1
1,15.83,0.585,0,0,0,1,1.5,0,0,2,1,0,100,0,-1
1,47,13,0,0,3,2,5.165,0,0,9,0,0,0,0,-1
0,56.58,18.5,0,0,1,2,15,0,0,17,0,0,0,0,-1
0,57.42,8.5,0,0,11,1,7,0,0,3,1,0,0,0,-1
0,42.08,1.04,0,0,9,0,5,0,0,6,0,0,500,10000,-1
0,29.25,14.79,0,0,12,0,5.04,0,0,5,0,0,168,0,-1
0,42,9.79,0,0,10,1,7.96,0,0,8,1,0,0,0,-1
0,49.5,7.585,0,0,3,2,7.585,0,0,15,0,0,0,5000,-1 1,36.75,5.125,0,0,11,0,5,0,1,0,0,0,0,4000,-1
1,22.58,10.75,0,0,8,0,0.415,0,0,5,0,0,0,560,-1
0,27.83,1.5,0,0,9,0,2,0,0,11,0,0,434,35,-1
0,27.25,1.585,0,0,2,1,1.835,0,0,12,0,0,583,713,-1 1,23,11.75,0,0,10,1,0.5,0,0,2,0,0,300,551,-1
0,27.75,0.585,1,1,2,0,0.25,0,0,2,1,0,260,500,-1 0,54.58,9.415,0,0,13,7,14.415,0,0,11,0,0,30,300,-1 0,34.17,9.17,0,0,0,0,4.5,0,0,12,0,0,0,221,-1
0,28.92,15,0,0,0,1,5.335,0,0,11,1,0,0,2283,-1
0,29.67,1.415,0,0,9,1,0.75,0,0,1,1,0,240,100,-1 0,39.58,13.915,0,0,9,0,8.625,0,0,6,0,0,70,0,-1
0,56.42,28,1,1,0,0,28.5,0,0,40,1,0,0,15,-1
0,54.33,6.75,0,0,0,1,2.625,0,0,11,0,0,0,284,-1
1,41,2.04,1,1,8,1,0.125,0,0,23,0,0,455,1236,-1 0,31.92,4.46,0,0,2,1,6.04,0,0,3,1,0,311,300,-1
0,41.5,1.54,0,0,3,2,3.5,1,1,0,1,0,216,0,-1
0,23.92,0.665,0,0,0,0,0.165,1,1,0,1,0,100,0,-1
同城邂逅1,25.75,0.5,0,0,0,1,0.875,0,1,0,0,0,491,0,-1
利希慎0,26,1,0,0,8,0,1.75,0,1,0,0,0,280,0,-1
0,37.42,2.04,0,0,9,0,0.04,0,1,0,0,0,400,5800,-1 0,34.92,2.5,0,0,9,0,0,0,1,0,0,0,239,200,-1
0,34.25,3,0,0,2,1,7.415,0,1,0,0,0,0,0,-1
0,23.33,11.625,1,1,9,0,0.835,0,1,0,0,0,160,300,-1 0,23.17,0,0,0,2,0,0.085,0,1,0,1,0,0,0,-1
0,44.33,0.5,0,0,3,1,5,0,1,0,0,0,320,0,-1
0,35.17,4.5,0,0,10,1,5.75,1,1,0,0,2,711,0,-1
0,43.25,3,0,0,8,1,6,0,0,11,1,0,80,0,-1
0,56.75,12.25,0,0,6,0,1.25,0,0,4,0,0,200,0,-1
0,31.67,16.165,0,0,1,0,3,0,0,9,1,0,250,730,-1
1,23.42,0.79,1,1,8,0,1.5,0,0,2,0,0,80,400,-1
1,20.42,0.835,0,0,8,0,1.585,0,0,1,1,0,0,0,-1
0,26.67,4.25,0,0,2,0,4.29,0,0,1,0,0,120,0,-1
0,34.17,1.54,0,0,2,0,1.54,0,0,1,0,0,520,50000,-1 1,36,1,0,0,0,0,2,0,0,11,1,0,0,456,-1
0,25.5,0.375,0,0,6,0,0.25,0,0,3,1,0,260,15108,-1 0,19.42,6.5,0,0,9,1,1.46,0,0,7,1,0,80,2954,-1
0,35.17,25.125,0,0,10,1,1.625,0,0,1,0,0,515,500,-1 0,32.33,7.5,0,0,11,2,1.585,0,1,0,0,2,420,0,1
1,38.58,5,0,0,2,0,13.5,0,1,0,0,0,980,0,1
0,44.25,0.5,0,0,6,0,10.75,0,1,0,1,2,400,0,1
0,44.83,7,1,1,0,0,1.625,1,1,0,1,0,160,2,1
0,20.67,5.29,0,0,8,0,0.375,0,0,1,1,0,160,0,1
0,34.08,6.5,0,0,12,0,0.125,0,1,0,0,0,443,0,1
1,19.17,0.585,1,1,12,0,0.585,0,1,0,0,0,160,0,1 0,21.67,1.165,1,1,5,0,2.5,0,0,1,1,0,180,20,1
0,21.5,9.75,0,0,0,0,0.25,0,1,0,1,0,140,0,1
0,49.58,19,0,0,13,7,0,0,0,1,1,0,94,0,1
1,27.67,1.5,0,0,6,0,2,0,1,0,1,2,368,0,1
0,39.83,0.5,0,0,6,0,0.25,0,1,0,1,2,288,0,1
逢入京使赏析0,27.25,0.625,0,0,12,0,0.455,0,1,0,0,0,200,0,1 0,37.17,4,0,0,0,2,5,0,1,0,0,2,280,0,1
0,25.67,2.21,1,1,12,0,4,0,1,0,1,0,188,0,1
0,34,4.5,0,0,12,0,1,0,1,0,0,0,240,0,1
1,49,1.5,0,0,4,3,0,0,1,0,0,0,100,27,1
0,62.5,12.75,1,1,0,1,5,0,1,0,1,0,112,0,1
0,31.42,15.5,0,0,0,0,0.5,0,1,0,1,0,120,0,1
0,52.33,1.375,1,1,0,1,9.46,0,1,0,0,0,200,100,1 0,28.75,1.5,1,1,0,0,1.5,0,1,0,0,0,0,225,1
1,28.58,3.54,0,0,3,2,0.5,0,1,0,0,0,171,0,1
0,23,0.625,1,1,12,0,0.125,0,1,0,1,0,180,1,1
1,22.5,11,1,1,8,0,3,0,1,0,0,0,268,0,1
1,28.5,1,0,0,8,0,1,0,0,2,0,0,167,500,1
0,37.5,1.75,1,1,0,2,0.25,0,1,0,0,0,164,400,1
0,35.25,16.5,1,1,0,0,4,0,1,0,1,0,80,0,1
0,18.67,5,0,0,8,0,0.375,0,0,2,1,0,0,38,1
0,25,12,0,0,5,0,2.25,0,0,2,0,0,120,5,1
0,27.83,4,1,1,3,1,5.75,0,0,2,0,0,75,0,1
0,54.83,15.5,0,0,11,5,0,0,0,20,1,0,152,130,1
0,28.75,1.165,0,0,5,0,0.5,0,1,0,1,2,280,0,1
1,25,11,1,1,12,0,4.5,0,1,0,1,0,120,0,1
0,40.92,2.25,1,1,10,1,10,0,1,0,0,0,176,0,1
1,19.75,0.75,0,0,0,0,0.795,0,0,5,0,0,140,5,1
0,29.17,3.5,0,0,9,0,3.5,0,0,3,0,0,329,0,1
1,24.5,1.04,1,1,13,7,0.5,0,0,3,1,0,180,147,1
0,24.58,12.5,0,0,9,0,0.875,0,1,0,0,0,260,0,1
1,33.75,0.75,0,0,5,2,1,0,0,3,0,0,212,0,1
0,20.67,1.25,1,1,0,1,1.375,0,0,3,0,0,140,210,1 1,25.42,1.125,0,0,8,0,1.29,0,0,2,1,0,200,0,1
0,37.75,7,0,0,8,1,11.5,0,0,7,0,0,300,5,1
0,52.5,6.5,0,0,5,0,6.29,0,0,15,1,0,0,11202,-1
0,57.83,7.04,0,0,6,0,14,0,0,6,0,0,360,1332,-1
1,20.75,10.335,0,0,2,1,0.335,0,0,1,0,0,80,50,-1 0,39.92,6.21,0,0,8,0,0.04,0,0,1,1,0,200,300,-1
0,25.67,12.5,0,0,2,0,1.21,0,0,67,0,0,140,258,-1 1,24.75,12.5,0,0,12,0,1.5,0,0,12,0,0,120,567,-1 1,44.17,6.665,0,0,8,0,7.375,0,0,3,0,0,0,0,-1
1,23.5,9,0,0,8,0,8.5,0,0,5,0,0,120,0,-1
0,34.92,5,0,0,10,1,7.5,0,0,6,0,0,0,1000,-1
0,47.67,2.5,0,0,6,2,2.5,0,0,12,0,0,410,2510,-1
0,22.75,11,0,0,8,0,2.5,0,0,7,0,0,100,809,-1
0,34.42,4.25,0,0,3,2,3.25,0,0,2,1,0,274,610,-1
1,28.42,3.5,0,0,9,0,0.835,0,1,0,1,2,280,0,-1
0,67.75,5.5,0,0,11,5,13,0,0,1,0,0,0,0,-1
0,20.42,1.835,0,0,0,0,2.25,0,0,1,1,0,100,150,-1 1,47.42,8,0,0,11,2,6.5,0,0,6,1,0,375,51100,-1
0,36.25,5,0,0,0,2,2.5,0,0,6,1,0,0,367,-1
0,32.67,5.5,0,0,8,1,5.5,0,0,12,0,0,408,1000,-1
0,48.58,6.5,0,0,8,1,6,0,1,0,0,0,350,0,-1
0,39.92,0.54,1,1,12,0,0.5,0,0,3,1,0,200,1000,-1 0,33.58,2.75,0,0,6,0,4.25,0,0,6,1,0,204,0,-1
1,18.83,9.5,0,0,9,0,1.625,0,0,6,0,0,40,600,-1
1,26.92,13.5,0,0,8,1,5,0,0,2,1,0,0,5000,-1
1,31.25,3.75,0,0,2,1,0.625,0,0,9,0,0,181,0,-1
1,56.5,16,0,0,4,7,0,0,0,15,1,0,0,247,-1
0,43,0.29,1,1,2,1,1.75,0,0,8,1,0,100,375,-1
0,22.33,11,0,0,9,0,2,0,0,1,1,0,80,278,-1
0,27.25,1.665,0,0,2,1,5.085,0,0,9,1,0,399,827,-1 0,32.83,2.5,0,0,2,1,2.75,0,0,6,1,0,160,2072,-1