我是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)
有人可以让我知道我在想什么吗?该模型适用于训练和测试数据集,但不适用于新数据甚至测试数据集的一小部分。
答案 0 :(得分:0)
通常称为overfitting。也许是underfitting。与其他任何ML算法一样,LGBM容易受到这两种影响。
表示模型在训练和测试数据上效果很好, 但是在新数据上效果较差 。 The model is not generalizing well,它只是存储训练数据。 对于如何处理LGBM的过拟合问题,有一些建议here,但是您应该花一些时间阅读有关该问题的一般信息。 Google是通常的起点。
有时收集更多数据是解决问题的方法。十万,百万。机器学习是一项需要大量数据的业务。
您将不得不调整一些模型参数并进行大量训练,直到您的预测开始改善为止。它称为parameter tuning。
那是ML的强项。
不要气disc。