网站首页 > 技术教程 正文
线性回归模型所预测的是一个连续值或任意实数。下面介绍一种能够回答Yes-No类型的问题(如,这封邮件是否为垃圾邮件?)的模型。
在机器学习领域,有一个极为常见的函数——logistic函数。由于外形与字母S相仿,它也称为sigmoid函数(sigma为等价于S的希腊字母)。
从上图可清楚地看到logistic/sigmoid函数呈现出类似字母“S”的形状。
logistic函数是一个概率分布函数,即给定某个特定输入,该函数将计算输出为“success”的概率,也就是对问题的回答为“Yes”的概率。
这个函数接受单个输入值。为使该函数能够接受多维数据,或来自训练集中样本的特征,需要将它们合并为单个值。可以利用上述的线性回归模型的表达方式。
为在代码中对此进行表示,可复用线性模型的所有元素。不过,为了运用sigmoid函数,需要对预测部分稍做修改。
下面重点讨论该模型的损失函数,也可以使用平方误差。logistic函数会计算回答为“Yes”的概率。在训练集中,“Yes”回答应当代表100%的概率,或输出值为1的概率。
然后,损失应当刻画的是对于特定样本,模型为其分配一个小于1的值的概率。因此,回答“No”将表示概率值为0,于是损失是模型为那个样本所分配的概率值,并取平方。
假设某个样本的期望输出为“Yes”,但模型为其预测了一个非常低的接近于0的概率,这意味着几乎可以100%地认为答案为“No”。
平方误差所惩罚的是与损失为同一数量级的情形,就好比为“No”输出赋予的概率为20%、30%,甚至50%。
对于这种类型的问题,采取如下的交叉熵(crossentropy)损失函数会更为有效。
可以用可视化的方式依据对“Yes”的预测结果,对这两种损失函数进行比较。
交叉熵与平方误差(L2)函数会被叠加绘制。交叉熵输出了一个更大的值(“惩罚”),因为输出与期望值相去甚远。
借助交叉熵,当模型对期望输出为“Yes”的样本的预测概率接近于0时,罚项的值就会增长到接近于无穷大。这就使得训练完成后,模型不可能做出这样的错误
预测。这使得交叉熵更适合作为该模型的损失函数。
TensorFlow提供了一个可在单个优化步骤中直接为一个sigmoid输出计算交叉熵的方法:
下面将该模型运用到一些数据上。我们准备使用来自 https://www.kaggle.com/c/titanic/data 的Kaggle竞赛数据集Titanic。
该模型应能依据乘客的年龄、性别和船票的等级推断他或她是否能够幸存下来。
为增添一些趣味性,这次准备从文件读取数据。请前往该竞赛对应的页面下载train.csv文件。
编写读取文件的基本代码。对于之前编写的框架,这是一个新的方法。你可加载和解析它,并创建一个批次来读取排列在某个张量中的多行数据,以提升推断计算的效率。
需要使用这个数据集中的属性数据(categorical data)。船票等级和性别都属于字符串特征,它们的取值都来自一个预定义的集合。为了在推断模型中使用这些数据,便需要将其转换为数值型特征。
一种比较简单的方法是为每个可能的取值分配一个数值。例如,用“1”代表一等船票,用“2”和“3”分别代表二、三等船票,但这种方式会为这些取值强加一种实际并不存在的线性关系。我们不能说“三等票是一等票的3倍”,正确的做法是将每个属性特征扩展为N维的布尔型特征,每个可能的取值对应一维。若具备该属性,则相应的维度上取值为1。
这样就可使模型独立地学习到每个可能的取值的重要性。在本例中,持“一等票”的乘客幸存的概率要高于其他乘客。
使用属性数据时,通常都是先将其转换为多维布尔型特征,每个可能的取值对应一维。这使得模型能够对每个可能的取值独立加权。
对于只可能取两种值得属性,如本例数据集中的性别,用单个变量来表示已经足够,这是因为可表达这些值之间的线性关系。例如,若令female=1,male=0,则male=1–female,因此单个权值便可学习同时表示两种状态。
在上述代码中,将输入定义为调用read_csv并对所读取的数据进行转换。为了转换为布尔型,我们使用tf.equal方法检查属性值与某些常量值是否相等,还利用tf.to_float方法将布尔值转换成数值以进行推断。然后,利用tf.pack方法将所有布尔值打包进单个张量中。
最后,训练模型。
为了对训练结果进行评估,准备对训练集中的一批数据进行推断,并统计已经正确预测的样本总数。我们将这种方法称为度量准确率 [1]。
由于模型计算的是回答为“Yes”的概率,所以如果某个样本对应的输出大于0.5,则将输出转换为一个正的回答,然后利用tf.equal比较预测结果与实际值是否相等。
最后,利用tf.reduce_mean统计所有正确预测的样本数,并除以该批次中的样本总数,从而得到正确的预测所占的百分比。
运行上述代码,将得到约80%的准确率。考虑到模型较为简单,这个结果还是比较令人满意的。
参考资料:
面向机器智能的TensorFlow实践
TensorFlow for Machine Intelligence
(美)山姆·亚伯拉罕(Sam Abrahams)
- 上一篇: 如何用逻辑回归做数据分析?
- 下一篇: SPSS二元回归分析方法教学
猜你喜欢
- 2025-01-10 分享一个用用Excel做回归分析
- 2025-01-10 基于多因素Logistic回归分析,筛选可能的独立危险因素
- 2025-01-10 膜拜!终于有人能把人工智能算法的“逻辑回归”讲得明明白白了
- 2025-01-10 逻辑回归(2)模型定义 #逻辑回归
- 2025-01-10 SPSS实战:搞明白单因素vs多因素,二元vs多元Logistic回归分析
- 2025-01-10 一个困扰已久的问题:回归分析样本量如何确定?
- 2025-01-10 Logistic回归的OR值意味着什么?
- 2025-01-10 一文带您了解逻辑回归(Logistic Regression): Python示例
- 2025-01-10 一文读懂正则化:LASSO回归、Ridge回归、ElasticNet 回归
- 2025-01-10 分享一个好用的统计工具!快速利用logistic回归探讨影响因素
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)