Python 如何根据训练过的模型使用测试数据?

Python 如何根据训练过的模型使用测试数据?,python,pandas,machine-learning,scikit-learn,kaggle,Python,Pandas,Machine Learning,Scikit Learn,Kaggle,我是机器学习的初学者,我正在经历泰坦尼克号的比赛。起初,我的模型给了我1.0的精度,这太好了,不可能是真的。然后我意识到我正在将我训练过的模型与我用来训练它的训练数据进行比较,而我的测试数据却无处可寻。这就是为什么我认为它给了我如此荒谬的数字 以下是我的代码: import ... train_path = "C:\\Users\\Omar\\Downloads\\Titanic Data\\train.csv" test_path = "C:\\Users\\Omar\\Downloads\

我是机器学习的初学者,我正在经历泰坦尼克号的比赛。起初,我的模型给了我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\u预测
需要与我的测试数据有关,但我不确定如何实现。

train\u test\u split()
旨在将数据集拆分为两个块,即训练集和测试集。在您的例子中,您已经将数据分割为两个块,在单独的csv文件中。然后,获取列车数据并将其再次拆分为
train
val
,这是验证(基本上是测试或验证数据)的缩写

您可能需要对完整的训练数据集进行
模型拟合,然后调用
模型,再次预测测试集。不需要调用
train\u test\u split()


编辑:

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

测试集只用于生成“新”预测,因为您没有要验证的基本真值


编辑(回应评论):

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

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)

(另外,请注意,我从感兴趣的
列中删除了
幸存的
列。我相信,通过将该列包含在
x
数据中,您为模型提供了它试图预测的值,这很可能是您为验证获得1.0的原因。您为它提供了测试的答案。)

竞赛排行榜上有25人在50%的测试数据中获得1.0分。你确定1.0分不合理吗?也许数据和模型很合适,你可以得到准确的预测。有关培训、验证和测试数据集的信息:我如何使用测试集生成新的预测?B因为目标是预测测试集的值。为什么在测试预测之前打印?打印仍然只是打印验证结果(
val\u predictions
)。您可以为
测试添加相同的内容。\u预测
验证与测试是分开的。验证是您获得答案并可以检查模型运行情况的地方。测试集不包括答案,因此您只能获得预测,但无法知道其准确性。这与模型的“现实生活”使用类似