五月两场 | NVIDIA DLI 深度学习入门课程

5月19日/5月26日一天密集式学习  快速带你入门阅读全文>

正文共2762个字,预计阅读时间8分钟。

今天要处理的问题对于一个只学了线性回归的机器学习初学者来说还是比较棘手——通过已知的几组数据预测一组数据。用excel看了下,关系不是很明显,平方,log都不是很明显,挨着试也不是办法,所以停下来理了理思路。

思路整理

磨刀时间

  • tensorflow关于回归的文档教程

  • udacity的Titanic实例

砍柴时间

  • python读取excel表格的数据

  • 尝试一维输入预测输出

  • 尝试五维输入预测输出

开始磨刀

读TensorFlow教程

关于tensor,vector,matrix...
13 # a rank 0 tensor; this is a scalar with shape []2[1, 2, 3] # a rank 1 tensor; this is a vector with shape[3]3[[1, 2, 3], [4, 5, 6]] # a rank 2 tensor; this is a matrix with shape [2, 3]4[[[1, 2, 3]], [[ 7, 8, 9]]] # a rank 3 tensor with shape[2, 1, 3]

上面的代码很清晰地解释了tensor,vector,matrix,还有各种情况下的[]代表什么意思,也就是我一直以来搞混的维度。虽然都是[],关键看它是vector还是matrix还是其他的三维四维的空间描述,光一个[],只能称他为tensor,[]是rank = 1的tensor,[[]]是rank=2的tensor,[[[]]]是rank=3的tensor。

磨刀获得的备选方案

  • tf.contrib.learn
    tf.contrib.learn是TensorFlow的高级API,定义了很多常用模型,可以简化编码。tf.contrib.learn.LinearRegressor这个函数就实现了线性回归,那么同理它可能能够实现其他回归,查看API,发现它可以实现logistic regression, linear classification, logistic classification, and many neural network classifieds and regressions. 这就给问题的解决提供了一种很好的方案,以后可以陆续尝试。

  • 前天刚学的线性回归(https://www.jianshu.com/p/f39bd94d7433
    时间充足就两个都试试,否则只试第一个就好。

开始砍柴

我用jupyter notebook写的,好处在于可以分段运行,小步编写小步测试。

Python读取Excel表格

这部分不属于问题的主线,就不纠结了,随便选个方式读进来就好。前两天做udacity的第一个项目,就用到了读取csv文件的数据,我采取的方案是把excel转成csv文件,然后读取。

  • xlsx另存为csv

  • 测试读取,先读取前几行

 1import tensorflow as tf 2import numpy as np 3import pandas as pd 4train_data_file = '/Users/liukaixin/ProductDocuments/ShaleGasPressure/train_data.csv' 5predict_data_file = '/Users/liukaixin/ProductDocuments/ShaleGasPressure/predict_data.csv' 6full_train_data = pd.read_csv(train_data_file) 7full_predict_data = pd.read_csv(predict_data_file) 8# 显示训练数据列表中的前几项数据 9print(full_train_data.head())10# 显示预测数据列表的前几项数据11print(full_predict_data.head())12# 显示训练数据的shape13print(full_train_data.shape)14# 显示预测数据的shape15print(full_predict_data.shape)16# 显示pd.read_csv取回来的数据类型17print(type(full_train_data))

三个注意点:

1、head()函数默认返回前五行。

2、习惯了其他语言,总是关心返回值,感觉python好奇怪,看不出是什么类型,填参数时候总遇到各种问题,只好不停地打印类型……pd.read_csv取回来的是个DataFrame。

3、这个DataFrame的shape为(500,6),第一维有500个数据,第二维有6个数据,可以想成6行500列,不过还是不想成行列好,我发现就把它换成tensor的写法就挺好,有时候数据多维了脑子就刻画不好了,比如这个(500,6)换成tensor就是[[1,2,3,4,5,6],[1,2,3,4,5,6],......,[1,2,3,4,5,6]]碰上再多维的,就用tensor刻画就好。

将要预测的列作为输出,并从数据表中删除

1# 将要预测的列赋值给输出2train_data_outcomes = train_data['your outcome key']3# 从输入DataFrame中移除4train_data_input = train_data.drop('your outcome key', axis = 1)5print(train_data_input)6print(type(train_data_outcomes))

这时打印train_data_input就会发现没有输出列了,同样的方法可以随意控制输入数据的维度。

train_data_outcomes的类型是<class 'pandas.core.series.Series'>

训练预测和评估

使用tf.contrib.learn.LinearRegressor尝试一维输入预测输出

一维输入是指x=[1,2,3,4,5,……],即只取DataFrame的某一列,通过这一列预测输出:

1# 特征列,后面是维度2feature_columns = [tf.contrib.layers.real_valued_column("x", dimension=1)]3# 用LinearRegressor4estimator = tf.contrib.learn.LinearRegressor(feature_columns=feature_columns)5input_fn = tf.contrib.learn.io.numpy_input_fn({"x":train_data_input}, train_data_outcomes, batch_size=4,                               num_epochs=1000)6# 拟合.7estimator.fit(input_fn=input_fn, steps=1000)8print(estimator.evaluate(input_fn=input_fn))

最后输出{'loss': xxxxx, 'global_step': xxxx}

使用tf.contrib.learn.LinearRegressor尝试五维输入预测输出

换成五维的最大问题就是input_fn的第一个参数和第二个参数(即输入x和输出y)到底是要什么类型,如果还把上面的代码copy下来,只把feature_columns的dimension换成5,把input_fn中的train_data_input换成DataFrame,就会收到下面的错误:

AttributeError: 'DataFrame' object has no attribute 'dtype'

由于train_data_outcomes刚才看过了Serious,长成[1,2,3,4……]这种样子,所以我想把   DataFrame转成[[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5],……]这种样子,于是我就用了比较笨的方法:

 1k = [] 2for i in range(500): 3tmpx = [] 4tmpx.append(train_data_input['your first dimension name'][i]) 5tmpx.append(train_data_input['your second dimension name'][i]) 6tmpx.append(train_data_input['your third dimension name'][i]) 7tmpx.append(train_data_input['your fourth dimension name'][i]) 8tmpx.append(train_data_input['your fifth dimension name'][i]) 9k.append(tmpx)10print(array_train_data_x)

打印就会发现变成了想要的形式,然后放在input_fn的第一个参数里,即{"x": k}(名字不好,随便起的,没揭示意图),但是又报了下面错误:

AttributeError: 'list' object has no attribute 'shape'

于是再改,在k外面套一层np.array(k),终于可以运行了。

1feature_columns = [tf.contrib.layers.real_valued_column("x", dimension=5)]2estimator = tf.contrib.learn.LinearRegressor(feature_columns=feature_columns)3input_fn = tf.contrib.learn.io.numpy_input_fn({"x": np.array(k)}, np.array(f), batch_size=4,4                                      num_epochs=1000)5estimator.fit(input_fn=input_fn, steps=1000)6print(estimator.evaluate(input_fn=input_fn))
使用tf.contrib.learn.DNNRegressor尝试5个维度输入预测输出
1feature_columns = [tf.contrib.layers.real_valued_column("", dimension=5)]2classifier = tf.contrib.learn.DNNRegressor(feature_columns=feature_columns,3hidden_units=[10],4optimizer=tf.train.RMSPropOptimizer(learning_rate=.001),5activation_fn=tf.nn.relu)6classifier.fit(x= train_data_input,7       y=train_data_outcomes,8       max_steps=1000)9print(classifier.evaluate(x= train_data_input,y=train_data_outcomes))

这个classifier.evaluate的参数和上面两种方式不同,因为这个没有input_fn,查看api,依旧看不懂类型这回事,但是我看懂了里面的方法,如果不定义x和y,就需要input_fn,如果定义了,就可以不用input_fn,所以我尝试用x和y,果然可以。

等价代码

写完这两个五维的发现同理,LinearRegression那个五维的也可以写成不带input_fn的,把fit改成x和y,不指定feature_columns的键值x就好了,否则会报Key Error,这样就不用处理输入输出了,但是少了batch_改动后的同理代码如下:

1feature_columns = [tf.contrib.layers.real_valued_column("", dimension=5)]2estimator = tf.contrib.learn.LinearRegressor(feature_columns=feature_columns)3# input_fn = tf.contrib.learn.io.numpy_input_fn({"x": np.array(k)}, train_data_outcomes, batch_size=4,4#                                              num_epochs=3000)5# estimator.fit(input_fn=input_fn, steps=3000)6estimator.fit(x= train_data_input,y=train_data_outcomes,batch_size=4,steps=3000)7print(estimator.evaluate(x=train_data_input,y=train_data_outcomes))

遇到的问题

由于对API的不熟悉和对Python的不熟悉,上述东西整整搞了两天,还留下下面两个疑问,在日后的学习里会逐渐补充,但是如果会的同学能三言两语指点一二将不胜感激。

  • 精度如何评估
    我不关心loss的值,我只希望它能输出一个正确率,分数或小数都可以,但是我只能用最笨的办法,把输出和真实的输出用程序比一遍,但是我似乎发现evaluate有直接输出的功能,但是不会用,希望会的同学指点下。

  • 如何做预测
    我找到一个预测的方法

1print(estimator.predict(x= train_data_input))2print(type(estimator.predict(x= train_data_input)))

这个方法得到一个<type 'generator'>,我想看看它的值有哪些,得把它转成list,是这么麻烦吗?generate类型有啥好处,为什么要返回一个这个类型的对象?

原文链接:https://www.jianshu.com/p/5e325f593926

查阅更为简洁方便的分类文章以及最新的课程、产品信息,请移步至全新呈现的“LeadAI学院官网”:

www.leadai.org

请关注人工智能LeadAI公众号,查看更多专业文章

大家都在看

LSTM模型在问答系统中的应用

基于TensorFlow的神经网络解决用户流失概览问题

最全常见算法工程师面试题目整理(一)

最全常见算法工程师面试题目整理(二)

TensorFlow从1到2 | 第三章 深度学习革命的开端:卷积神经网络

装饰器 | Python高级编程

今天不如来复习下Python基础

用TensorFlow的Linear/DNNRegrressor预测数据相关推荐

  1. 作为深度学习最强框架的TensorFlow如何进行时序预测!(转)

    作为深度学习最强框架的TensorFlow如何进行时序预测! BigQuant 2 个月前 摘要: 2017年深度学习框架关注度排名tensorflow以绝对的优势占领榜首,本文通过一个小例子介绍了T ...

  2. Kesci:Tensorflow 实现 LSTM——时间序列预测(超详细)

    云脑项目3 -真实业界数据的时间序列预测挑战 https://www.kesci.com/home/project/5a391c670e1fc52691fde623 这篇文章将讲解如何使用lstm进行 ...

  3. 0907实战KAGGLE房价预测数据

    数据集: 本文主要对KAGGLE房价预测数据进行预测,并提供模型的设计以及超参数的选择. 该数据集共有1460个数据样本,80个样本特征   数据集介绍可参照:  House Prices - Adv ...

  4. Kaggle Titanic Challenges 生存预测 数据预处理 模型训练 交叉验证 步骤详细解析

    本博客所有内容均整理自<Hands-On Machine Learning with Scikit-Learn & TensorFlow>一书及其GitHub源码. 看<Ha ...

  5. python 用模型预测数据 代码_万字案例 | 用Python建立客户流失预测模型(含源数据+代码)...

    客户流失是所有与消费者挂钩行业都会关注的点.因为发展一个新客户是需要一定成本的,一旦客户流失,成本浪费不说,挽回一个客户的成本更大. 今天分享一个用户流失预测,以电信行业为例. 所以,电信行业在竞争日 ...

  6. *** FATAL ERROR: too many grib files .. 1st=F:\data\预测数据 2nd=- ***

    问题描述: 在使用wgrib2.exe 读取grib2文件的过程中,报错 *** FATAL ERROR: too many grib files - 1st=F:\data\预测数据 2nd=- * ...

  7. 知乎用户行为预测数据比赛,10万奖金等你来Battle!

    知乎联合中国信息检索学术会议,发起用户行为预测数据比赛!本次比赛提供了 700 万名用户的 2400 万条阅读.搜索.回答.提问.感谢.点赞等行为的数据,要求预测他们感兴趣的文章.前 10 名的队伍将 ...

  8. 2vec需要归一化吗_LTSM模型预测数据如何归一化?(知乎回答)

    LTSM模型预测数据如何归一化?(知乎回答) 小白想问一个问题困扰很久的问题.我已经训练好了一个LTSM网络模型,训练的数据都是经过归一化,但是我用新的数据进行预测的时候,预测数据也要归一化吗?如果我 ...

  9. 【TensorFlow-windows】keras接口——利用tensorflow的方法加载数据

    前言 之前使用tensorflow和keras的时候,都各自有一套数据读取方法,但是遇到一个问题就是,在训练的时候,GPU的利用率忽高忽低,极大可能是由于训练过程中读取每个batch数据造成的,所以又 ...

最新文章

  1. CentOS 部署 flask项目
  2. java 多条件比较_Java 多条件复杂排序小结
  3. 2016全国大学生计算机设计大赛,2016年“第9届中国大学生计算机设计大赛”闭幕...
  4. 【大话Hibernate】hibernate缓存详解
  5. SVN 集中式版本管理工具
  6. java rmi 使用管道_使用Java RMI时要记住的两件事
  7. 换了一个皮肤,心情也好多了
  8. 使用JDBC来连接数据库
  9. Python解析access数据库(mdb文件或者accdb文件)
  10. 无法连接远程计算机,远程桌面由于以下原因之一无法连接到远程计算机
  11. python类方法和实例方法syntax errors_《Fluent Python》CH.11_面向对象_接口:从协议到抽象基类...
  12. ae制h5文字动画_绝对干货!H5动画制作方法全揭秘!
  13. 社交网络分析——影响力最大化(附带python例子实现)
  14. 电脑端微信用户图片DAT格式解码为图片
  15. 微信朋友验证消息是什么来源_微信开启朋友验证什么意思
  16. LTE CAT M1模块为辅助生活系统提供了宽带和智能手机的替代方案
  17. 中国生物农药市场投资前景及“十四五”规划建议报告2022-2028年
  18. 提问的价值,你了解多少?
  19. 完整PLC smart200伺服液压PID一套程序
  20. 服务器omv系统,开源NAS系统OpenMediaVault安装与体验

热门文章

  1. python构建简单神经网络_Python构建一个简单的神经网络,Pytorch,搭建
  2. python replace替换多个字符_关于python:使用string.replace(x,y)替换所有
  3. u盘序列号读取工具_硬盘读写工具
  4. 【srcipt】python运行cmd命令
  5. 【debug】python打包成exe,太大了该怎么解决?
  6. zabbix监控特殊端口(8080,80,8009等)
  7. vue键盘抬起_vue实现编辑器键盘抬起时内容跟随光标距顶位置向上滚动效果
  8. android语言切换快捷键,Android的语言设置两种方法
  9. Django中的视图(view)
  10. 数据挖掘-数据清理-缺失值