使用 tensorflow.keras 进行逻辑回归
- 1. 加载数据
- 2. 可视化数据
- 3. 创建模型
- 4. 开始训练
- 5. 使用训练好的模型进行预测
- 6. 完整源代码
- 附录
- 1. 关于 全连接层[`tf.keras.layers.Dense()`](https://tensorflow.google.cn/api_docs/python/tf/keras/layers/Dense?hl=zh-CN)
- 1. 关于 [`model.compile()`](https://blog.csdn.net/yunfeather/article/details/106461754)
- 上一篇:[【TensorFlow 2.0】使用 tensorflow.keras 进行线性回归](https://blog.csdn.net/weixin_47160526/article/details/123316167?spm=1001.2014.3001.5501)
1. 加载数据
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
# 加载数据
data = pd.read_csv('./dataset/income.csv')
data.head() # head()默认显示前五行数据
data.iloc[:,-1].value_counts() # -1代表最后一列,value_counts()可以显示这一列的值出现的次数(类似于词频统计)
x_data = data.iloc[:,:-1] # 所有行的,最后一列之前的列
y_data = data.iloc[:,-1].replace(-1,0) #将-1转化成0
2. 可视化数据
# 数据可视化
plt.scatter(x_data,y_data)
plt.ion
plt.show
3. 创建模型
#创建tf.keras模型
model = tf.keras.Sequential() #顺序处理模型
model = tf.keras.Sequential(
[
tf.keras.layers.Dense(10,input_shape(4,),activation='relu'), # 第一层隐藏层
tf.keras.layers.Dense(1,activation='relu'), # 第二层隐藏层,第二层不需要input_shape=x,会根据上一层的输出推断
tf.keras.layers.Dense(1,activation='sigmoid') # 输出层
]
)
# 编译模型,进行损失函数的配置
model.compile(
optimizer = 'adma',
loss='binary_crossentropy', # 逻辑回归使用 binary_crossentropy 作为损失函数
metrics=['acc']
)
model.summary() #显示model的Dense的形状
#模型已经编译好了,可以进行训练了
4. 开始训练
# 开始训练
history = model.fit(x_data,y_data,epochs=50000)
5. 使用训练好的模型进行预测
# 使用model预测
model.predict(x_data)
6. 完整源代码
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
#加载数据
data = pd.read_csv('./dataset/income.csv')
data.head() # head()默认显示前五行数据
data.iloc[:,-1].value_counts() # -1代表最后一列,value_counts()可以显示这一列的值出现的次数(类似于词频统计)
x_data = data.iloc[:,:-1] # 所有行的,最后一列之前的列
y_data = data.iloc[:,-1].replace(-1,0) #将-1转化成0
# 数据可视化
plt.scatter(x_data,y_data)
plt.ion
plt.show
#创建tf.keras模型
model = tf.keras.Sequential() #顺序处理模型
model = tf.keras.Sequential(
[
tf.keras.layers.Dense(10,input_shape(4,),activation='relu'), # 第一层隐藏层
tf.keras.layers.Dense(1,activation='relu'), # 第二层隐藏层,第二层不需要input_shape=x,会根据上一层的输出推断
tf.keras.layers.Dense(1,activation='sigmoid') # 输出层
]
)
# 编译模型,进行损失函数的配置
model.compile(
optimizer = 'adma',
loss='binary_crossentropy', # 逻辑回归使用 binary_crossentropy 作为损失函数
metrics=['acc']
)
model.summary() #显示model的Dense的形状
#模型已经编译好了,可以进行训练了
#开始训练
history = model.fit(x_data,y_data,epochs=50000)
#使用model预测
model.predict(x_data)
附录
1. 关于 全连接层tf.keras.layers.Dense()
tf.keras.layers.Dense(
units, # 正整数,输出空间的维数
activation=None, # 激活函数,不指定则没有 ('relu','sigmoid','LeakyReLU')
use_bias=True, # 布尔值,是否使用偏移向量
kernel_initializer='glorot_uniform', # 核权重矩阵的初始值设定项
bias_initializer='zeros', # 偏差向量的初始值设定项
kernel_regularizer=None, # 正则化函数应用于核权矩阵
bias_regularizer=None, # 应用于偏差向量的正则化函数
activity_regularizer=None, # Regularizer function applied to the output of the layer (its "activation")
kernel_constraint=None, # Constraint function applied to the kernel weights matrix.
bias_constraint=None, **kwargs # Constraint function applied to the bias vector
)
1. 关于 model.compile()
model.compile()的作用: 设置优化器 , 损失函数 , 准确率评测标准
model.compile() 语法:
形式1
model.compile(optimizer = tf.keras.optimizers.优化器(参数),
loss = tf.keras.losses.损失函数(参数),
metrics = ["sparse_accuracy"]
)
形式2
model.compile(optimizer = "sgd",
loss = "mse",
metrics = ["sparse_accuracy"]
)
optimizer
有四种,每种有两种表现形式:
“sgd”
或者 tf.optimizers.SGD(lr = 学习率, decay = 学习率衰减率,momentum = 动量参数)
“adagrad"
或者 tf.keras.optimizers.Adagrad(lr = 学习率, decay = 学习率衰减率)
”adadelta"
或者 tf.keras.optimizers.Adadelta(lr = 学习率,decay = 学习率衰减率)
“adam"
或者 tf.keras.optimizers.Adam(lr = 学习率, decay = 学习率衰减率)
loss
有两种,每种有两种表现形式:
”mse"
或者 tf.keras.losses.MeanSquaredError()
"sparse_categorical_crossentropy"
或tf.keras.losses.SparseCatagoricalCrossentropy(from_logits = False)
Metrics
标注网络评价指标,例如:
"accuracy"
: y_ture 和 y_pred 都是数值,如y_ = [1] y = [1] #y_为真实值,y为预测值
“sparse_accuracy"
:y_和y都是以独热码 和 概率分布表示,如y_ture = [0, 1, 0], y_pred = [0.256,
0.695, 0.048]
"sparse_categorical_accuracy"
:检查 y_true 中的值(本身就是index) 与 y_pred 中最大值对应的index是否相等。 y_true是以数值形式给出, y_pred是以独热码给出,如y_ = [1], y = [0.256 0.695, 0.048]
上一篇:【TensorFlow 2.0】使用 tensorflow.keras 进行线性回归