TensorFlow定义一个线性分类模型

来源:互联网 发布:苹果6s淘宝虚拟定位 编辑:程序博客网 时间:2024/04/28 06:22

今天我们要用TF定义一个线性分类模型。线性分类模型可以说是最最基础的机器学习模型了。如果还有印象的话,高中时候,我们应该就学过用‘最小二乘法’对一系列(x,y)数据拟合出一条线性表达式,y=kx+b.不过今天我们做的模型难度要再提升一些:如果,其中的x是作为一个多维向量,具有多维的特征呢?这就是“多元线性回归”。那么我们一步一步来解释如何从零构建y=wx+b模型吧!这里的w是一个矩阵。

import tensorflow as tfimport numpy as npimport pandas as pd

我们使用一组经典的数据,这是一组九十年代威斯康辛州记录的良性细胞(标记为0)和恶性细胞(标记为1)的细胞厚度(1-10)和细胞尺寸大小(1-10)。简言之,我们想通过细胞的厚度和尺寸大小来判断这个细胞是恶性细胞还是良性细胞~

train=pd.read_csv('C:/users/administrator/desktop/breast-cancer-train.csv')
test=pd.read_csv('C:/users/administrator/desktop/breast-cancer-test.csv')
x_train=np.float32(train[['Clump Thickness','Cell Size']].T) #读取特征数据之后,为了计算方便,我们进行矩阵转置
y_train=np.float32(train['Type'].T)   #训练数据的标记
x_test=np.float32(test[['Clump Thickness','Cell Size']].T)y_test=np.float32(test['Type'].T)

    接下去,我们需要定义两个关键的变量!变量会在每一轮训练之后保存下来,在下一轮训练中的参数将会使用其保存下来的值!
b=tf.Variable(tf.zeros([1]))     #线性模型的截距,设置初始值为1.0
w=tf.Variable(tf.random_uniform([1,2],-1.0,1.0))#定义一个1*2的矩阵,初始值为-1和1均匀分布的随机数
    定义我们的线性函数:
y=tf.matmul(w,x_train)+b
接着,我们要定义优化目标,通常我们是要让训练值与真实值间的欧氏距离(均方误差)最小,那么代码如下所示:
loss=tf.reduce_mean(tf.square(y-y_train)) #tf.redece_mean()是对数据的结果求均值
   使用最常见的梯度下降法估计参数w,b,这里我们设置步长为0.01
optimizier=tf.train.GradientDescentOptimizer(0.01)
train=optimizier.minimize(loss)  #优化loss
init=tf.initialize_all_variables()#初始化所有变量参数
sess=tf.Session()
sess.run(init)             #开跑
for step in range(1000):             #迭代1000次    sess.run(train)    if step%100==0:        print(step,sess.run(w),sess.run(b))

我们可以看到每100轮迭代之后的w和b值。我们的测试样本一共有175条,那么接下来我们来计算一下训练的这个模型的精度。我们以0.5为界限,精度代码如下。
test_true=0for i in range(175):    a=sess.run(w)[0][0]*x_test[0][i]+sess.run(w)[0][0]*x_test[1][i]+sess.run(b)-0.5    if a<0 and y_test[i]==0:        test_true+=1    if a>0 and y_test[i]==1:        test_true+=1print(test_true/175)
 
    最后附上数据pan.baidu.com/s/1dENAUTr,祝学习愉快!

原创粉丝点击