[英]Multiple Output Machine Learning Model - Python
大家好,我已经尝试搜索这个主题并且无法找到一个好的答案,所以我希望有人可以帮助我。 假设我正在尝试使用 scikit-learn 和 python 创建一个 ML model。 我有一个这样的数据集:
| Features | Topic | Sub-Topic |
|----------|---------|------------------|
| ... | Science | Space |
| ... | Science | Engineering |
| ... | History | American History |
| ... | History | European History |
我的功能列表仅由文本组成,例如一些文章中的一小段。 现在我希望能够使用 ML 来预测该文本的主题和子主题。
我知道我需要使用某种 NLP 来分析诸如 spaCy 之类的文本。 我感到困惑的部分是有两个 output 变量:主题和子主题。 我读过 scikit-learn 有一个叫做 MultiOutputClassifier 的东西,但是还有一个叫做 MultiClass Classification 的东西,所以我对采取什么路线有点困惑。
有人可以为我指出使用什么回归器或如何实现这一点的正确方向吗?
所以 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 的RandomForestClassifier
用于多个目标。
### 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")
Output
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 相关的 model 时,我建议使用Keras 的多输出 NN api来训练神经网络以获得更好的输出!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.