【问题标题】:Machine Learning - How to predict set of fixed fields based on past features机器学习 - 如何根据过去的特征预测一组固定字段
【发布时间】:2020-02-11 11:10:06
【问题描述】:

我有一个相当大的数据集(> 100k 行),其中包含物流运输的信息。 (出口货物)

数据集如下所示:

|shipper|consignee                    |origin|destination                                  |
|-------|-----------------------------|------|---------------------------------------------|
|6409292|288882                       |USSFO |CNPVG                                        |
|6409292|288882                       |USSFO |CNPVG                                        |
|6409292|182724                       |USSFO |HKHKG                                        |
|6409292|182724                       |USSFO |HKHKG                                        |
|8201922|948292                       |USSFO |FRCDG                                        |
|8201922|948292                       |USSFO |FRCDG                                        |
|8201922|948292                       |USSFO |FRNIC                                        |
|8201922|291222                       |USEWR |AEDXB                                        |

所以我们这里有一份过去发货的清单。它显示了托运人和收货人之间的关系,以及货物的发运地和发运地。

根据过去的数据,我希望能够通过查看consignee codeorigin 来预测何时添加新货件。

示例

以以下新预订为例:

|shipper|consignee                    |origin|destination                                  |
|-------|-----------------------------|------|---------------------------------------------|
|1234567|948292                       |USMOB |?                                            |

如何训练模型来预测 destination? ML 中的这个领域是指什么?

【问题讨论】:

  • 这是一个单类分类问题。您可以使用 sklearn 或 XGBoost 库对其进行训练,将目标设置为可预测的特征(通常在 sklearn 中为“y”)。此外,您必须确保该算法将收货人作为分类变量而不是数字。但是,如果您只有这 3 个变量和如此少量的数据,我不会期望得到很好的结果
  • @JavierLópezTomás 谢谢!我最终有更多的列,我将考虑这些列和更多的行(> 100k 正在增长)。对于如何开始使用 XGBoost 或 sklearn 训练模型,您有什么建议吗?
  • @oliverbj 这是一个简单的用例。我感觉 Extra Tree 分类器算法适用于您的情况。您可以在此处找到有关 Extra Tree 分类器算法的所有详细信息:scikit-learn.org/stable/modules/generated/…towardsdatascience.com/…。但请记住,您必须进行一些数据预处理。

标签: python machine-learning prediction


【解决方案1】:

在深入了解机器学习之前,理解这些概念很重要:

  • 数据集:这是您的数据集合,其中包含我们想要预测的列和 target 列。

  • 问题类型:这是我们面临的问题。请查看以下链接,了解更多相关信息:problem types

  • Metric:这是评估我们模型的性能,您必须选择一个才能正确评估它。例如,如果您有TrueFalse,您可能希望每次您的模型出错时都受到惩罚,就好像他选择True 作为答案,他可能得到50% 的正确率,这就是一个具有0.5 准确度的模型这是不正确的,因为它只回答True。希望这个post能帮助你更好的理解。

  • 交叉验证:crossvalidation sklearn

  • 训练和测试拆分:我们将数据集拆分为多个部分,我们会将部分数据用于train,其他部分用于test,或评估我们的模型。

这大部分都可以通过流行的库sklearn 来完成,在以下示例中:

from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import make_scorer, accuracy_score
from sklearn.model_selection import cross_val_score, train_test_split

dataset = load_iris()

X_train, X_test, y_train, y_test = train_test_split(
    dataset.data, dataset.target, test_size=0.3, random_state=0)
# No corss validation
model = RandomForestClassifier()
model.fit(X_train, y_train)
predictions = model.predict(X_test)
accuracy_score(y_test, predictions)

# With cross validation
model = RandomForestClassifier()
accuracy_scorer = make_scorer(accuracy_score)

scores = cross_val_score(model, X_train, y_train, scoring=accuracy_scorer)
scores.mean()

这个例子只是一个非常简单的例子,其中数据被处理并且简单,在大多数情况下,问题都以0.9 的准确性得到解决。您可能需要深入研究才能解决更多列的问题,而不仅仅是那些。我的建议是深入kaggle 并寻找带有示例的笔记本或内核,其中人们处理某种数据集并获得给定问题的基线,您可能会学习新主题,例如OneHotEncoding FeatureExtractions 等等。

还有 ara 库可以为您执行此操作,或将其自动化并可以解决分类问题,请查看 MLBlocksATM

【讨论】:

  • 感谢您的详细解答!例如,如何将 csv 文件加载到您提供的代码中?如果我有一个名为shipments.csv的文件?
  • 你必须使用pandasdf = pandas.read_csv('shipments.csv') 然后你必须创建 target=df.pop('destination') 和最后 train_test_split(df, target)
  • 如何使用新数据测试我的模型?我成功地获得了 0.70 的准确度。如何使用从未见过的数据对其进行测试?
  • 通过生成预测,model.predict(X) 其中X 是新数据。确保,如果新数据具有 target 列来执行 target = df.pop('target') 并使用该目标进行验证,则基本上您的 X_test 是没有目标的新数据,target 是您的 y_test
猜你喜欢
  • 2021-02-06
  • 2018-10-08
  • 2021-01-06
  • 2018-10-17
  • 1970-01-01
  • 2020-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多