zoukankan      html  css  js  c++  java
  • CH6 从文件中载入训练数据

    1. 掌握用文本文件和CSⅴ文件准备训练数据
    2. 掌握对数据列和非数据列的处理
    3. 掌握从文件中加载训练数据

    用文件准备训练数据

    纯文本文件

    • 纯文本文件(.txt):只保存文本信息的文件
    • 相比Word、PDF等格式文件较小
    • 相比二进制格式存储数据文件稍大(易读性较好)

    数据的数字化

    image

    数据格式

    image

    训练数据的格式

    image

    数据整理

    小明,90,80,70,0
    小红,98,95,87,1
    小王,99,99,99,1
    小华,80,85,90,0
    

    非数字项的清理

    image

    训练数据的一般格式

    纯文本文件,文件编码是 UTF-8,Excel 软件,识别 CSV 文件为表格并编辑。

    • CSV( Comma-Separated Values)格式指的是文件中每行是一条数据,每行的多个数值间用逗号分隔开,例:

      1,2,3,4
      3.25,9.5,8.7,1.34
      
    • CSV 文件中一般每行的数据项数应该是一样的

    • CSV 文件可以被 Excel 软件识别为表格并编辑

    CSV 文件处理数据

    把文件另存为 data.csv。

    image

    加载文件中的训练数据

    import numpy as np
    wholeData = np.loadtxt('data.txt', delimiter=',', dtype=np.float32)
    print(wholeData)
    

    loadtxt 函数的 3 个参数:

    1. 要读取的文件名
    2. 数据项之间用什么字符隔开
    3. 读取的数据类型

    从非当前目录加载训练数据,使用绝对文件路径。

    np.loadtxt('C:mldata.txt', delimiter=',', dtype=np.float32)
    

    舍弃非数字列

    import numpy as np
    import pandas as pd
    
    fileData = pd.read_csv('data.csv', dtype=np.float32, header=None, usecols=(1,2,3,4))
    wholeData = fileData.as_matrix()
    print(wholeData)
    
    • usecols=(1,2,3,4) 只保留第 1、2、3、4 列,即丢弃第 0 列(注意排序是从0开始)
    • fileData.as_matrix() 函数:将表格数据转换为二维数组

    非数字列与数字列的转换

    90,80,70,否
    98,95,87,是
    99,99,99,是
    80,85,90,否
    
    import numpy as np
    import pandas as pd
    
    fileData = pd.read_csv('data.csv', dtype=np.float32, header=None, converters={(3):lambda s:1.0 if s=='是' else 0.0})
    wholeData = fileData.as_matrix()
    print(wholeData)
    
    • 使用 converter 来转换第 3 列为 0 或 1 的数字。
    • lambda - 匿名函数
    90.80,70,0
    98,95,87,1
    99,99,99,1
    80,85,90,0
    

    把序号为 1 的列(第 2 列)的数字都减去 10。

    fileData = pd.read_csv('data.csv', dtype=np.float32, header=None, converters={(1):lambda s:float(s)-10})
    

    把序号为 2 的列(第三列)都变成 0。

    fileData = pd.read_csv('data.csv', dtype=np.float32, header=None, converters={(2):lambda s:0,(3):lambda s:1})
    

    分拆数据喂给神经网络

    # ...
    fileData = pd.read_csv('data.csv', dtype=np.float32, header=None)
    wholeData = fileData.as_matrix()
    rowCount = int(wholeData.size/wholeData[0].size)
    # ...
    
    for i in range(2):
    	for j in range(rowCount):
    		result = sess.run(
    			[train, x, yTrain, wn, b, n2, y, loss],
    			feed_dict={x:wholeData[j][0:3], yTrain:wholeData[j][3]}
    		)
    		print(result)
    

    二维数组的第一维表示行,第二维代表列,wholeData[j][0:3] 表示第j行的前3个数字组成的向量。wholeData[j][3] 表示第j行的第4个数
    字,是一个标量。

    image

    练习

    1. 尝试用文本文件准备一个每行有 5 项数据的训练数据集,并读取其中的内容,同时舍弃掉第 3 列的数据。
    2. 将上一题中准备的训练数据读取后,将第 3 列改为一个随机数而非丢弃。
  • 相关阅读:
    xml实现AOP
    AOP
    python 大小写转换方法(全)
    vs2013 快捷键
    构造方法后面带:this()
    资源的使用----实例分析
    把列表变成用指定字符连接的字符串
    python 列表、元组操作
    工作踩坑记录:JavaScript跳转被缓存
    《Effective Java》读书笔记
  • 原文地址:https://www.cnblogs.com/guangzan/p/15435577.html
Copyright © 2011-2022 走看看