如何解决在我的ML模型中,目标是否污染了功能?
我正在根据this question的答案为自己的数据建立回归模型。我的目标是根据功能z
,umag
,gmag
,rmag
和{{1}来预测训练集(imag
)的最后一列}} – zmag
的名称与zmag
的名称无关,这只是一个不幸的巧合)。有5个z
,训练集的对图如下所示:
最下面一行显示mag
与每个z
之间的关系,在我看来,它们之间几乎没有关联。
如果有人想看一下,我正在使用的训练集(预处理后有15429行)是here。
我的代码:
mag
当我将预测的import seaborn as sns
import tensorflow as tf
from tensorflow import keras
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import tensorflow_docs as tfdocs
import tensorflow_docs.plots
import tensorflow_docs.modeling
from scipy.stats import gaussian_kde
################################################################################
def build_model(n):
model = keras.Sequential([
keras.layers.Dense(3,activation='relu',input_shape=(n,)),keras.layers.Dense(4,activation='relu'),keras.layers.Dense(2)
])
model.compile(loss='mae',optimizer = tf.keras.optimizers.RMSprop(0.001),metrics = ['mae','mse'])
return model
# Here I defined some plotting functions that aren't important
################################################################################
dataset = pd.read_csv('sdss12.csv')
datasetname = 'SDSS DR12 QSOs'
mags = ['umag','gmag','rmag','imag','zmag']
columns = mags + ['z']
num_features = len(columns)
dataset = dataset[columns]
train_dataset = dataset.sample(frac = 0.8,random_state = 1)
valid_dataset = dataset.drop(train_dataset.index) # is it properly dropping the training data?
train_labels = train_dataset.iloc[:,num_features-1:].values # all but the 'z' column
valid_labels = valid_dataset.iloc[:,num_features-1:].values # all but the 'z' column
print('Training set: \n',train_dataset)
print('Validation set: \n',valid_dataset)
model = build_model(num_features)
model.summary()
N = 50
early_stop = keras.callbacks.EarlyStopping(monitor='val_loss',patience=500)
history = model.fit(train_dataset.iloc[:,:num_features],train_labels,epochs = N,validation_split = 0.2,verbose = 0,callbacks = [
early_stop,tfdocs.modeling.EpochDots()
])
model.save("model2.h5")
# Model testing
valid_predictions = model.predict(valid_dataset.iloc[:,:num_features])
valid_dataset['Predicted z'] = valid_predictions[:,0]
print("\nPredicted\n")
print(valid_dataset)
# Visualise the model's training progress using the stats in the history object
hist = pd.DataFrame(history.history)
hist['epoch'] = history.epoch
print(hist.tail)
print('Predicted z stats: \n',valid_dataset['Predicted z'].describe())
print('Spectroscopic z stats: \n',valid_dataset['z'].describe())
与实际的z
作图时,我得到了很好的同意:
和我绘制的其他图(例如残差,分布的箱形图等)都显示出非常好的预测。
问题在于,我怀疑我的模型可以从如此小的数据集中做出如此好的预测。所以我的问题是: 我的目标是否有某种方式可以渗入或污染我的训练集?我该如何检查?
如果有人可以使用培训集运行我的代码,并查看我是否做错了,我将非常感激。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。