问题描述:
假设你是一所大学的校长,你想通过每个考生两次的考试成绩来确定他们是否能进入你的大学。你有往届学生的数据,可以把它们看作是logistic regression的训练集,对于每一个训练集,你都有学生两次的考试成绩和是否进入了你的大学。
数学原理:
http://blog.csdn.net/ariessurfer/article/details/41310525 这里给大家贴个地址吧,博主也在学习中
代码实现:
# -*- coding: utf-8 -*-
"""
Created on Thu Mar 8 16:23:27 2018
@author: fei
"""
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
data=np.loadtxt('ex2data1.txt',delimiter=',') #载入数据集
x=data[:,0:2] #x取前两列数据,即学生两门课程成绩
y=data[:,2] #y取第三列数据
y=y.reshape([100,1]) #读进来y的shape是[100,?]
y.dtype='float'
x.dtype='float' #统一变量类型
#############################画 散 点 图####################################
pos=np.where(y==1)
neg=np.where(y==0)
plt.scatter(x[pos,0],x[pos,1],marker='o',c='y',label='Admitted')
plt.scatter(x[neg,0],x[neg,1],marker='+',c='black',label='Not Admitted')
plt.legend(loc='upper right')
plt.show()
##########################################################################
t=np.ones([100,1],dtype='float')
x_data=np.c_[t,x] #向x_data中加入全1列
X=tf.placeholder('float64',[None,3])
Y=tf.placeholder('float64',[None,1]) #声明变量x,y
W=tf.Variable(tf.zeros([3,1],dtype='float64')) #声明并初始化权值
h=tf.sigmoid(tf.matmul(X,W))
loss=tf.reduce_mean(-Y*tf.log(h)-(1-Y)*tf.log(1-h)) #计算损失函数
optimizer=tf.train.AdamOptimizer(0.01).minimize(loss)#优化,用GradientDescentOptimizer()函数优化效果不好,我也不太清楚为什么,希望有大佬指点
init=tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
for i in range(5000 ):
sess.run(optimizer,feed_dict={X:x_data,Y:y})
print(sess.run(loss,feed_dict={X:x_data,Y:y}))
print(sess.run(W,feed_dict={X:x_data,Y:y}))
数据文件下载:链接:https://pan.baidu.com/s/1FLc2hJsUkOnhNdwH6FbGOg 密码:0ens
祝大家学习愉快