作家
登录

从零开始使用TensorFlow建立简单的逻辑回归模型

作者: 来源: 2017-06-29 13:02:29 阅读 我要评论

TensorFlow 是一个基于 python 的机械进修框架。在 Coursera 上进修了逻辑回归的课程内容后,想把在 MATLAB 中实现了的内容用 TensorFlow 从新实现一遍,当做进修 Python 和框架的敲门砖。

目标读者

知道逻辑回归是什么,懂一点 Python,据说过 TensorFlow

数据集

来自 Coursera 上 Andrew 的机械进修课程中的ex2data1.txt,根据学生的两次测验成就断定钙揭捉?生是否会被登科。

情况

Python 2.7 - 3.x

pandas, matplotlib, numpy

安装 TensorFlow

在本身的电脑上安装 TensorFlow 框架,安装办法过程不赘述,CPU 版相对更轻易一点,GPU 版须要 CUDA 支撑,各位看官看情况安装就好。

开端

创建一个文件夹(比如就叫做tensorflow),在文件夹中创建一个 Python 文件main.py,并将数据集文件放到这个文件夹下:

http://s5.51cto.com/wyfs02/M02/9A/53/wKiom1lUb1_QUyZOAAAtgcLVUKU607.jpg-wh_651x-s_919555220.jpg

数据情势:

http://s3.51cto.com/wyfs02/M01/9A/53/wKiom1lUb2Lx6xeJAAEaFTUwbRI891.jpg-wh_600x-s_1470619674.jpg

前两列分别为两次测验成就(x1, x2),最后一列为是否被登科(y),1代表被登科,0则反之。

在源文件main.py中,我们起首惹人须要的包:

接着我们将数据集文件读入法度榜样,用于后面的练习:

pandas函数read_csv可以将 csv(comma-separated values)文件中的数据读入df变量,经由过程df.values将 DataFrame 转化为二维数组:

W 和 b 是我们接下来的进修目标,W 为权值矩阵(Weights),b 为偏置量(Bias,表如今图像上又叫截距)。

http://s2.51cto.com/wyfs02/M02/9A/53/wKioL1lUb2KREW-UAAESR4t64Z4035.jpg-wh_600x-s_2217083319.jpg

有了数据之后,我们须要将特点(x1, x2)和标签(y)分别放到两个变量中,以便在练习中代入公式:

# 分别特点和标签,并获取数据维数train_X = train_data[:, :-1]train_y = train_data[:, -1:]feature_num = len(train_X[0])sample_num = len(train_X)print("Size of train_X: {}x{}".format(sample_num, feature_num))print("Size of train_y: {}x{}".format(len(train_y), len(train_y[0])))
import pandas as pd                # 用于攫取数据文件import tensorflow as tfimport matplotlib.pyplot as plt    # 用于画图import numpy as np                 # 用于后续计算

可以看到,我们的数据集中有100条样例,每条样例的特点数量为2。

TensorFlow 模型设计

在逻辑回归中,我们应用的猜测函数(Hypothesis)为:

hθ(x)=sigmoid(XW+b)

个中,sigmoid是一个激活函数,在这里表示学生被登科的概率:

P(y=1|x,θ)

这个函数的外形请自行百度

我们应用的损掉函数为:

J(θ)=−1m[∑i=1my(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))]

因为我们的数据集只有两个特点,是以不消担心过拟合,所以损掉函数里的┞俘规化项就不要了😌。

起首我们用 TensorFlow 定义两个变量用来存放我们的练习用数据:

# 数据集X = tf.placeholder(tf.float32)y = tf.placeholder(tf.float32)

这里的X和y不是一般的变量,而是一个 placeholder(占位符),意味着这两个变量的值是未指定的,直到你开端练习模型时才须要将给定的数据赋值给变量。

接着我们再定义出我们要练习的 W 和 b:

# 练习目标W = tf.Variable(tf.zeros([feature_num, 1]))b = tf.Variable([-.9])

接下来我们要用 TensorFlow 的方法将损掉函数表达出来:

http://s1.51cto.com/wyfs02/M02/9A/53/wKiom1lUbrTCNwk3AAAn87c3eiM452.png-wh_600x-s_3960557673.png

db = tf.matmul(X, tf.reshape(W, [-1, 1])) + bhyp = tf.sigmoid(db)cost0 = y * tf.log(hyp)cost1 = (1 - y) * tf.log(1 - hyp)cost = (cost0 + cost1) / -sample_numloss = tf.reduce_sum(cost)

可以看到,我表达损掉函数是分三步进行的:先分别将乞降内的两部分表示出来,再将它们加和并和外面的常数m进交运算,最后对这个向量进行乞降,便获得了损掉函数的值。

接下来,我们要定义应用的优化办法:

个中,第一步是拔取优化器,这里我们选择梯度降低办法;第二步是优化目标,大年夜函数名字顾名思义,我们的优化目标是使得损掉函数的值最小化。

留意:此处的进修率(0.001)应当尽可能小,不然可能会出现损掉计算中出现 log(0)的问题。

练习

膳绫擎的工作做完之后,我们就可以开端练习我们的模型了。

在 TensorFlow 中,起重要将之前定义的Variable初始化:

init = tf.global_variables_initializer()sess = tf.Session()sess.run(init)

在这里,我们看到出现了一个tf.Session(),顾名思义是会话,即义务履行的主体。我们膳绫擎定义了一堆器械,只是一个模型为了获得结不雅而须要的履行步调和框架,一个类似流程图的器械,光有流程图还不敷,我们须要一个主体来实际地运行它,这就是Session的感化。


  推荐阅读

  图说Java —— 理解Java机制最受欢迎的8幅图

欲望本文能帮你回想你已经知道的那些常识。如不雅图片讲解的不敷清楚,你可能须要浏览具体的文┞仿或者进行搜刮。1. String对象弗成改变的特点(详情请点击膳绫擎的标题查看)String s = "ab>>>详细阅读


本文标题:从零开始使用TensorFlow建立简单的逻辑回归模型

地址:http://www.17bianji.com/lsqh/35964.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)