微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在我的ML模型中,目标是否污染了功能?

如何解决在我的ML模型中,目标是否污染了功能?

我正在根据this question的答案为自己的数据建立回归模型。我的目标是根据功能zumaggmagrmag和{{1}来预测训练集(imag)的最后一列}} – zmag名称zmag名称无关,这只是一个不幸的巧合)。有5个z,训练集的对图如下所示:

enter image description here

最下面一行显示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作图时,我得到了很好的同意:

enter image description here

和我绘制的其他图(例如残差,分布的箱形图等)都显示出非常好的预测。

问题在于,我怀疑我的模型可以从如此小的数据集中做出如此好的预测。所以我的问题是: 我的目标是否有某种方式可以渗入或污染我的训练集?我该如何检查?

如果有人可以使用培训集运行我的代码,并查看我是否做错了,我将非常感激。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。