zoukankan      html  css  js  c++  java
  • 用keras实现基本的回归问题

    数据集介绍

    共有506个样本,拆分为404个训练样本和102个测试样本

    该数据集包含 13 个不同的特征:

    1. 人均犯罪率。
    2. 占地面积超过 25000 平方英尺的住宅用地所占的比例。
    3. 非零售商业用地所占的比例(英亩/城镇)。
    4. 查尔斯河虚拟变量(如果大片土地都临近查尔斯河,则为 1;否则为 0)。
    5. 一氧化氮浓度(以千万分之一为单位)。
    6. 每栋住宅的平均房间数。
    7. 1940 年以前建造的自住房所占比例。
    8. 到 5 个波士顿就业中心的加权距离。
    9. 辐射式高速公路的可达性系数。
    10. 每 10000 美元的全额房产税率。
    11. 生师比(按城镇统计)。
    12. 1000 * (Bk - 0.63) ** 2,其中 Bk 是黑人所占的比例(按城镇统计)。
    13. 较低经济阶层人口所占百分比。

    技巧

    • 均方误差 (MSE) 是用于回归问题的常见损失函数(与分类问题不同)。
    • 同样,用于回归问题的评估指标也与分类问题不同。常见回归指标是平均绝对误差 (MAE)。
    • 如果输入数据特征的值具有不同的范围,则应分别缩放每个特征。
    • 如果训练数据不多,则选择隐藏层较少的小型网络,以避免出现过拟合。
    • 早停法是防止出现过拟合的实用技术。

    注意事项

    如果数据集下载失败,可以在我的Github上下载:https://github.com/MartinLwx/ML-DL

    代码

    from __future__ import absolute_import, division, print_function
    
    import tensorflow as tf
    from tensorflow import keras
    import numpy as np
    
    boston_housing = keras.datasets.boston_housing
    (train_data, train_labels), (test_data, test_labels) = boston_housing.load_data()
    
    # 打乱训练集
    order = np.argsort(np.random.random(train_labels.shape))
    train_data = train_data[order]
    train_labels = train_labels[order]
    
    #计算平均值和方差的时候不用测试集的数据
    mean = train_data.mean(axis=0)
    std = train_data.std(axis=0)
    train_data = (train_data - mean) / std
    test_data = (test_data - mean) / std
    
    
    #因为后文要用earlystop技术所以写了一个函数
    def build_model():
        model = keras.Sequential([
        keras.layers.Dense(64, activation=tf.nn.relu,
                           input_shape=(train_data.shape[1],)),
        keras.layers.Dense(64, activation=tf.nn.relu),
        keras.layers.Dense(1)
      ])
    
        optimizer = tf.train.RMSPropOptimizer(0.001)
    
        model.compile(loss='mse',
                    optimizer=optimizer,
                    metrics=['mae'])
        return model
    
    model = build_model()
    
    history = model.fit(train_data, train_labels, epochs=EPOCHS,
                        validation_split=0.2, verbose=0)
    
    #返回的是loss和mae(平均绝对误差)
    model.evaluate(test_data, test_labels)  #输出[16.7056874293907, 2.5310279341305004]
    
    
    model = build_model()
    
    # The patience parameter is the amount of epochs to check for improvement
    early_stop = keras.callbacks.EarlyStopping(monitor='val_loss', patience=20)
    
    history = model.fit(train_data, train_labels, epochs=EPOCHS,
                        validation_split=0.2, verbose=0,
                        callbacks=[early_stop])
    
    model.evaluate(test_data, test_labels)	#输出了[21.388992309570313, 2.9450648532194248]
    

    参考

    https://www.tensorflow.org/tutorials/keras/basic_regression?hl=zh-cn

  • 相关阅读:
    django 中 slice 和 truncatewords 不同用法???
    js如何获取到select的option值???
    MySQL的btree索引和hash索引的区别
    Python3之Django Web框架中间件???
    2019.07.25考试报告
    2019.07.19考试报告
    2019.07.18考试报告
    2019.07.16考试报告
    2019.07.12考试报告
    ELK+Kafka
  • 原文地址:https://www.cnblogs.com/MartinLwx/p/10078340.html
Copyright © 2011-2022 走看看