在 scikit-learn 中使用什么估计器?

这是我第一次接触机器学习,所以我正在尝试弄清楚这一切是如何运作的。我有一个数据集,其中我收集了所有与我高中棒球队一起比赛的每个球员的统计数据。我还有一份从我高中进入MLB的所有球员的列表。我想做的是将数据分成训练集和测试集,然后将其输入到scikit-learn包中的某个算法中,预测进入MLB的概率。

所以我查看了许多资料,并找到了一张速查表,建议我从线性SVC开始。SciKitLearn Cheat Sheet

因此,据我所知,我需要将数据分成训练样本,每行是一个球员,每列是关于球员的一条数据(击球率、上垒率,等等),X_train;以及对应的每个球员一行的真值矩阵,简单地标记为1(在MLB打过球)或0(没有在MLB打过球),Y_train。从那里开始,我只需执行Fit(X,Y),然后我可以使用predict(X_test)来查看它是否能得到Y_test的正确值。

这种算法、方法和应用的选择是否合理?

编辑以提供更多信息:数据由20个特征组成,例如比赛场数、安打数、本垒打数、三振出局数等。大多数是关于球员职业生涯的基本计数统计;还有一些是比率,如击球率。

我总共有大约1万行数据可以使用,所以我可以根据此数据进行分割;但我不知道如何最佳地分割数据,因为只有不到1%的人进入了MLB。


回答:

好吧,以下是您可能想采取的几个步骤:

  1. 准备您的数据集。在实践中,您可能需要对特征进行缩放,但为了使第一个工作模型尽可能简单,我们将省略这一步。因此,只需将数据集分成测试/训练集即可。您可以手动打乱记录并取前X%的样本作为训练集,但scikit-learn库中已经有一个函数可以做到这一点:http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html。您可能需要确保训练集和测试集中都有正例和负例。为了做到这一点,您可以在测试/训练分割之前将它们分开,以确保例如70%的负例和70%的正例进入训练集。

  2. 让我们选择一个简单的分类器。我在这里将使用逻辑回归:http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html,但其他分类器的API类似。

  3. 创建分类器并对其进行训练非常简单:

    clf = LogisticRegression()clf.fit(X_train, y_train)
  4. 现在是时候进行第一次预测了:

    y_pred = clf.predict(X_test)
  5. 模型评估是一个非常重要的部分。在这里使用准确率不是一个好主意:正例的数量非常少,因此无条件返回0的模型可以获得很高的分数。我们可以改用f1分数:http://scikit-learn.org/stable/modules/generated/sklearn.metrics.f1_score.html

  6. 如果您想预测概率而不是标签,您可以直接使用分类器的predict_proba方法。

就这样。我们有了一个工作模型!当然,还有很多事情可以尝试改进,比如缩放特征,尝试不同的分类器,调整它们的超参数,但这应该足以开始了。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注