训练集被标准化后应该测试集应该做什么

时间:2017-08-24 05:31:59

标签: python scikit-learn dataset data-science

训练组头看起来像这样

    Session ID  Timestamp               Item ID     Price   Quantity
0   420374  2014-04-06T18:44:58.314Z    214537888   12462   1
1   420374  2014-04-06T18:44:58.325Z    214537850   10471   1
2   281626  2014-04-06T09:40:13.032Z    214535653   1883    1
3   420368  2014-04-04T06:13:28.848Z    214530572   6073    1
4   420368  2014-04-04T06:13:28.858Z    214835025   2617    1

所以我对数据进行预处理,逐列对它们进行标准化,并使它们适合SGDClassifier。

from sklearn import linear_model
from sklearn import preprocessing as pp

scaler = pp.MinMaxScaler()
columns_list = list(train_data.columns)
del columns_list[-1]
train_data[columns_list] = scaler.fit_transform(train_data[columns_list])

clf = linear_model.SGDClassifier()
clf.fit(train_data.iloc[:, :-2],train_data.iloc[:,-1])

然后我想用模型预测,如clf.predict(),但原始测试集应该是以下格式。

    Session ID  Timestamp               Item ID     Price   Quantity
0   420374  2014-04-06T18:44:58.314Z    214537888   12462   1

然后我是否需要使用训练集进行标准化?

模型期望的测试数据是什么?

测试数据需要什么样的预处理?

2 个答案:

答案 0 :(得分:2)

我们应用所有预处理来测试在列车数据上执行时学习的数据。我们不会从测试数据中学到任何新东西。

因此,在您的情况下,我们仅对从列车数据中学习的测试数据应用相同的规范化: -

test_data[columns_list] = scaler.transform(test_data[columns_list])

# Predict Quantity from model
y_pred = clf.predict(test_data.iloc[:, :-2])

# Actual values of Quantity
y_true = test_data.iloc[:,-1]

# Now use y_true and y_pred to calculate the metrics.

答案 1 :(得分:0)

As sklearn doc provide

  

预处理模块还提供实用程序类   StandardScaler实现Transformer API来计算平均值   和训练集上的标准偏差,以便以后能够   在测试集上重新应用相同的转换。

Talk about the Normalizer

  

预处理模块还提供实用程序类Normalizer   使用Transformer API实现相同的操作

所以只需在测试集上重新应用相同的转换即可。