aihot  2017-05-21 11:57:19  机器学习 |   查看评论   

作者:Soon Hin Khor

机器之心编译

参与:Jane W、邵明、微胖

 

本文是日本东京 TensorFlow 聚会联合组织者 Hin Khor 所写的 TensorFlow 系列介绍文章的Part 3 和 Part4,自称给出了关于 TensorFlow 的 gentlest 的介绍。在之前发布的前两部分介绍中,作者谈到单一特征问题的线性回归问题以及训练(training)的含义,这两部分将讲解 TensorFlow(TF)进行多个特征的线性回归和逻辑回归。

 

矩阵和多特征线性回归

 

快速回顾

 

之前文章的前提是:给定特征——任何房屋面积(sqm),我们需要预测结果,也就是对应房价($)。为了做到这一点,我们:

  1. 我们找到一条「最拟合」所有数据点的直线(线性回归)。「最拟合」是当线性回归线确保实际数据点(灰色点)和预测值(内插在直线上的灰色点)之间的差异最小,即最小化多个蓝线之和。
  2. 使用这条直线,我们可以预测任何房屋的价格。
使用单一特征线性回归进行预测
使用单一特征线性回归进行预测
 
多特征线性回归概述
 
实际上,任何预测都依赖于多个特征,于是我们从单特征的线性回归进阶到 带有两个特征的线性回归;之所以选择两个特征,是为了让可视化和理解简明些,但这个思想可以推广到带有任何数量特征的线性回归。
 
我们引进一个新的特征——房间数量。当收集数据点时,现在我们需要在现有特征「房屋面积」之上收集新特征「房间数」的值,以及相应的结果「房屋价格」。
 
我们的图表变成了 3 维的。
结果「房屋价格」以及 2 个特征(「房间数」,「房屋面积」)的数据点空间
结果「房屋价格」以及 2 个特征(「房间数」,「房屋面积」)的数据点空间
 
然后,我们的目标变成:给定「房间数」和「房屋面积」,预测「房屋价格」(见下图)。
由于缺少数据点,有时无法对给定的 2 个特征进行预测
由于缺少数据点,有时无法对给定的 2 个特征进行预测
 
在单一特征的情形中,当没有数据点时,我们需要使用线性回归来创建一条直线,以帮助我们预测结果房屋价格。在 2 个特征的情形中,我们也可以使用线性回归,但是需要创建一个平面(而不是直线),以帮助我们预测(见下图)。
使用线性回归在 2 个特征空间中的创建一个平面来做预测
使用线性回归在 2 个特征空间中的创建一个平面来做预测
 
多特征线性回归模型
 
回忆单一特征的线性回归(见下图左边),线性回归模型结果为 y,权重为 W,房屋大面积为 x,偏差为 b。
 
对于 2 个特征的回归(参见下图右侧),我们引入另一个权重 W2,另一个自变量 x2 来代表房间数的特征值。
单特征 vs. 2 个特征的线性回归方程
单特征 vs. 2 个特征的线性回归方程
 
如之前讨论的那样,当我们执行线性回归时,梯度下降算法能帮助学习系数 W、W2 和 b 的值。
 
Tensorflow 的多特征线性回归
 
1.快速回顾
 
单特征线性回归的 TF 代码由 3 部分组成(见下图):
  • 构建模型(蓝色部分)
  • 基于模型构建成本函数(红色部分)
  • 使用梯度下降(绿色部分)最小化成本函数
 
用于单特征线性回归的 Tensorflow 代码
用于单特征线性回归的 Tensorflow 代码
 
2.Tensorflow 的 2 个特征的线性回归
 
TF 代码中 2 个特征的线性回归方程(如上所述)的变化(相比单特征)用红色显示。
入门级解读:小白也能看懂的TensorFlow介绍
注意,增加新特征的这种方式效率低;随着特征数量的增长,所需的变量系数和自变量的数量会增加。实际的模型有更多的特征,这恶化了这个问题。那么,如何能有效地表示特征呢?
 
解决方法:矩阵
 
首先,让我们将表征两个特征的模型推广到表征 n 个特征的模型:
入门级解读:小白也能看懂的TensorFlow介绍
复杂的 n 特征公式可以用矩阵简化,矩阵被内置于 TF 中,这是因为:
  • 数据可以用多维表示,这契合我们表征具有 n 个特征的数据点(左下方,也称为特征矩阵)以及具有 n 个权重模型(右下,也称为权重矩阵)的方式
单个数据点的 n 个特征与模型的矩阵形式的 n 个权重
单个数据点的 n 个特征与模型的矩阵形式的 n 个权重
 
在 TF 中,它们将被写为:
 
x = tf.placeholder(tf.float,[1,n])
W = tf.Variable(tf.zeros [n,1])
 
注意:对于 W,我们使用 tf.zeros,它将所有 W1,W2,...,Wn 初始化为零。
 
  • 在数学上,矩阵乘法是向量乘法的加总;因此自然地,特征(中间的一个)和权重(右边的)矩阵之间的矩阵乘法给出(左边的)结果,即等于 n 个特征的线性回归公式的第一部分(如上所述),没有截距项。
特征和权重矩阵之间的矩阵乘法给出结果(未添加截距项)
特征和权重矩阵之间的矩阵乘法给出结果(未添加截距项)
 
在 TF 中,这种乘法将表示为:
 
y = tf.matmul(x, W)
 
  • 多行特征矩阵(每行表示数据点的 n 个特征)之间的矩阵乘法返回多行结果,每行代表每个数据点的结果/预测(没有加入截距项);因此一个矩阵乘法就可以将线性回归公式应用于多个数据点,并对应地产生多个预测(每个数据点对应一个结果)(见下文)
 
注意:特征矩阵中的 x 表示变的更复杂,即我们使用 x1.1、x1.2,而不是 x1、x2 等,因为特征矩阵(中间矩阵)从表示 n 个特征(1 行 x,n 列)的单个数据点扩展到表示具有 n 个特征(m 行 x,n 列)的 m 个数据点。因此,我们扩展 x <n>(如 x1)到 x <m >.<n>(如 x1.1),其中,n 是特征数,m 是数据点的数量。
具有模型权重的多行矩阵乘法产生矩阵的多个行结果
具有模型权重的多行矩阵乘法产生矩阵的多个行结果
 
在 TF 中,它们将被写为:
 
x = tf.placeholder(tf.float,[m,n])
W = tf.Variable(tf.zeros [n,1])
y = tf.matmul(x,W)
 
  • 最后,向结果矩阵添加常数,也就是将常数添加到矩阵中的每一行
 
在 TF 中,用矩阵表示 x 和 W,无论模型的特征数量或要处理的数据点数量,矩阵都可以简化为:
 
b = tf.Variable(tf.zeros[1])
y = tf.matmul(x, W) + b
 
Tensorflow 的多特征备忘单
 
我们做一个从单一特征到多特征的线性回归的变化的并行比较:
Tensorflow 中的单特征与 n 个特征的线性回归模型
Tensorflow 中的单特征与 n 个特征的线性回归模型
 
总结
 
在本文中,我们介绍了多特征线性回归的概念,并展示了我们如何将模型和 TF 代码从单特征的线性回归模型扩展到 2 个特征的线性回归模型,并可以推广到 n 特征线性回归模型。最后我们为多特征的 TF 线性回归模型提供了一张备忘单。
 
逻辑回归
 
逻辑回归综述
 
我们已经学会了如何使用 Tensorflow(TF)去实现线性回归以预测标量值得结果,例如给定一组特征,如住房大小,预测房价。
 
然而,有时我们需要对事物分类(classify)而不是去预测一个具体的数值,例如给定一张含有数字(0-9 十个数字中的一个)的图片,我们需要将其分类为 0,1,2,3,4,5,6,7,8,9 十类。或者,我们需要将一首歌曲进行归类,如归类为流行,摇滚,说唱等。集合 [0,1,2,...,9]、[流行,摇滚,说唱,等等] 中的每一个元素都可以表示一个类。在计算机中,我们通常用数字对抽象名词进行表示,比如,pop = 0, rock = 1, 等等。为了实现分类,我们使用 TF 来实现逻辑回归。
 
在本文中,我们将使用逻辑回归将数字图片归类为 0,1,2,3,4,5,6,7,8,9 这十类。
 
逻辑回归的细节
 
线性回归中的许多概念仍然用于逻辑回归之中。我们可以再次使用公式 y = W.x + b,但是有一些不同的地方。让我们看看线性回归和逻辑回归的公式:
线性回归与逻辑回归的区别与相似
线性回归与逻辑回归的区别与相似
 
区别:
  • 结果(y):对于线性回归,结果是一个标量值(可以是任意一个符合实际的数值),例如 50000,23.98 等;对于逻辑回归,结果是一个整数(表示不同类的整数,是离散的),例如 0,1,2,... 9。
  • 特征(x):对于线性回归,特征都表示为一个列向量;对于涉及二维图像的逻辑回归,特征是一个二维矩阵,矩阵的每个元素表示图像的像素值,每个像素值是属于 0 到 255 之间的整数,其中 0 表示黑色,255 表示白色,其他值表示具有某些灰度阴影。
  • 成本函数(成本):对于线性回归,成本函数是表示每个预测值与其预期结果之间的聚合差异的某些函数;对于逻辑回归,是计算每次预测的正确或错误的某些函数。
 
相似性:
  • 训练:线性回归和逻辑回归的训练目标都是去学习权重(W)和偏置(b)值。
  • 结果:线性回归与逻辑回归的目标都是利用学习到的权重和偏置值去预测/分类结果。
 
协调逻辑回归与线性回归
 
为了使逻辑回归利用 y = W.b + x,我们需要做出一些改变以协调上述差异。
 
1.特征变换,x
 
我们可以将二维的图片特征(假设二维特征有 X 行,Y 列)转换成一维的行向量:将第一行以外的其它行数值依顺序放在第一行后面。
 

除特别注明外,本站所有文章均为 赢咖4注册 原创,转载请注明出处来自入门级解读:小白也能看懂的TensorFlow介绍

留言与评论(共有 0 条评论)
   
验证码:
[lianlun]1[/lianlun]