机器学习与TensorFlow编程(2)逻辑线性回归模型
来源:互联网 发布:淘宝店访客突然少了 编辑:程序博客网 时间:2024/06/05 05:28
0. 参考资料
- Coursera ML Week3
- 本文Github链接
1. 总体介绍
1.1. 分类(classification)
预测值是离散值(如银行是否放贷),则称此类学习任务为“分类”(classification)。
1.2. 二分类逻辑线性回归思路
- 输入一系列参数
x ,构建一系列参数θ ,获得因变量,记为z=θTx 。 z 的取值范围可能是(−∞,+∞) ,为了方便分类,将z 映射到[0,1] 中,记为g(z) 。g(z) >=0.5 为正类g(z) <0.5 为反类
- 完整公式:
hθ(x)=g(z)=g(θTx) ,其中hθ(x) 的取值就是为正类的概率。
2. 逻辑方程(Logistic Function)
- 初学者(我)不了解这个函数到底牛在哪里,于是查了下知乎和Wiki,高端,还不太明白。
- 函数形式(sigmoid函数):
h(z)=11+e−z - 函数图像为S型曲线,自变量取值范围
(−∞,+∞) ,因变量取值范围(0,1) 。
3. 损失函数(Loss Function)
- 函数形式如下:
Cost(hθ(x),y)={−log(hθ(x))−log(1−hθ(x))if y=1if y=0 - 对于多个训练样本,其函数形式:
J(θ)=1m∑i=1mCost(hθ(x(i),y(i)))=−1m∑i=1m[y(i)loghθ(x(i))+(1−y(i))log(1−hθ(x(i)))] - 梯度下降公式,在Coursera Week 3 Lecture Notes 中有详细推导:
∂∂θjJ(θ)=1m∑i=1m[hθ(x(i))−y(i)]x(j)
4. 矩阵形式
4.1. 原始数据介绍
- 假定输入数据一共包含n个特征,m个训练样本,则输入数据为
m*(n+1)
维矩阵:X=⎡⎣⎢⎢⎢⎢⎢⎢⎢11⋮1x(1)1x(2)1⋮x(m)1x(1)2x(2)2⋮x(m)2⋯⋯⋱⋯x(1)nx(2)n⋮x(m)n⎤⎦⎥⎥⎥⎥⎥⎥⎥ 输入样本结果为:
y=⎡⎣⎢⎢⎢⎢⎢y(1)y(2)⋮y(m)⎤⎦⎥⎥⎥⎥⎥ 要求的参数列表为:
θ=⎡⎣⎢⎢⎢⎢θ0θ1⋮θn⎤⎦⎥⎥⎥⎥
4.2. 矩阵计算过程
- 第一步,计算
m
维向量z :z=Xθ - 第二步,通过sigmoid函数计算
m
维向量hθ(x) hθ(x)=sigmoid(z)=sigmoid(Xθ) - 第三步,计算损失函数
J(θ) J(θ)=−1m[(yTlog(hθ(x))+(1−y)Tlog(1−hθ(x)))] - 第四步,每一次梯度下降的变化量,即
n+1
维向量grad:grad=1mXT(hθ(x)−y) - 第五步,通过各种优化算法得出
θ 的值,计算测试样本的hθ(x) ,若结果>=0.5则判断为正例,若结果<0.5则分类为反例。
5. TensorFlow编程实现
- 数据源:Coursera ML Week2 课后练习数据
- python源码
import tensorflow as tfimport numpy as npdef read_data(file_name, delimiter=','): return np.loadtxt(file_name, delimiter=delimiter)def init_data(input_data): input_x = input_data[:, 0:-1] input_y = input_data[:, -1].reshape(m, 1) input_x = np.concatenate((np.ones([m, 1]), input_x), 1) return input_x, input_ydef tensor_flow_run(input_x, input_y, init_w): # 初始化参数 x = tf.placeholder("float32", [None, n]) # m*n y = tf.placeholder("float32", [None, 1]) # m*1 W = tf.Variable(init_w) # n*1 # 构建模型 z = tf.matmul(x, W) # m*1 h = tf.sigmoid(z) # m*1 # 构建代价函数 cost = (tf.reduce_sum(y*tf.log(h)) + tf.reduce_sum((1-y) * (tf.log(1-h)))) / (-m) # 梯度下降算法参数配置 train_op = tf.train.GradientDescentOptimizer(LEARNING_RATE).minimize(cost) # 判断训练集合上的准确性 predict = tf.greater_equal(tf.sigmoid(tf.matmul(x, W)), 0.5) y_ = tf.equal(y, 1) correct_prediction = tf.equal(predict, y_) accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) with tf.Session() as sess: # 初始化 init = tf.global_variables_initializer() sess.run(init) # 梯度下降算法 for _ in range(ITERATIONS): sess.run(train_op, feed_dict={x: input_x, y: input_y}) # 参数列表 print('Octave theta: -25.16127 0.20623 0.20147') print('Actual theta:', sess.run(W)) # 代价函数 print('\nOctave Cost: 0.20350') print('Actual Cost:', sess.run(cost, feed_dict={x: input_x, y: input_y})) # 正确率 print('\nOctave Accuracy: 0.89') print('Actual Accuracy:', sess.run(accuracy, feed_dict={x: input_x, y: input_y}))# 设置超参数LEARNING_RATE = 0.001ITERATIONS = 500# 读取数据raw_data = read_data('ex2data1.txt')# 获取样本数量,属性数量m = raw_data.shape[0]n = raw_data.shape[1]# 获取输入数据data = init_data(raw_data)# 进行机器学习运算tensor_flow_run(data[0], data[1], [[-25], [0.2], [.2]])
阅读全文
0 0
- 机器学习与TensorFlow编程(2)逻辑线性回归模型
- 机器学习与TensorFlow编程(1)线性回归模型
- 机器学习(二)广义线性模型:逻辑回归与Softmax分类
- 机器学习面试准备之一、线性回归与逻辑回归
- 机器学习_最小二乘法,线性回归与逻辑回归
- 机器学习——线性模型之逻辑回归
- (斯坦福机器学习课程笔记)用广义线性模型推导逻辑回归模型
- TensorFlow学习笔记(2)--构造线性回归模型
- 学习TensorFlow,线性回归模型
- 《机器学习》学习笔记(一):线性回归、逻辑回归
- 机器学习笔记 (2)-逻辑回归模型
- 机器学习(一)线性回归、逻辑回归
- 机器学习--线性回归、逻辑回归
- 机器学习与TensorFlow编程(3)Softmax回归
- 机器学习(一)——线性回归、分类与逻辑回归
- TensorFlow学习笔记(三):TensorFlow实现逻辑回归模型
- TensorFlow学习笔记(二):TensorFlow实现线性回归模型
- [TensorFlow]入门学习笔记(4)-BasicModel 线性回归,逻辑回归和最近邻模型
- spring boot应用启动原理分析
- SAP-HANA快速创建序列
- HDU 2197 本原串 (数学+容斥)
- 持续集成Jenkins+sonarqube部署教程
- 自我反省
- 机器学习与TensorFlow编程(2)逻辑线性回归模型
- 搭建elk
- Could not execute JDBC batch update; SQL [delete from role where roleId=?]; constraint [null]; neste
- 用Mesos分布式架构进行工作
- qt国际化翻译
- 调用EAS单据转换规则(BOTP),生成下游单据
- 技术盛会 I/O,apple WWDC,Build
- matplotlib绘图基础--2
- UART接口介绍