使用DBSCAN對象和高爾距離矩陣爲新的數據預測簇標記。 我創建模型時所使用的高爾距離矩陣:如何我在與預測簇標記爲測試數據的基礎上,對訓練數據的DBSCAN聚類分析模型的問題[R
> gowerdist_train <- daisy(analdata_train,
metric = "gower",
stand = FALSE,
type = list(asymm = c(5,6)))
使用這種gowerdist矩陣,創造了DBSCAN集羣化模型爲:
> sb <- dbscan(gowerdist_train, eps = .23, minPts = 50)
然後我嘗試使用預測使用的標記測試數據集上述DBSCAN對象:
> predict(sb, newdata = analdata_test, data = analdata_train)
但我收到以下錯誤:
Error in frNN(rbind(data, newdata), eps = object$eps, sort = TRUE, ...) : x has to be a numeric matrix
我可以在哪裏這個錯誤可能是未來的,這可能是由於不存在尚未測試數據創建的高爾距離矩陣的猜測。 我的問題是,我應該創建一個高爾距離矩陣的所有數據(datanal_train + datanal_test)分開,並將其饋送到預測?算法如何知道列車數據中測試數據的距離,以便標記?
在這種情況下,將在newdata參數是包含ALL(火車+試驗)數據的新高爾距離矩陣?並且預測中的數據參數將是訓練距離矩陣,gowerdist_train?
我不太確定的是預測算法如何區分新創建的gowerdist_all矩陣中的測試數據集和列車數據集?
兩個矩陣(對於所有數據和gowerdist_train新gowerdist)顯然不具有相同的尺寸。此外,它沒有任何意義,我只爲測試數據創建一個高爾距離矩陣,因爲距離必須相對於測試數據,而不是測試數據本身。
編輯:
饋送時,我試圖使用高爾距離矩陣的所有數據(火車+試驗)作爲新的數據和接收到的錯誤來預測:
> gowerdist_all <- daisy(rbind(analdata_train, analdata_test),
metric = "gower",
stand = FALSE,
type = list(asymm = c(5,6)))
> test_sb_label <- predict(sb, newdata = gowerdist_all, data = gowerdist_train)
ERROR: Error in 1:nrow(data) : argument of length 0 In addition: Warning message: In rbind(data, newdata) : number of columns of result is not a multiple of vector length (arg 1)
所以,我建議的解決方案不起作用。
對DBSCAN的「預測」並沒有很好的定義。通常,這表示您應該在分類時使用集羣。 –
好的,我聯繫了負責維護dbscan R軟件包的人員,並被告知在dbscan軟件包中執行預測時存在問題(它不適用於距離矩陣),我應該在相應的論壇,所以它在包中被固定。 在此期間,我決定嘗試構建一個算法來完成這項工作。 – Ankhnesmerira
我正在談論這樣做的理論*支持,而不是實現(因爲我不使用R,我不太在乎這個包)。單點可能會導致集羣合併,因此「預測」函數需要能夠返回「它會導致集羣1 + 2合併」,或「它會在這裏產生一個新集羣」等。** * DBSCAN的「預測」的想法*有問題**,並且通常在該方法的早期表示一個糟糕的想法。 –