在经过训练的LGBM模型上测试新数据

时间:2019-08-08 08:39:55

标签: python machine-learning lightgbm countvectorizer

我是ML的新手,并尝试复制https://www.kaggle.com/tunguz/more-effective-ridge-lgbm-script-lb-0-44823?source=post_page-------上可用的价格优化解决方案

我遵循与给定的相同的代码,然后尝试在新数据上对其进行测试。但是,它根本无法正确预测价格。我确定要保存经过训练的模型/向量,将其重新加载,并按照模型要求转换新数据,类似于对训练集进行的操作。

问题是,如果我的新数据与测试模型时使用的测试数据集(600k +行)完全相同,那么它将返回我与测试预测期间完全相同的正确结果。但是,如果仅使用示例的前10行,那么即使我通过保存的矢量转换要素,也根本不匹配现有结果。

#below is while training the model
cvname = CountVectorizer(min_df=NAME_MIN_DF)
X_name = cvname.fit_transform(merge['name'])
pickle.dump(cvname, open("namevector.pkl", "wb"))
.
.
.
.
#after completing the training, and loading the new data
handle_missing_inplace(mytest)
cutting(mytest)
to_categorical(mytest)

cv1 = pickle.load(open("namevector.pkl", "rb"))
X_name1 = cv1.transform(mytest['name'])
cv2 = pickle.load(open("categoryvector.pkl", "rb"))
X_category1 = cv2.transform(mytest['category_name'])
tv1 = pickle.load(open("descriptionvector.pkl", "rb"))
X_description1 = tv1.transform(mytest['item_description'])
lb1 = pickle.load(open("brandvector.pkl", "rb"))
X_brand1 = lb1.transform(mytest['brand_name'])
t1 = pd.get_dummies(mytest[['item_condition_id', 'shipping']],sparse=True)
X_dummies1 = csr_matrix(t1.values.astype('int64'))

sparse_merge1 = hstack((X_dummies1, X_description1, X_brand1, X_category1, X_name1)).tocsr()
X_test1 = sparse_merge1
my_pred = pkl_bst1.predict(X_test1)
mysubmission['price'] = np.expm1(my_pred)

有人可以让我知道我在想什么吗?该模型适用于训练和测试数据集,但不适用于新数据甚至测试数据集的一小部分。

1 个答案:

答案 0 :(得分:0)

通常称为overfitting。也许是underfitting。与其他任何ML算法一样,LGBM容易受到这两种影响。

表示模型在训练和测试数据上效果很好, 但是在新数据上效果较差 The model is not generalizing well,它只是存储训练数据。 对于如何处理LGBM的过拟合问题,有一些建议here,但是您应该花一些时间阅读有关该问题的一般信息。 Google是通常的起点。

有时收集更多数据是解决问题的方法。十万,百万。机器学习是一项需要大量数据的业务。

您将不得不调整一些模型参数并进行大量训练,直到您的预测开始改善为止。它称为parameter tuning

那是ML的强项。

不要气disc。