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:\ml\data.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 列改為一個隨機數而非丟棄。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM