用飞桨构建波士顿房价预测模型的示范代码有Bug?
收藏
快速回复
AI Studio平台使用 问答Notebook项目 1019 2
用飞桨构建波士顿房价预测模型的示范代码有Bug?
收藏
快速回复
AI Studio平台使用 问答Notebook项目 1019 2

在 https://aistudio.baidu.com/aistudio/projectdetail/1579715 上,是使用飞桨构建波士顿房价预测模型的载入数据的示范代码(代码如下)。

详细阅读后,有几个疑问请大家释疑:

1、代码中有两行 “training_data = data[:offset]”,分别在归一化处理前和归一化处理后,作用都是从整体数据集中切片出悬链数据集。为什么要切片两次?在归一化处理后,切片出训练集和测试集,不是更好吗?归一化处理之前切片出来有什么用?

2、代码中,因为归一化处理之前求的最大值、最小值和平均值,是切片出来的训练集 training_data 的最大、最小和平均值。可是在归一化处理时,却用这几个值对整体数据集 data 进行归一化处理。按理说应该是使用整体数据集 data 的最大、最小和平均值来对整体数据集 data 进行归一化处理才对呀?因为局部数据(训练集数据)的最大、最小和平均值,不一定就是整体数据data的最大、最小和平均值。

3、代码中为什么要对 最大、最小和平均值 声明为 global ?按照代码的注释是为了后面与测试用于归一化处理。可是如上所述,这些最大、最小和平均值是训练集的最大、最小和平均值,与预测的数据集有什么关系?

def load_data():
    # 从文件导入数据
    datafile = './work/housing.data'
    data = np.fromfile(datafile, sep=' ', dtype=np.float32)

    # 每条数据包括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]

    # 计算train数据集的最大值,最小值,平均值
    maximums, minimums, avgs = training_data.max(axis=0), training_data.min(axis=0), \
                                 training_data.sum(axis=0) / training_data.shape[0]
    
    # 记录数据的归一化参数,在预测时对数据做归一化
    global max_values
    global min_values
    global avg_values
    max_values = maximums
    min_values = minimums
    avg_values = avgs

    # 对数据进行归一化处理
    for i in range(feature_num):
        data[:, i] = (data[:, i] - avgs[i]) / (maximums[i] - minimums[i])

    # 训练集和测试集的划分比例
    training_data = data[:offset]
    test_data = data[offset:]
    return training_data, test_data
0
收藏
回复
全部评论(2)
时间顺序
万霆007
#2 回复于2021-02

hi,请问你看的是哪个教程呢?你上面的这个链接:https://aistudio.baidu.com/aistudio/projectdetail/1579715  我看是非公开项目。我们打不开呢。以及您说确实有道理,我也感觉这个代码写的有问题。

推荐您看飞桨官方的波士顿房价预测教程呢:https://www.paddlepaddle.org.cn/documentation/docs/zh/tutorial/quick_start/linear_regression/linear_regression.html

0
回复
h
heavensd0
#3 回复于2021-10

也刚好看到这个教程,代码确实有重复的地方,但是不影响最后结果。

另外,在做归一化的时候,参数计算使用的都是依赖训练集数据,测试集数据在预测之前是不能使用的。

 

0
回复
在@后输入用户全名并按空格结束,可艾特全站任一用户