具有因变量作为分类和回归的多目标?

时间:2018-03-27 04:52:35

标签: python scikit-learn regression multilabel-classification multitargeting

我有两个输入作为我的自变量,我想根据它预测3个因变量。

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

typeid_encodedreporttype_encodedlog_count

typeid_encoded reporttype_encoded 属于分类类型,其中每个变量最少有5个不同类别。

log_count 是连续变量。

我google了很多,我发现只使用两种不同的模型。但我无法找到任何这样做的例子。请发贴一些例子,以便对我有帮助吗?

或者是否有其他方法可以在一个模型中使用神经网络?

我需要一个使用sci-kit学习的例子。提前谢谢!

1 个答案:

答案 0 :(得分:1)

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开始,您也可以使用KNeighborsRegressor执行此操作,但我觉得这更好地说明了解决方案

# 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)