Python 以因变量作为分类和回归的多目标?

Python 以因变量作为分类和回归的多目标?,python,scikit-learn,regression,multilabel-classification,multitargeting,Python,Scikit Learn,Regression,Multilabel Classification,Multitargeting,我有两个输入作为自变量,我想在此基础上预测3个因变量 我的3个因变量属于2个多分类类,1个为连续值。下面是我的目标变量 typeid\u encoded,reporttype\u encoded,log\u count typeid\u encoded和reporttype\u encoded属于分类类型,其中每个变量至少有5个不同的类别 日志计数是连续变量 我在谷歌上搜索了很多,我只发现使用了两种不同的型号。但我找不到这样的例子。请张贴一些例子,以便它能帮助我 或者在一个模型中使用神经网络还有

我有两个输入作为自变量,我想在此基础上预测3个因变量

我的3个因变量属于2个多分类类,1个为连续值。下面是我的目标变量

typeid\u encoded
reporttype\u encoded
log\u count

typeid\u encoded
reporttype\u encoded
属于分类类型,其中每个变量至少有5个不同的类别

日志计数
是连续变量

我在谷歌上搜索了很多,我只发现使用了两种不同的型号。但我找不到这样的例子。请张贴一些例子,以便它能帮助我

或者在一个模型中使用神经网络还有其他方法吗


我需要一个使用sci工具包学习的例子。提前谢谢

sklearn中没有专门为此而设计的,但是有一些小技巧可以用来制作这样的分类器

注意事项,这些不一定适合您的问题,很难猜测什么对您的数据有效

我首先想到的两个是Knn和Random Forests,但是基本上你可以调整任何多输出回归算法来做这些事情

import numpy as np
from sklearn.ensemble import RandomForestRegressor
from sklearn.neighbors import NearestNeighbors

# Create some data to look like yours
n_samples = 100
n_features = 5

X = np.random.random((n_samples, n_features))
y_classifcation = np.random.random((n_samples, 2)).round()
y_regression = np.random.random((n_samples))

y = np.hstack((y_classifcation, y_regression[:, np.newaxis]))
现在我有一个数据集,有两个二进制变量和一个连续变量

从Knn开始,您也可以使用
KneighborsRegressionor
来实现这一点,但我觉得这更好地说明了解决方案

# use an odd number to prevent tie-breaks
nn = NearestNeighbors(n_neighbors=5)
nn.fit(X, y)

idxs = nn.kneighbors(X, return_distance=False)
# take the average of the nearest neighbours to get the predictions
y_pred = y[idxs].mean(axis=1)
# all predictions will be continous so just round the continous ones
y_pred[:, 2] = y_pred[:, 2].round()
现在我们的
y_pred
是分类和回归的预测向量。现在让我们看一个随机森林

# use an odd number of trees to prevent predictions of 0.5
rf = RandomForestRegressor(n_estimators=11)
rf.fit(X, y)
y_pred = rf.predict(X)

# all predictions will be continous so just round the continous ones
y_pred[:, 2] = y_pred[:, 2].round()
我认为这些“黑客”是相当合理的,因为它们与这些算法的分类设置的工作方式相差不远

如果你有一个多类问题,你有一个热编码,那么你需要选择概率最高的类,而不是像我上面所做的那样,将概率四舍五入到二进制类。你可以很简单地用这样的东西来做

n_classes_class1 = 3
n_classes_class2 = 4
y_pred_class1 = np.argmax(y_pred[:, :n_classes_class1], axis=1)
y_pred_class2 = np.argmax(y_pred[:, n_classes_class1:-1], axis=1)

实际上,我的两个分类变量,我已经转换成了标签编码。根据上面的例子,我知道所有的预测值都是连续的。它怎么能给出两个范畴和一个连续。有什么解决办法吗?我尝试过神经网络,它给了我所有3个连续的预测,我不想在很多分类算法中,输出最初是连续的,然后转换成分类的,类似于我上面所做的。对于神经网络,这是使用softmax函数转换的,但是这里我只是选择概率最高的类。现在,我将在我的答案末尾添加一点内容,以帮助解决多类问题。当然。非常感谢。如果可能的话,你能用一些输入和输出值解释一下上面的ur代码吗。我理解了一点,但不是完全理解:)我的代码中有示例数据(随机生成),如果您复制并粘贴代码并运行它,您将能够自己检查它。我建议您使用自己的数据来更好地理解它。