如何针对训练好的模型使用测试数据?

时间:2018-07-21 01:20:39

标签: 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\\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需要与我的测试数据有关,但是我不确定如何实现。

1 个答案:

答案 0 :(得分:2)

train_test_split()用于获取数据集并将其分为训练和测试集两部分。就您而言,您已经将数据分为两个块,分别位于单独的csv文件中。然后,您将获取火车数据并将其再次分为trainval,这是验证的缩写(本质上是测试或验证数据)。

您可能想对完整的训练数据集进行model.fit,然后再次调用model.predict测试集。

不需要打{{1​​}}。


编辑:

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

测试集将仅用于生成“新”预测,因为您没有要验证的基本事实值。


编辑(回复评论):

我没有这些数据集,也没有实际运行此代码,但是我建议使用类似以下的内容。本质上,您希望像对训练数据一样准备测试数据,然后以与输入验证集相同的方式将其输入模型。

train_test_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) 中删除了Survived列。我相信,通过在您的columns_of_interest数据中包含该列,您可以为模型赋予它的尝试进行预测,这可能也是为什么您也要获得1.0验证的原因。您正在为测试提供答案。)