数据见deep learning,逻辑回归即通过参数拟合,将输入映射为0/1,所以这里就不是简单的线性模型,我们需要借助其他函数来实现逻辑回归。
#--coding:UTF-8--
import tensorflow as tf
import numpy as np
from sklearn import preprocessing
#读取数据,并转化为float32类型
x_data=np.loadtxt('./data/ex4x.dat').astype(np.float32)
y_data=np.loadtxt('./data/ex4y.dat').astype(np.float32)
#对数据进行预处理
scaler=preprocessing.StandardScaler().fit(x_data)
x_data_standard=scaler.transform(x_data)
#定义并初始化变量
W=tf.Variable(tf.zeros([2,1]))
b=tf.Variable(tf.zeros([1,1]))
#使用logistic函数
y=1/(1+tf.exp(-tf.matmul(x_data_standard,W)+b))
#损失函数为 cost(hθ(x),y)=−yilog(hθ(x))−(1−yi)log(1−hθ(x))
optimizer=tf.train.GradientDescentOptimizer(0.2)
loss=tf.reduce_mean(-y_data.reshape(-1,1)*tf.log(y)-(1-y_data.reshape(-1,1))*tf.log(1-y))
train=optimizer.minimize(loss)
init=tf.global_variables_initializer()
sess=tf.Session()
sess.run(init)
for step in range(1500):
sess.run(train)
if step%100==0:
print step,sess.run(W).flatten(),sess.run(b).flatten()
对于逻辑回归,我们首先要知道它的原理,并能够选择合适的损失函数,其实观察这几个模型可以看出,一个模型能否成功取决于数据的处理、损失函数的选取、优化器的选择、学习率的调试。而在逻辑回归模型相对于前面线性模型的区别,我觉得主要是矩阵运算的处理和损失函数的选择;在损失函数中我们用到了reshape(-1,1),其实他就是将1x80的矩阵变换为80x1的矩阵,这样便能够与同为80x1的矩阵y_进行运算。另外就是学习率和步数的选择,这个就需要多多调试了。