我是靠谱客的博主 标致硬币,最近开发中收集的这篇文章主要介绍基本回归:预测燃油效率print(tf.version)从标签中分离特征数据规范化模型构建模型检查模型训练模型通过为每个完成的时期打印一个点来显示训练进度patience 值用来检查改进 epochs 的数量测试集中表现做预测,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

“”"
Basic regression: Predict fuel efficiency
汽车燃油效率
“”"

import pathlib

import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns

import tensorflow as tf

from tensorflow import keras
from tensorflow.keras import layers

print(tf.version)

dataset_path = keras.utils.get_file(‘auto-mpg.data’,
‘http://archive.ics.uci.edu/ml/machine-learning-databases/auto-mpg/auto-mpg.data’)
print(dataset_path)
#导入数据集
column_names = [‘MPG’,‘Cylinders’,‘Displacement’,‘Horsepower’,‘Weight’,
‘Acceleration’, ‘Model Year’, ‘Origin’]
raw_dataset = pd.read_csv(dataset_path,
names=column_names,
na_values = “?”,
comment=’t’,
sep=" ",
skipinitialspace=True)

dataset = raw_dataset.copy()
dataset.tail()
#数据清洗
#查看未知数据
print(dataset.isna().sum())
#删除未知数据
dataset = dataset.dropna()

origin = dataset.pop(‘Origin’)

dataset[‘USA’] = (origin == 1)*1.0
dataset[‘Europe’] = (origin == 2)*1.0
dataset[‘Japan’] = (origin == 3)*1.0
dataset.tail()

#拆分训练数据集和测试数据集
train_dataset = dataset.sample(frac=0.8,
random_state=0)
test_dataset = dataset.drop(train_dataset.index)
#数据检查
sns.pairplot(train_dataset[[“MPG”,
“Cylinders”,
“Displacement”,
“Weight”]],
diag_kind=“kde”)

train_stats = train_dataset.describe()
print(train_stats.pop(“MPG”))
train_stats = train_stats.transpose()
print(train_stats)

从标签中分离特征

train_labels = train_dataset.pop(‘MPG’)
test_labels = test_dataset.pop(‘MPG’)

数据规范化

def norm(x):
return (x - train_stats[‘mean’]) / train_stats[‘std’]
normed_train_data = norm(train_dataset)
normed_test_data = norm(test_dataset)

模型

构建模型

def build_model():
model = keras.Sequential([
layers.Dense(64, activation=‘relu’, input_shape=[len(train_dataset.keys())]),
layers.Dense(64, activation=‘relu’),
layers.Dense(1)
])

optimizer = tf.keras.optimizers.RMSprop(0.001)

model.compile(loss=‘mse’,
optimizer=optimizer,
metrics=[‘mae’, ‘mse’])
return model

model = build_model()

检查模型

print(model.summary())

example_batch = normed_train_data[:10]
example_result = model.predict(example_batch)
print(example_result)

训练模型

通过为每个完成的时期打印一个点来显示训练进度

class PrintDot(keras.callbacks.Callback):
def on_epoch_end(self, epoch, logs):
if epoch % 100 == 0: print(’’)
print(’.’, end=’’)

EPOCHS = 1000

history = model.fit(
normed_train_data, train_labels,
epochs=EPOCHS, validation_split = 0.2,
verbose=0,
callbacks=[PrintDot()])

#可视化模型训练进度
hist = pd.DataFrame(history.history)
hist[‘epoch’] = history.epoch
hist.tail()

def plot_history(history):
hist = pd.DataFrame(history.history)
hist[‘epoch’] = history.epoch

plt.figure()
plt.xlabel(‘Epoch’)
plt.ylabel(‘Mean Abs Error [MPG]’)
plt.plot(hist[‘epoch’], hist[‘mae’],
label=‘Train Error’)
plt.plot(hist[‘epoch’], hist[‘val_mae’],
label = ‘Val Error’)
plt.ylim([0,5])
plt.legend()

plt.figure()
plt.xlabel(‘Epoch’)
plt.ylabel(‘Mean Square Error [ M P G 2 MPG^2 MPG2]’)
plt.plot(hist[‘epoch’], hist[‘mse’],
label=‘Train Error’)
plt.plot(hist[‘epoch’], hist[‘val_mse’],
label = ‘Val Error’)
plt.ylim([0,20])
plt.legend()
plt.show()

plot_history(history)

“”"
1、该图表显示在约100个 epochs 之后误差非但没有改进,反而出现恶化。
2、更新 model.fit 调用,当验证值没有提高上是自动停止训练。
使用一个 EarlyStopping callback 来测试每个 epoch 的训练条件。
如果经过一定数量的 epochs 后没有改进,则自动停止训练。
“”"

model = build_model()

patience 值用来检查改进 epochs 的数量

early_stop = keras.callbacks.EarlyStopping(monitor=‘val_loss’, patience=10)

history = model.fit(normed_train_data, train_labels, epochs=EPOCHS,
validation_split = 0.2, verbose=0, callbacks=[early_stop, PrintDot()])

plot_history(history)

测试集中表现

loss, mae, mse = model.evaluate(normed_test_data, test_labels, verbose=2)

print(“Testing set Mean Abs Error: {:5.2f} MPG”.format(mae))

做预测

test_predictions = model.predict(normed_test_data).flatten()

plt.scatter(test_labels, test_predictions)
plt.xlabel(‘True Values [MPG]’)
plt.ylabel(‘Predictions [MPG]’)
plt.axis(‘equal’)
plt.axis(‘square’)
plt.xlim([0,plt.xlim()[1]])
plt.ylim([0,plt.ylim()[1]])
_ = plt.plot([-100, 100], [-100, 100])

#误差分布
error = test_predictions - test_labels
plt.hist(error, bins = 25)
plt.xlabel(“Prediction Error [MPG]”)
_ = plt.ylabel(“Count”)
“”"
不是完全的高斯分布,样本的数据很小导致的
“”"

“”"
均方损失(MSE)是用于回归问题的常见损失函数(分类问题中使用不同的损失函数)。
类似的,用于回归的评估指标与分类不同。
当数字输入数据特征的值范围时,每个特征应独立存在不同的范围。
如果训练数据报警,一种方法是选择隐藏层简单的小网络,电话号码。
早期停止是一种预防生日的有效技术。
“”"

最后

以上就是标致硬币为你收集整理的基本回归:预测燃油效率print(tf.version)从标签中分离特征数据规范化模型构建模型检查模型训练模型通过为每个完成的时期打印一个点来显示训练进度patience 值用来检查改进 epochs 的数量测试集中表现做预测的全部内容,希望文章能够帮你解决基本回归:预测燃油效率print(tf.version)从标签中分离特征数据规范化模型构建模型检查模型训练模型通过为每个完成的时期打印一个点来显示训练进度patience 值用来检查改进 epochs 的数量测试集中表现做预测所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部