1、逻辑回归(Mnist数据集)

MNIST 数据集已经是一个被”嚼烂”了的数据集, 很多教程都会对它”下手”, 几乎成为一个 “典范”

1.逻辑回归优点:

1)预测结果是介于0和1之间的概率;
2)可以适用于连续性和类别性自变量;
3)容易使用和解释。

2.逻辑回归缺点:

1)对模型中自变量多重共线性较为敏感,例如两个高度相关自变量同时放入模型,可能导致较弱的一个自变量回归符号不符合预期,符号被扭转。需要利用因子分析或者变量聚类分析等手段来选择代表性的自变量,以减少候选变量之间的相关性;
2)预测结果呈“S”型,因此从log(odds)向概率转化的过程是非线性的,在两端随着log(odds)值的变化,概率变化很小,边际值太小,slope太小,而中间概率的变化很大,很敏感。 导致很多区间的变量变化对目标概率的影响没有区分度,无法确定阀值。

3.TensorFlow实现

from tensorflow.examples.tutorials.mnistimport input_data

import tensorflowas tf

mnist = input_data.read_data_sets('data/', one_hot=True)

numClasses =10

inputSize =784

trainingIterations =50000

batchSize =64

X = tf.placeholder(tf.float32, shape = [None, inputSize])

y = tf.placeholder(tf.float32, shape = [None, numClasses])

W1 = tf.Variable(tf.random_normal([inputSize, numClasses], stddev=0.1))

B1 = tf.Variable(tf.constant(0.1), [numClasses])

y_pred = tf.nn.softmax(tf.matmul(X, W1) + B1)

loss = tf.reduce_mean(tf.square(y - y_pred))

opt = tf.train.GradientDescentOptimizer(learning_rate =.05).minimize(loss)

correct_prediction = tf.equal(tf.argmax(y_pred,1), tf.argmax(y,1))

accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))

sess = tf.Session()

init = tf.global_variables_initializer()

sess.run(init)

for iin range(trainingIterations):

batch = mnist.train.next_batch(batchSize)

batchInput = batch[0]

batchLabels = batch[1]

_, trainingLoss = sess.run([opt, loss], feed_dict={X: batchInput, y: batchLabels})

if i%1000 ==0:

train_accuracy = accuracy.eval(session=sess, feed_dict={X: batchInput, y: batchLabels})

print ("step %d, training accuracy %g"%(i, train_accuracy))

batch = mnist.test.next_batch(batchSize)

testAccuracy = sess.run(accuracy, feed_dict={X: batch[0], y: batch[1]})

print ("test accuracy %g"%(testAccuracy))

你可能感兴趣的:(1、逻辑回归(Mnist数据集))