【问题标题】:Multi-output regression多输出回归
【发布时间】:2018-08-29 16:55:57
【问题描述】:
在过去的几周里,我一直在研究多输出回归。我正在使用 scikit 学习包。我的机器学习问题有一个输入 3 个特征,需要预测两个输出变量。 sklearn 包中的一些 ML 模型原生支持多输出回归。如果模型不支持这一点,可以使用 sklearn 多输出回归算法对其进行转换。 multioutput 类适合每个目标一个回归器。
- 多输出回归器类或支持的多输出回归算法是否考虑了输入变量的基本关系?
- 我应该使用神经网络而不是多输出回归算法吗?
【问题讨论】:
标签:
python
machine-learning
scikit-learn
regression
【解决方案1】:
1) 对于您的第一个问题,我将其分为两部分。
-
第一部分的答案写在您链接的文档和user guide topic 中,其中明确指出:
由于 MultiOutputRegressor 适合每个目标使用一个回归器,因此无法采用
目标之间的相关性优势。
-
第一个问题的第二部分询问支持这一点的其他算法。为此,您可以查看用户指南中的 "inherently multiclass" 部分。固有的多类意味着他们不使用 One-vs-Rest 或 One-vs-One 策略来处理多类(OvO 和 OvR 使用多个模型来适应多个类,因此可能不使用之间的关系目标)。固有的多类意味着他们可以将多类设置构建为单个模型。这列出了以下内容:
sklearn.naive_bayes.BernoulliNB
sklearn.tree.DecisionTreeClassifier
sklearn.tree.ExtraTreeClassifier
sklearn.ensemble.ExtraTreesClassifier
sklearn.naive_bayes.GaussianNB
sklearn.neighbors.KNeighborsClassifier
sklearn.semi_supervised.LabelPropagation
sklearn.semi_supervised.LabelSpreading
sklearn.discriminant_analysis.LinearDiscriminantAnalysis
sklearn.svm.LinearSVC (setting multi_class=”crammer_singer”)
sklearn.linear_model.LogisticRegression (setting multi_class=”multinomial”)
...
...
...
尝试将末尾的“分类器”替换为“回归器”,并在此处查看fit() 方法的文档。比如我们以DecisionTreeRegressor.fit():
y : array-like, shape = [n_samples] or [n_samples, n_outputs]
The target values (real numbers).
Use dtype=np.float64 and order='C' for maximum efficiency.
您看到它支持目标的二维数组 (y)。因此它可能能够使用目标的相关性和底层关系。
2) 现在关于是否使用神经网络的第二个问题,这取决于个人偏好、问题的类型、您拥有的数据量和类型、您想要进行的训练迭代。也许您可以尝试多种算法并选择最适合您的数据和问题的输出。