多输出机器学习模型-Python

多输出机器学习模型-Python,python,machine-learning,scikit-learn,nlp,Python,Machine Learning,Scikit Learn,Nlp,大家好,我试着搜索这个话题,但没有找到一个好的答案,所以我希望有人能帮我。 假设我正在尝试使用scikit学习和python创建一个ML模型。我有这样一个数据集: | Features | Topic | Sub-Topic | |----------|---------|------------------| | ... | Science | Space | | ... | Science | Engineering |

大家好,我试着搜索这个话题,但没有找到一个好的答案,所以我希望有人能帮我。 假设我正在尝试使用scikit学习和python创建一个ML模型。我有这样一个数据集:

| Features | Topic   | Sub-Topic        |
|----------|---------|------------------|
| ...      | Science | Space            |
| ...      | Science | Engineering      |
| ...      | History | American History |
| ...      | History | European History |
我的功能列表仅由文本组成,例如某篇文章中的一小段。现在我希望能够使用ML来预测该文本的主题和子主题

我知道我需要使用某种NLP来分析文本,比如spaCy。我感到困惑的是有两个输出变量:topic和subtopic。我读过scikit learn有一个叫做MultiOutputClassifier的东西,但是还有一个叫做MultiClass Classification的东西,所以我只是有点困惑应该采取什么样的方法


有人能给我指出正确的方向,使用什么回归器,或者如何实现这一点吗?

所以MultiClass只是说在一个目标变量中有多个类。多输出意味着我们有多个目标变量。这里有一个
多类多输出问题

scikit learn本机支持以下分类器的
多类多输出

sklearn.tree.DecisionTreeClassifier
sklearn.tree.ExtraTreeClassifier
sklearn.ensemble.ExtraTreesClassifier
sklearn.neighbors.KNeighborsClassifier
sklearn.neighbors.RadiusNeighborsClassifier
sklearn.ensemble.RandomForestClassifier
我建议选择RandomForest,因为大多数情况下,它会提供开箱即用的好结果

因此,以一个虚拟示例演示针对多个目标的
RandomForestClassifier
api

### Dummy Example only to test functionality
np.random.seed(0)
X = np.random.randn(10,2)
y1 = (X[:,[0]]>.5).astype(int) # make dummy y1
y2 = (X[:,[1]]<.5).astype(int) # make dummy y2
y = np.hstack([y1,y2]) # y has 2 columns
print("X = ",X,sep="\n",end="\n\n")
print("y = ",y,sep="\n",end="\n\n")
rfc = RandomForestClassifier().fit(X, y) # use the same api for multi column y!
out = rfc.predict(X)
print("Output = ",out,sep="\n")

另一方面,当你在做一个NLP相关的模型时,我建议你用它来训练一个神经网络以获得更好的输出

那么对于训练来说,Y可以是数组吗?举个例子,我可以做:X=df.features和y=[df.topic,df.subtopic]这还能用吗?是的,我更新了答案,加入了一个简单的例子来说明这一点,干杯!
X = 
[[ 1.76405235  0.40015721]
 [ 0.97873798  2.2408932 ]
 [ 1.86755799 -0.97727788]
 [ 0.95008842 -0.15135721]
 [-0.10321885  0.4105985 ]
 [ 0.14404357  1.45427351]
 [ 0.76103773  0.12167502]
 [ 0.44386323  0.33367433]
 [ 1.49407907 -0.20515826]
 [ 0.3130677  -0.85409574]]

y = 
[[1 1]
 [1 0]
 [1 1]
 [1 1]
 [0 1]
 [0 0]
 [1 1]
 [0 1]
 [1 1]
 [0 1]]

Output = 
[[1 1]
 [1 0]
 [1 1]
 [1 1]
 [0 1]
 [0 0]
 [1 1]
 [0 1]
 [1 1]
 [0 1]]