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 列改为一个随机数而非丢弃。
  • 相关阅读:
    How to function call using 'this' inside forEach loop
    jquery.validate.unobtrusive not working with dynamic injected elements
    Difference between jQuery.extend and jQuery.fn.extend?
    Methods, Computed, and Watchers in Vue.js
    Caution using watchers for objects in Vue
    How to Watch Deep Data Structures in Vue (Arrays and Objects)
    Page: DOMContentLoaded, load, beforeunload, unload
    linux bridge
    linux bridge
    EVE-NG网卡桥接
  • 原文地址:https://www.cnblogs.com/guangzan/p/15435577.html
Copyright © 2011-2022 走看看