[英]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.