针对不同类型目标变量的多目标分类

数据挖掘 Python 多标签分类 多任务学习
2021-10-06 02:27:18

我是机器学习的新手,我在大学里得到了这个任务。我有一个包含 100 多列和两个目标变量的数据集:一个rGe1是分类的,即0或者1一个rGe2是连续的,即范围内的值0  100.

如何预测此类问题?

我尝试使用 sklearn 的多输出分类,使用随机森林作为集成器,它可以很好地预测连续目标变量,但不能很好地预测分类目标变量。

4个回答

你有一个分类任务和一个回归任务,但是 sklearn 的多输出元估计器只支持两个相同类型的任务。

这里最好的解决方案是训练两个模型:

  1. 用于预测的二元分类器 一个rGe1
  2. 用于预测的回归器 一个rGe2

例如:

from sklearn.cross_validation import train_test_split
from sklearn.ensemble import RandomForestClassifier, RandomForestRegressor

# X, y = load training data

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

clf = RandomForestClassifier()
clf.fit(X_train, y_train[:,0])
print("classifier accuracy:", clf.score(X_test, y_test[:,0]))

regr = RandomForestRegressor()
regr.fit(X_train, y_train[:,1)
print("regressor R^2:", regr.score(X_test, y_test[:,1]))

您应该将其分解为两个模型。我将通过以下方式解决此问题:

  1. 第一个模型将通过查看 100 列来预测它是目标 1 还是目标 2
  2. 然后,第二个模型将查看 100 列以及模型 1 的输出,然后在目标 1 的情况下预测 0 或 1,在目标 2 的情况下预测 0-100。

我认为您无法仅使用一个模型来实现结果。如果您需要更多信息,我可以详细说明。但这应该给你一个起点。

以下是对上述2点的解释:

  1. 训练一个分类器,使用标签作为目标 1/目标 2 的所有数据点。为此,您可以使用任何分类器系列。但是您在评估时需要非常小心。如果这个模型表现不佳,你就会遇到问题,因为你的分类会影响你的下一个模型。在使用模型对它们进行分类之前,您还需要检查目标 1 和目标 2 之间的分布是否合适。

  2. 分类器完成后,您可以对所有输入特征 + 条目的类别(目标 1 或 2)使用回归。

这取决于您的 2 个响应变量的含义。

如果您的 continue 变量实际上是 100(整数)类,而不是有意义的增加幅度(因此更多的是回归),因此,您可以尝试通过连接将您的 2 个分类响应合并为一个。这个新变量将是您对 200 类的新响应。

否则,Nischal 的答案将是可行的方法。

如果两个目标具有某种关系,则通过单独的模型将这两个问题一起解决而不是作为单独的问题解决可能会有好处,即提高性能。查看多任务学习和结构化预测。神经网络中的输出层可以是任何维度,包括 2 是您的情况。