zoukankan      html  css  js  c++  java
  • 多元线性回归问题(Tensorflow 求解)

    多元线性回归问题求解使用的数据集是经典的boston房价数据。一共506个数据,后面56个数据我将其划了出来作为测试集。比较的简单,主要是学习步骤与算法。

    该数据集每一个样本包括12个特征变量和该地区的平均房价。

      1 import tensorflow as tf
      2 import matplotlib.pyplot as plt
      3 import numpy as np
      4 import pandas as pd
      5 from sklearn.utils import shuffle
      6 
      7 # 读取数据文件
      8 df=pd.read_csv("data/boston.csv",header=0)
      9 
     10 # 显示数据摘要描述信息
     11 # print(df.describe())
     12 # 获取df的值
     13 df=df.values
     14 # 将df转化为np的数组格式
     15 df=np.array(df)
     16 
     17 # 对特征数据【0到11】列做(0-1)归一化
     18 for i in range(12):
     19     df[:,i]=(df[:,i]-df[:,i].min()/df[:,i].max()-df[:,i].min())
     20 
     21 # x_data为前12列特征数据
     22 x_data=df[:,:12]
     23 # y_data为最后一列标签数据
     24 y_data=df[:,12]
     25 
     26 # 模型定义
     27 
     28 # 定义占位符,None表示行的数量未知
     29 x=tf.placeholder(tf.float32,[None,12])  #12个特征数据
     30 y=tf.placeholder(tf.float32,[None,1])   #1个标签数据
     31 
     32 # 定义一个命名空间
     33 with tf.name_scope("Model"):
     34     # w初始值为shape=(12,1)的随机数
     35     w=tf.Variable(tf.random_normal([12,1],stddev=0.01))
     36     # b初始值为1.0
     37     b=tf.Variable(1.0)
     38     # w和x矩阵相乘,用matmul,不能用mutiply或*
     39     def model(x,w,b):
     40         return tf.matmul(x,w)+b
     41     # 预测计算操作,前向计算结点
     42     pred=model(x,w,b)
     43 
     44 # 模型训练
     45 
     46 train_epochs=2 #迭代轮次
     47 learning_rate=0.01  #学习率
     48 
     49 # 定义均方差损失函数
     50 with tf.name_scope("LossFunction"):
     51     loss_function=tf.reduce_mean(tf.pow(y-pred,2))  #均方误差
     52 
     53 # 创建优化器
     54 optimizer=tf.train.GradientDescentOptimizer(learning_rate).minimize(loss_function)
     55 
     56 # 声明会话
     57 sess=tf.Session()
     58 init=tf.global_variables_initializer()
     59 sess.run(init)
     60 
     61 # 迭代训练
     62 for epoch in range(train_epochs):
     63     loss_sum=0.0
     64     for xs,ys in zip(x_data,y_data):
     65         xs=xs.reshape(1,12)
     66         ys=ys.reshape(1,1)  #Feed数据必须和Placeholder的shape一致
     67 
     68         _,loss=sess.run([optimizer,loss_function],feed_dict={x:xs,y:ys})
     69         loss_sum=loss_sum+loss
     70 
     71     # 打乱数据顺序
     72     x_data,y_data=shuffle(x_data,y_data)
     73 
     74     b0=b.eval(session=sess)
     75     w0=w.eval(session=sess)
     76     loss_average=loss_sum/len(y_data)
     77 
     78     print("epoch=",epoch+1,"loss=",loss_average,"b=",b0,"w=",w0)
     79 
     80 
     81  # 导入测试集
     82 
     83 # 通过pandas读取数据文件
     84 df_test = pd.read_csv("D:\boston1.csv", header=0)
     85 
     86 # 显示数据摘要描述信息
     87 print(df_test.describe())
     88 # 获得df的值
     89 df_test=df_test.values
     90 # 将df转化为np的数组格式
     91 df_test=np.array(df_test)
     92 # x_data是前面12列的特征数据
     93 x_data_test=df[:,:12]
     94 # y是最后1列标签数据
     95 y_data_test=df_test[:,12]
     96 print(y_data_test,y_data_test.shape)
     97 # 预测模型
     98 # 选取测试集的第36个数据测试,也可以选择其他的。
     99 n=36
    100 x_data_test=x_data_test[36].reshape(1,12)
    101 predict=sess.run(pred,feed_dict={x:x_data_test})
    102 print("预测值:%f"%predict)
    103 
    104 target=int(y_data_test[n])
    105 print("标签值:%d"%target)

    在迭代训练的输出有问题输出只有几个有效数据,剩下的都是nan,改变超参数学习率有效数据增多,望给出修改意见

  • 相关阅读:
    Yougth的最大化(好题,二分查找 0 1分数规划)
    Cable master(好题,二分)
    Can you find it?(二分 二分+STL set map)
    Can you solve this equation?(二分)
    Bridging signals(二分 二分+stl dp)
    A Bug's Life
    Is It A Tree?(并查集)
    简单计算器(栈)
    Linux学习之常用压缩命令(三)
    Linux系统之常用文件搜索命令
  • 原文地址:https://www.cnblogs.com/hly97/p/12826506.html
Copyright © 2011-2022 走看看