摘自:

https://www.kaggle.com/zoupet/neural-network-model-for-house-prices-tensorflow

一、实现功能简介:

本文摘自Kaggle的一篇房价预测题目,找了一篇比较全的,当作自己的Tensorflow入门。

数据和题目可以在文章开头的地址找的。

主要是给定了一个区域的房子价格以及房子特征,要预测一下房价。

二、挑选数据

 1 # 为了使得代码在 python2 或者3下都运行,加的 __future__包。如果是python3,下面的包可以不加。
 2 from __future__ import absolute_import
 3 from __future__ import division
 4 from __future__ import print_function
 5
 6 import itertools
 7
 8 import pandas as pd
 9 import numpy as np
10 import matplotlib.pyplot as plt
11 from pylab import rcParams
12 import matplotlib
13
14 from sklearn.model_selection import train_test_split
15
16 # scaler, put the value range from min to max
17 from sklearn.preprocessing import MinMaxScaler
18
19 import tensorflow as tf
20
21 # 定义多少条记录会被当作log。
22 tf.logging.set_verbosity(tf.logging.INFO)
23
24 # InteractiveSession 与 Session的区别是不用每一次执行命令时,前面都加一个session。可以自己查一下
25 sess = tf.InteractiveSession()
26
27 # 文件目录
28 path_train = '/Users/adrian.wu/Desktop/learn/kaggle/price/data/all/train.csv'
29
30 '''
31 首先只用数字特征进行预测,去除掉其它特征,比如类别等
32 '''
33 train = pd.read_csv(path_train)
34
35 print('所有特征下,矩阵纬度:', train.shape)
36
37 # 挑选出只是数字类型的特征
38 train = train.select_dtypes(exclude=['object'])
39 print('数字类型特征矩阵的纬度:', train.shape)
40
41 # 去掉没用的特征Id
42 train.drop('Id', axis=1, inplace=True)
43
44 # 处理缺失值,简单的填充0
45 train.fillna(0, inplace=True)
46
47 print("\n特征:", list(train.columns))
48
49 '''
50 用Isolation Forest去掉异常值
51 '''
52 from sklearn.ensemble import IsolationForest
53
54 clf = IsolationForest(max_samples=100, random_state=42)
55 clf.fit(train)
56
57 y_noano = clf.predict(train)
58 print(y_noano)
59 y_noano = pd.DataFrame(y_noano, columns=['Top'])
60 # y_noano[y_noano['Top'] == 1].index.values, 等于1的不是异常值,-1为异常值
61
62 train = train.iloc[y_noano[y_noano['Top'] == 1].index.values]
63 train.reset_index(drop=True, inplace=True)
64
65 print("异常值数量:", y_noano[y_noano['Top'] == -1].shape[0])
66 print("正常数据数量:", train.shape[0])

三、特征预处理

 1 '''
 2 特征预处理
 3 '''
 4 import warnings
 5
 6 warnings.filterwarnings('ignore')
 7
 8 # 得到特征名字,并存为list类型
 9 col_train = list(train.columns)
10 col_train_bis = list(train.columns)
11
12 # 去除要预测的值,SalePrice
13 col_train_bis.remove('SalePrice')
14
15 # 用numpy转为可操作的矩阵
16 mat_train = np.mat(train)
17
18 mat_y = np.array(train.SalePrice).reshape((1314, 1))
19
20 # 归一化方法,把所有特征归一化到0~1之间
21 prepro_y = MinMaxScaler()
22 prepro_y.fit(mat_y)
23
24 prepro = MinMaxScaler()
25 prepro.fit(mat_train)
26
27 # 将处理过后的数据转为DataFrame
28 train = pd.DataFrame(prepro.transform(mat_train), columns=col_train)

四、train test数据集合处理

 1 '''
 2 train test集合数据处理
 3 '''
 4
 5 # 把列都列出来
 6 COLUMNS = col_train
 7 FEATURES = col_train_bis
 8 LABEL = "SalePrice"
 9
10 # 暂且理解将DataFrame的数据转为对应的输入值,因此要指定一列列的值。
11 feature_cols = [tf.contrib.layers.real_valued_column(k) for k in FEATURES]
12
13 # 得到Feature 和 预测值
14 training_set = train[COLUMNS]
15 prediction_set = train.SalePrice
16
17 # 将Train test 分为2:1分
18 x_train, x_test, y_train, y_test = train_test_split(training_set[FEATURES], prediction_set, test_size=0.33,
19                                                     random_state=42)
20 # 整合特征和预测值,对train集
21 y_train = pd.DataFrame(y_train, columns=[LABEL])
22 training_set = pd.DataFrame(x_train, columns=FEATURES).merge(y_train, left_index=True, right_index=True)
23
24 # 整合特征和预测值,对test集
25 y_test = pd.DataFrame(y_test, columns=[LABEL])
26 testing_set = pd.DataFrame(x_test, columns=FEATURES).merge(y_test, left_index=True, right_index=True)
27
28 # 打log的,可以忽略
29 tf.logging.set_verbosity(tf.logging.ERROR)

五、DNN网络

 1 '''
 2  快速创建一个DNN网络,
 3  optimizer = tf.train.GradientDescentOptimizer( learning_rate= 0.1 )) 可以自己选优化方式
 4  激活函数为relu
 5  都有哪些feature
 6  隐藏层的神经元个数,递减,200,100,50,25,12个
 7 '''
 8
 9 regressor = tf.contrib.learn.DNNRegressor(feature_columns=feature_cols,
10                                           activation_fn=tf.nn.relu,
11                                           hidden_units=[200, 100, 50, 25, 12])
12
13 training_set.reset_index(drop=True, inplace=True)
14
15
16 # 定义一个函数用来train网络
17 def input_fn(data_set, pred=False):
18     if pred == False:
19         feature_cols = {k: tf.constant(data_set[k].values) for k in FEATURES}
20         labels = tf.constant(data_set[LABEL].values)
21
22         return feature_cols, labels
23
24     if pred == True:
25         feature_cols = {k: tf.constant(data_set[k].values) for k in FEATURES}
26
27         return feature_cols
28
29
30 # trainDNN网络
31 regressor.fit(input_fn=lambda: input_fn(training_set), steps=2000)
32
33 # 估计测试集
34 ev = regressor.evaluate(input_fn=lambda: input_fn(testing_set), steps=1)
35 loss_score = ev["loss"]
36 print("test集的损失为: {0:f}".format(loss_score))

六、Adagrad优化器

看了下代码。这里的优化器用的是Adagrad。形式大致和SGD差不多,在其基础通过对梯度的迭代相加,对学习率进行了更新,从而控制学习率。

学习率随着梯度的和会逐渐变小。

1、迭代公式

eta也就是分子项是初始学习率。G为梯度迭代和,G旁边长的很像E的那一项是一个小常数,防止分母为0。

由上式可得到,G越大,学习率越小。

转载于:https://www.cnblogs.com/ylxn/p/10170948.html

DNN网络(三)python下用Tensorflow实现DNN网络以及Adagrad优化器相关推荐

  1. [Python人工智能] 四.TensorFlow创建回归神经网络及Optimizer优化器

    从本篇文章开始,作者正式开始研究Python深度学习.神经网络及人工智能相关知识.前一篇文章讲解了TensorFlow基础和一元直线预测的案例,以及Session.变量.传入值和激励函数:这篇文章将详 ...

  2. tensorflow中Adagrad优化器运用

    tensorflow中Adagrad优化器运用 Adagrad优化器引用API:tensorflow.keras.optimizers.Adagrad 代码实现: #Adagrad v_w += tf ...

  3. Python使用模拟退火(Simulated Annealing)算法构建优化器获取机器学习模型最优超参数组合(hyperparameter)实战+代码

    Python使用模拟退火(Simulated Annealing)算法构建优化器获取机器学习模型最优超参数组合(hyperparameter)实战+代码 目录

  4. centos查看网络速率_Centos7下查看各进程的网络速率状况

    Centos7下查看各进程的网络速率状况 2017年10月20日 13:52:47 bobpen 阅读数:4221更多java 我的分类: linuxmysql 版权声明:本文为博主原创文章,未经博主 ...

  5. TensorFlow学习(四):优化器Optimizer

    梯度下降优化算法综述    该文翻译自An overview of gradient descent optimization algorithms.    总所周知,梯度下降算法是机器学习中使用非常 ...

  6. 深度学习框架TensorFlow系列之(五)优化器1

    1 背景 梯度下降算法是目前最流行的优化算法之一,并且被用来优化神经网络的模型.业界知名的深度学习框架TensorFlow.Caffe等均包含了各种关于梯度下降优化器的实现.然而这些优化器经常被用作黑 ...

  7. 莫烦大大TensorFlow学习笔记(8)----优化器

    一.TensorFlow中的优化器 tf.train.GradientDescentOptimizer:梯度下降算法 tf.train.AdadeltaOptimizer tf.train.Adagr ...

  8. 查看网络抖动_Linux下3种常用的网络测速工具

    大家好,我是良许. 不管你用的是什么操作系统,网速都是你非常关心的一个性能指标,毕竟,谁都不想看个视频结果网速卡到你怀疑人生.本文介绍三个 Linux 命令行下的网络测速工具,让你随时随地知道你的网络 ...

  9. [Python从零到壹] 九.网络爬虫之Selenium基础技术万字详解(定位元素、常用方法、键盘鼠标操作)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

最新文章

  1. Java并发编程开发笔记——2线程安全性
  2. [Tkinter 教程] 布局管理 (Pack Place Grid)
  3. 英伟达再发边缘AI计算设备:仅信用卡大小,性能比TX2强15倍
  4. 使用线程,防止当前程序被阻塞
  5. LeetCode 32. Longest Valid Parentheses
  6. Intel MKL 多线程设置
  7. Java日志性能那些事(转)
  8. MappingException:class com.zsn.crm.Model.user not found whie looking for property user id
  9. netty搭建简单的文件服务器
  10. java session失效之后跳转,session失效后如何实现页面不跳转到主页而是跳转到session失效时的页面...
  11. MySQL通过命令修改密码
  12. Sophos 和 ReversingLabs 公开含2000万个 PE 文件的数据集
  13. 如何使用 MagSafe 外接电池?
  14. 【优化调度】基于matlab改进粒子群算法求解微电网优化调度问题【含Matlab源码 052期】
  15. WindowsXP3环境下IIS5.1的部分小文件
  16. 我对秒杀在技术性上的一些看法
  17. 所有图形得面积和周长公式
  18. python多线程爬取图虫网图片
  19. 值得收藏 | 关于机器学习,这可能是目前最全面最无痛的入门路径和资源!
  20. 甜心奶酪用英文怎么说_您组织中没有人会碰到什么奶酪,更不用说动弹了?

热门文章

  1. 主类main方法里面可以有不带public的子类 但是不能有接口
  2. PowerShell 扩展工具第二波!
  3. 使用git管理自己的代码--简单使用流程
  4. 禁止迅雷:迅雷服务器地址大全+ISA计算机集(xml)
  5. axios post object object_Vue前端开发——数据交互axios
  6. HTML与CSS布局技巧总结,Html和CSS布局技巧总结(偶尔回顾回顾布局也是很有必要的)...
  7. python 数学期望_(Python)零起步数学+神经网络入门
  8. python函数递归 字符串反转
  9. SAP License:如何建立应付暂估明细查询
  10. 赛锐信息:SAP实施中最常见的安全挑战