【问题标题】:Pairwise comparisons for model training/testing - how to parameter tune?模型训练/测试的成对比较 - 如何调整参数?
【发布时间】:2021-09-21 19:55:05
【问题描述】:

由于某些原因,我有以下结构的基本数据框

print(df1.shape)
display(df1.head())
print(df2.shape)
display(df2.head())

顶部数据框是我的功能集,底部是输出集。为了把它变成一个适合数据建模的问题,我首先要做的是:

x_train, x_test, y_train, y_test = train_test_split(df1, df2, train_size = 0.8)

然后我分成 80% 的训练和 20% 的测试。

由于输出集 (df2; y_test/y_train) 是单独的测量值,它们本身没有内在意义,我计算标签之间的成对距离以生成单个输出值,表示观察值之间的成对距离(计算距离z-scoring 之后;z-scoring 代码在这里没有描述,但是已经完成了):

y_train = pdist(y_train, 'euclidean')
y_test = pdist(y_test, 'euclidean')

然后,我同样将此策略应用于特征集,以生成每个特征的每个实例的单个观测值之间的成对距离。

def feature_distances(input_vector):
    modified_vector = np.array(input_vector).reshape(-1,1)
    vector_distances = pdist(modified_vector, 'euclidean')
    vector_distances = pd.Series(vector_distances)
    return vector_distances

x_train = x_train.apply(feature_distances, axis = 0)
x_test = x_test.apply(feature_distances, axis = 0)

然后我继续训练和测试我的所有模型。 现在我正在尝试线性回归、随机森林、xgboost。

有没有什么简单的方法可以在我的数据集中实现交叉验证方案? 由于我的问题需要计算观测值之间的成对距离,因此我正在努力寻找一种简单的方法来执行交叉验证方案以优化参数调整。

GridsearchCV 在这里并不能很好地工作,因为在测试/火车分割的每个实例中,必须重新计算距离以避免火车污染测试。

希望清楚!

【问题讨论】:

    标签: python random-forest xgboost modeling


    【解决方案1】:
    x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.8, random_state=n)
    

    这里X 是独立特征,y 是相关特征意味着您实际想要预测的内容 - 它可以是标签或连续值。我们在训练数据集上使用train_test_split,我们使用(x_trainy_train)来训练模型和(x_testy_test)来测试模型以确保模型在未知数据上的性能(x_testy_test)。在您的情况下,您已将 y 作为 df2 给出,这是错误的,只需找出您的目标特征并将其作为 y 即可,无需拆分测试数据。

    【讨论】:

    • 我认为您误读了我的问题。分裂是在 Y 值通过返回单个值的欧几里德距离计算之前进行的。拆分必须在单值距离计算之前完成,以尽量减少列车对测试的污染。提前进行拆分可以更轻松地确保数据在特征和结果集中进行相同的拆分。
    【解决方案2】:

    首先,我从您的数据框的形状中了解到,您的输入中有 42 个样本和 1643 个特征,每个输出向量包含 392 个值。

    大量输入:如果您确定您的问题有 1643 个特征,您可能需要使用 PCA 来降低维度而不是成对距离。您应该收集更多样本而不是 42 个样本以避免过度拟合,因为没有足够的数据来训练和测试您的模型。

    大量输出:您可以使用 sampled_softmax_loss 来加快训练过程,如 TensorFlow documentation 中所述。你也可以阅读这个here。如果您不想采用这种方法,可以继续使用此输出进行训练,但这需要一些时间。

    【讨论】:

      猜你喜欢
      • 2021-09-18
      • 1970-01-01
      • 2018-12-29
      • 2020-12-18
      • 2022-08-20
      • 2020-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多