零基础入门深度学习——数据处理

该博客介绍了如何使用Python的numpy库进行数据预处理,包括从文件读取数据、数据形状变换、数据集划分、数据归一化以及封装成load_data函数。重点讲解了numpy.fromfile()函数读取二进制或文本文件,reshape()函数变换数据形状,以及如何进行数据集的训练集/测试集划分和归一化处理。
摘要由CSDN通过智能技术生成

课程来源:百度飞桨

飞桨AI Studio - 人工智能学习实训社区 (baidu.com)

目录

飞桨AI Studio - 人工智能学习实训社区 (baidu.com)

数据处理

1.读入数据

绝对地址、相对地址

读取数据

数据形状变换

数据集和训练集的划分

数据归一化

封装函数loaddata


数据处理

数据处理包含五个部分:数据导入、数据形状变换、数据集划分、数据归一化处理和封装load data函数。数据预处理后,才能被模型调用。

1.读入数据

绝对地址、相对地址

如果引用绝对地址需加  r'绝对地址'

path.append(r'E:\Downloads\绝对地址\demo') # 添加路径

相对地址

../ 表示当前文件所在的目录的上一级目录

./ 表示当前文件所在的目录(可以省略)

/ 表示当前站点的根目录(域名映射的硬盘目录)

读取数据

numpy.fromfile

numpy.fromfile(file, dtype=float, count=-1, sep='', offset=0)

从文本或二进制文件中的数据构造一个数组。

读取已知数据类型的二进制数据以及解析简单格式化的文本文件的一种高效方法。使用tofile方法写入的数据可以使用此函数读取。

参数

file :file 或 str 或 Path

打开文件对象或文件名。

在1.17.0版中进行了更改:pathlib.Path现在接受对象。

dtype :data-type, 可选

返回数组的数据类型。对于二进制文件,

它用于确定文件中各项的大小和字节顺序。

支持大多数内置数字类型,并且可能支持扩展名类型。

1.18.0版中的新功能:复杂dtypes

count :int

要读取的项目数。-1表示所有项目(即完整文件)。

sep :str

如果文件是文本文件,则项目之间的分隔符。

空(“”)分隔符表示文件应被视为二进制文件。

分隔符中的空格(“”)匹配零个或多个空格字符。

仅由空格组成的分隔符必须至少匹配一个空格。

offset :int

与文件当前位置的偏移量(以字节为单位)。

默认值为0。仅允许用于二进制文件。

1.17.0版中的新功能。

参考:Python numpy.fromfile函数方法的使用-CJavaPy

数据形状变换

  • numpy.arange(n).reshape(a, b)    依次生成n个自然数,并且以a行b列的数组形式显示
  • mat (or array).reshape(c, -1)     必须是矩阵格式或者数组格式,才能使用 .reshape(c, -1) 函数, 表示将此矩阵或者数组重组,以 c行d列的形式表示
  • numpy.arange(a,b,c).reshape(m,n)  :将array的维度变为m 行 n列。

参考:Python的reshape的用法:reshape(1,-1)_wamg潇潇的博客-CSDN博客_python reshape

数据集和训练集的划分

注意划分比例,一般为7/3或 8/2为训练集/测试集

数据归一化

1.训练集和测试集都需要做统一的归一化操作

2.对测试集进行归一化操作时,所用最大、最小、平均值均为训练集上的数据

封装函数loaddata

注意封装后返回值

附完整数据处理代码:

# 数据处理部分,共有五个步骤
# 1.读入数据
# 导入需要用到的package
import numpy as np
import json
# 读入训练数据
datafile = 'D:\PycharmProjects\pytorch学习\波士顿房价预测\housing.data'
data = np.fromfile(datafile, sep=' ')
# print(data)  # [6.320e-03 1.800e+01 2.310e+00 ... 3.969e+02 7.880e+00 1.190e+01],共506*14条数据为一行

# 2.数据形状变换
# 读入之后的数据被转化成1维array,其中array的第0-13项是第一条数据,第14-27项是第二条数据,以此类推....
# 这里对原始数据做reshape,变成N x 14的形式
feature_names = [ 'CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE' , 'DIS' , 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV' ]
feature_num = len(feature_names)
# print(feature_num)  # feature_num=14
data = data.reshape([data.shape[0] // feature_num, feature_num])
# print(data.shape)  # (506, 14)
# print(data[0])  # 对应数据集第一行14个数据

# 3.数据集划分
ratio = 0.8  # 所有数据中作为训练集的比例
offset = int(data.shape[0] * ratio)
training_data = data[:offset]  # 切片操作,从第0个到offset-1个
# print(training_data.shape)  # (404, 14)

# 4.数据归一化处理
# 计算train数据集的最大值,最小值,平均值
maximums, minimums, avgs = training_data.max(axis=0), training_data.min(axis=0), training_data.sum(axis=0) / training_data.shape[0]
# print(maximums,minimums,avgs) 得到每一列的最大值、最小值、平均值
# 对数据进行归一化处理
for i in range(feature_num):
    #print(maximums[i], minimums[i], avgs[i])
    data[:, i] = (data[:, i] - minimums[i]) / (maximums[i] - minimums[i])  # 所有的值都在0-1之间了

# 5.封装成load data函数
# 封装成函数的目的是方便以后的模型调用
def load_data():
    # 从文件导入数据
    datafile = 'D:\PycharmProjects\pytorch学习\波士顿房价预测\housing.data'
    data = np.fromfile(datafile, sep=' ')
    # 每条数据包括14项,其中前面13项是影响因素,第14项是相应的房屋价格中位数
    feature_names = [ 'CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', \
                      'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV' ]
    feature_num = len(feature_names)
    # 将原始数据进行Reshape,变成[N, 14]这样的形状
    data = data.reshape([data.shape[0] // feature_num, feature_num])
    # 将原数据集拆分成训练集和测试集
    # 这里使用80%的数据做训练,20%的数据做测试
    # 测试集和训练集必须是没有交集的
    ratio = 0.8
    offset = int(data.shape[0] * ratio)
    training_data = data[:offset]
    # 计算训练集的最大值,最小值,平均值
    maximums, minimums, avgs = training_data.max(axis=0), training_data.min(axis=0), \
                                 training_data.sum(axis=0) / training_data.shape[0]
    # 对数据进行归一化处理
    for i in range(feature_num):
        #print(maximums[i], minimums[i], avgs[i])
        data[:, i] = (data[:, i] - minimums[i]) / (maximums[i] - minimums[i])
    # 训练集和测试集的划分比例
    training_data = data[:offset]
    test_data = data[offset:]
    return training_data, test_data

# 获取数据
training_data, test_data = load_data()
x = training_data[:, :-1]  # 去掉最后一列数据,每组数据变成13个
y = training_data[:, -1:]  # 最后一列数据

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值