model.fit(X,y) 和 model.fit(train_X, train_y) 有啥区别
Posted
技术标签:
【中文标题】model.fit(X,y) 和 model.fit(train_X, train_y) 有啥区别【英文标题】:What is the difference between model.fit(X,y), and model.fit(train_X, train_y)model.fit(X,y) 和 model.fit(train_X, train_y) 有什么区别 【发布时间】:2020-10-16 08:32:57 【问题描述】:当我学习 kaggle 微课程(机器学习)时,我学会了如何找到最佳叶子大小(通过找到最小 MAE)。但是,当我将最佳叶子尺寸放入最终模型时,我得到了不同的 MAE 值。例如,
def get_mae(max_leaf_nodes, train_X, val_X, train_y, val_y):
model = DecisionTreeRegressor(max_leaf_nodes = max_leaf_nodes, random_state = 0)
model.fit(train_X, train_y)
preds_val = model.predict(val_X)
mae = mean_absolute_error(preds_val, val_y)
return mae
candidates_leaf_nodes = list(range(5, 500))
scores = leaf_size: get_mae(leaf_size, train_X, val_X, train_y, val_y) for leaf_size in candidates_leaf_nodes
best_leaf_size = min(scores, key = scores.get)
best_model = DecisionTreeRegressor(max_leaf_nodes = best_leaf_size, random_state = 0)
best_model.fit(X,y)
best_preds = best_model.predict(val_X)
best_mae = mean_absolute_error(best_preds, val_y)
print("best_leaf_size: :,.0f".format(best_leaf_size))
print("Validation MAE for best value of best_leaf_size: :,.0f".format(get_mae(best_leaf_size, train_X, val_X, train_y, val_y)))
print("Validation MAE for best value of best_leaf_size: :,.0f".format(best_mae))
结果显示
best_leaf_size:71
best_leaf_size 最佳值的验证 MAE:26,704
best_leaf_size 最佳值的验证 MAE:18,616
当我使用 .fit(train_X, train_y) 和 当我使用 .fit(X, y) 时,我得到了 18,616 个 MAE。
所以,我想知道为什么我得到两个不同的值,这意味着 .fit(train_X, train_y) 和 .fit(X, y) 之间有什么区别。
谢谢。
【问题讨论】:
【参考方案1】:model.fit(X,y) 表示我们正在使用所有给定的数据集来训练模型,并且相同的数据集将用于评估模型,即我们的训练和测试数据集将相同,不会给出正确的结果。 因此,最好的办法是将数据集分为两部分,即训练数据和测试数据。 在这里,features(X) 和 values(y) 都会被分割。
X分为train_X、test_X和 y分为train_y和test_y
拆分基于随机数生成器。提供一个数值到 random_state 参数保证我们每次运行脚本时都得到相同的分割。
train_X, test_X, train_y, test_y = train_test_split(X, y, random_state = 0)
【讨论】:
【参考方案2】:您正在用相同的参数拟合模型,但在两个不同的数据集上,一个在 train_X
上,另一个在 X
上。根据数据集的分布,您将获得不同的 MAE 分数。
【讨论】:
那么,你是说两个模型基本上是不同的模型?一个是基于X的数据集,一个是基于train_X的数据集? 是的,即使你用相同的参数训练了模型,因为你使用了不同的训练数据,你最终会得到两个不同的模型(具有不同的学习权重) 给出拒绝投票的原因会很有用,这样我就可以改进/纠正答案,这将对社区有所帮助。以上是关于model.fit(X,y) 和 model.fit(train_X, train_y) 有啥区别的主要内容,如果未能解决你的问题,请参考以下文章
keras 的 model.fit 中没有 tf.Print 的结果
如何在 Python 的 tensorflow.fit 中解决这个问题?
我正在尝试训练我的 X_train 和 y_train 但存在数组维度问题
如何将 sample_weights 与 3D 医疗数据一起使用,而没有 model.fit(x=tf.data.Dataset) 导致无法挤压最后一个暗淡等错误