如何将测试数据用于训练好的模型?

How to use the test data against the trained model?

我是机器学习的初学者,我正在参加泰坦尼克号竞赛。起初,我的模型给了我 1.0 的准确度,这好得令人难以置信。然后我意识到我正在将我的训练模型与我用来训练它的训练数据进行比较,而我的测试数据无处可寻。这就是为什么我认为它给了我一个如此荒谬的数字。

以下是我的代码:

import ...

train_path = "C:\Users\Omar\Downloads\Titanic Data\train.csv"
test_path = "C:\Users\Omar\Downloads\Titanic Data\test.csv"

train_data = pd.read_csv(train_path)
test_data = pd.read_csv(test_path)

train_data['Sex'] = pd.factorize(train_data.Sex)[0]

columns_of_interest = ['Survived','Pclass', 'Sex', 'Age']
filtered_titanic_data = train_data.dropna(axis=0)

x = filtered_titanic_data[columns_of_interest]
y = filtered_titanic_data.Survived

train_x, val_x, train_y, val_y = train_test_split(x, y, random_state=0)

titanic_model = DecisionTreeRegressor()
titanic_model.fit(train_x, train_y)

val_predictions = titanic_model.predict(val_x)

print(val_predictions)
print(accuracy_score(val_y, val_predictions))

我知道 val_predictions 需要与我的测试数据有关,但我不确定如何实现它。

train_test_split() 旨在获取您的数据集并将其分成两块,即训练集和测试集。在您的情况下,您已经将数据分成两个块,分别放在单独的 csv 文件中。然后,您将获取火车数据并将其再次拆分为 trainval,这是验证的缩写(本质上是测试或验证数据)。

您可能想对完整的训练数据集执行 model.fit,然后再次调用 model.predict 测试集。不需要调用 train_test_split().


编辑:

我这里可能是错的。在查看比赛页面时,我意识到测试集不包含基本真实值。您不能使用该数据来验证模型的准确性。在那种情况下,我认为将原始训练数据集拆分为训练和验证是有意义的。由于您仅在火车部分拟合模型,因此模型的验证集仍然不可见。然后您使用验证集中的已知值来验证模型的预测。

测试集将仅用于生成 'new' 预测,因为您没有要验证的真实值。


编辑(回复评论):

我没有这些数据集,实际上 运行 也没有这个代码,但我建议如下所示。从本质上讲,您希望对测试数据进行与对训练数据所做的相同的准备,然后将其以与输入验证集相同的方式输入到模型中。

import ...

def get_dataset(path):
    data = pd.read_csv(path)

    data['Sex'] = pd.factorize(data.Sex)[0]

    filtered_titanic_data = data.dropna(axis=0)

    return filtered_titanic_data

train_path = "C:\Users\Omar\Downloads\Titanic Data\train.csv"
test_path = "C:\Users\Omar\Downloads\Titanic Data\test.csv"

train_data = get_dataset(train_path)
test_data = get_dataset(test_path)

columns_of_interest = ['Pclass', 'Sex', 'Age']

x = train_data[columns_of_interest]
y = train_data.Survived

train_x, val_x, train_y, val_y = train_test_split(x, y, random_state=0)

titanic_model = DecisionTreeRegressor()
titanic_model.fit(train_x, train_y)

val_predictions = titanic_model.predict(val_x)

print(val_predictions)
print(accuracy_score(val_y, val_predictions))

text_x = test_data[columns_of_interest]
test_predictions = titanic_model.predict(test_x)

(另外,请注意,我从 columns_of_interest 中删除了 Survived 列。我相信通过在您的 x 数据中包含该列,您为模型提供了值它试图预测,这可能就是为什么您的验证也得到 1.0 的原因。您正在为测试提供答案。)