我正在使用一些 NLTK 型別的教程在 sklearn 學習分類中進行試驗。有人可以幫我理解為什么sklearn MLP 神經網路可以處理不同的輸入形狀而其他分類器不能嗎?
我的輸入training資料是一個numpy.ndarray形狀(62, 2)
這是我唯一知道如何進行訓練測驗拆分的事情(如果有更好的建議,任何提示都值得贊賞)
train_x = list(training[:,0])
train_y = list(training[:,1])
如果我,資料看起來像這樣print(train_y):
[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0],
[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
MLP 分類器似乎作業得很好。
model = MLPClassifier(learning_rate_init=0.0001,max_iter=9000,shuffle=True).fit(train_x, train_y)
但是,如果我嘗試使用其他 sklearn 分類器,例如:
model = GaussianNB().fit(train_x, train_y)
我得到錯誤:
ValueError: y should be a 1d array, got an array of shape (62, 15) instead.
我想我需要.reshape(-1,1)在我的代碼中加入某個地方,但不確定在哪里。任何提示在這里都不是很多智慧。
uj5u.com熱心網友回復:
據我所見,標簽y在one-hot表格中。基本上標簽是一個大小等于類數的向量。該向量的每個元素都為零,除了代表確切類的索引。那個元素是一個。這就是為什么 y 的形狀是(62, 15)
您需要將標簽y轉換為您的標簽將表示為整數的形式。
示例:在此示例中,我們有 6 個類: ranging from 0 to 5
[0, 0, 0, 1, 0, 0] -> 3
[1, 0, 0, 0, 0, 0] -> 0
[0, 1, 0, 0, 0, 0] -> 1
您可以通過使用numpy.argmax(y, axis=1)which來執行此操作,它將回傳沿指定軸具有最大值的元素的索引。看看檔案
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/408689.html
標籤:
