您好,我尝试过搜索此主题的每个人都没有找到一个好的答案,所以我希望有人可以帮助我。 假设我正在尝试使用scikit-learn和python创建ML模型。我有这样的数据集:
| Features | Topic | Sub-Topic |
|----------|---------|------------------|
| ... | Science | Space |
| ... | Science | Engineering |
| ... | History | American History |
| ... | History | European History |
我的功能列表仅由文字组成,例如一些文章中的一小段。现在,我希望能够使用ML来预测该文本的主题和子主题。
我知道我需要使用某种NLP来分析诸如spaCy之类的文本。我感到困惑的部分是具有两个输出变量:主题和子主题。我已经读过scikit-learn有一个叫做MultiOutputClassifier的东西,但是还有一个叫做MultiClass分类的东西,所以我对走什么路线有些困惑。
有人可以向我指出要使用哪种回归器或如何实现此目标的正确方向吗?
答案 0 :(得分:1)
所以MultiClass只是说一个目标变量中有多个类。 MultiOutput意味着我们有多个目标变量。这里我们有一个MultiClass-MultiOutput
问题。
scikit-learn本机支持以下分类器的MultiClass-MultiOutput
。
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")
输出
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]]
顺便说一句,当您在做与NLP相关的模型时,我建议使用Keras's multi-output NN api来训练神经网络以获得更好的输出!