@@ -0,0 +1,86 @@
|
||||
import tensorflow as tf
|
||||
dataset_path = keras.utils.get_file("housing.data",
|
||||
"https://archive.ics.uci.edu/ml/machine-learning-databases/housing/housing.data")
|
||||
column_names = ['CRIM','ZN','INDUS','CHAS','NOX',
|
||||
'RM', 'AGE', 'DIS','RAD','TAX','PTRATION', 'B', 'LSTAT', 'MEDV']
|
||||
raw_dataset = pd.read_csv(dataset_path, names=column_names,
|
||||
na_values = "?", comment='\t',
|
||||
sep=" ", skipinitialspace=True)
|
||||
dataset = raw_dataset.copy()
|
||||
#下面的函数用以返回最后n行。
|
||||
#dataset.tail(n=10)
|
||||
# 将数据集分为训练集和测试集
|
||||
# p 为训练集所占数据比例
|
||||
p=0.8
|
||||
trainDataset = dataset.sample(frac=p,random_state=0)
|
||||
testDataset = dataset.drop(trainDataset.index)
|
||||
|
||||
import matplotlib.pyplot as plt
|
||||
fig, ax = plt.subplots()
|
||||
x = trainDataset['RM']
|
||||
y = trainDataset['MEDV']
|
||||
ax.scatter(x, y, edgecolors=(0, 0, 0))
|
||||
ax.set_xlabel('RM')
|
||||
ax.set_ylabel('MEDV')
|
||||
plt.show()
|
||||
trainInput = trainDataset['RM']
|
||||
trainTarget = trainDataset['MEDV']
|
||||
testInput = testDataset['RM']
|
||||
testTarget = testDataset['MEDV']
|
||||
|
||||
model = keras.Sequential([
|
||||
layers.Dense(1, use_bias=True, input_shape=(1,))
|
||||
])
|
||||
|
||||
optimizer = tf.keras.optimizers.Adam(
|
||||
learning_rate=0.01, beta_1=0.9, beta_2=0.99, epsilon=1e-05, amsgrad=False,
|
||||
name='Adam')
|
||||
model.compile(loss='mse', optimizer=optimizer, metrics=['mae','mse'])
|
||||
|
||||
|
||||
n_idle_epochs = 100
|
||||
earlyStopping = tf.keras.callbacks.EarlyStopping(monitor='val_loss',
|
||||
patience=n_idle_epochs, min_delta=0.01)
|
||||
class NEPOCHLogger(tf.keras.callbacks.Callback):
|
||||
def __init__(self,per_epoch=100):
|
||||
'''3 实例 4
|
||||
display: Number of batches to wait before outputting loss
|
||||
'''
|
||||
self.seen = 0
|
||||
self.per_epoch = per_epoch
|
||||
def on_epoch_end(self, epoch, logs=None):
|
||||
if epoch % self.per_epoch == 0:
|
||||
print('Epoch {}, loss {:.2f}, val_loss {:.2f},
|
||||
mae {:.2f}, val_mae {:.2f}, mse {:.2f}, val_mse {:.2f}'\
|
||||
.format(epoch, logs['loss'], logs['val_loss'],logs['mae'],
|
||||
logs['val_mae'],logs['mse'], logs['val_mse']))
|
||||
log_display = NEPOCHLogger(per_epoch=100)
|
||||
n_epochs = 2000
|
||||
history = model.fit(
|
||||
trainDataOne, trainLabelOne, batch_size=256,
|
||||
epochs=n_epochs, validation_split = 0.1, verbose=0,
|
||||
callbacks=[earlyStopping,log_display])
|
||||
#打印训练集和验证集MAE
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
import seaborn as sns
|
||||
mae = np.asarray(history.history['mae'])
|
||||
val_mae = np.asarray(history.history['val_mae'])
|
||||
num_values = (len(mae))
|
||||
values = np.zeros((num_values,2), dtype=float)
|
||||
values[:,0] = mae
|
||||
values[:,1] = val_mae
|
||||
steps = pd.RangeIndex(start=0,stop=num_values)
|
||||
data = pd.DataFrame(values, steps, columns=["mae", "va-mae"])
|
||||
sns.set(style="whitegrid")
|
||||
sns.lineplot(data=data, palette="tab10", linewidth=2.5)
|
||||
|
||||
predictions = model.predict(testInput).flatten()
|
||||
a = plt.axes(aspect='equal')
|
||||
plt.scatter(predictions, testTarget, edgecolors=(0, 0, 0))
|
||||
plt.xlabel('True Values')
|
||||
plt.ylabel('Predictions')
|
||||
lims = [0, 50]
|
||||
plt.xlim(lims)
|
||||
plt.ylim(lims)
|
||||
_ = plt.plot(lims, lims)
|
||||
Reference in New Issue
Block a user