2011-11-21 179 views
5

我試圖用R中的knn(使用幾個包(knnflex,class))來根據8個變量預測違約概率。該數據集大約有8行的10萬行,但我的機器似乎在10K行的樣本上有困難。對數據集> 50行(即iris)做任何建議?R knn大型數據集

編輯:

澄清有幾個問題。

1)在classknnflex包的例子是有點不清楚,我很好奇,如果有類似的地方,你給它的變量,你要預測你要使用的隨機森林包和數據的一些實施訓練模式:

RF <- randomForest(x, y, ntree, type,...) 

然後轉身和使用模型使用測試數據集的預測數據:

pred <- predict(RF, testData) 

2)我真的不明白爲什麼要knn賴寧g AND建立模型的測試數據。從我所知道的情況來看,該軟件包創建了一個矩陣〜nrows(trainingData)^2,這似乎也是預測數據大小的上限。我使用5000行創建了一個模型(高於#我有內存分配錯誤),無法預測測試集> 5000行。因此,我需要兩種:

一)找到一種方法,在一次訓練中使用> 5000行設置

B)找到一種方法,使用該模型對全行10萬。

+0

只是想知道,你最終設法推進這個 - 在訓練集大小方面? – ktdrv

+0

@ktdrv:我相信我設法完成了完整的數據集。我會推薦'caret'包中的knn實現,原因有兩個。首先它允許調整'k'參數。其次,它是我使用的最快的knn模型,它允許並行化(儘管我沒有看到knn的巨大吸引力)。 下面是一組很好的解釋和例子,以啓動和運行:http://www.jstatsoft.org/v28/i05/paper – screechOwl

回答

8

knn(在)要求同時提供訓練和測試數據的原因是,如果不這樣做,「模式」,它將返回,簡直是訓練數據本身。

訓練數據的模型。

作出預測,knn計算測試觀察和每個訓練觀察之間的距離(雖然我認爲有一些奇特的版本出奇的大數據集不檢查每一個距離)。因此,除非你有測試觀察,否則沒有真正的模型可供構建。

IPRED包提供你描述出現的結構化的功能,但如果你看看他們,你會看到有基本上沒有什麼在「培訓」功能發生。所有的工作都在「預測」功能中。而這些真正用作使用交叉驗證進行誤差估計的包裝。

至於案件數量的限制,這將取決於你有多少物理內存。如果您收到內存分配錯誤,那麼您可能需要在其他地方減少你的內存使用(關閉應用程序等),購買更多的RAM,購買一臺新電腦,等

knn功能運行正常對於我來說,訓練和測試數據集的10k行或更多,儘管我有8GB的RAM。另外,我懷疑knn將會比在knnflex更快,但我還沒有做過廣泛的測試。

+0

感謝您的建議。像big.matrix或ff會是有效的解決方法嗎? – screechOwl

+0

@acesnap也許;我其實對這些工具沒有太多經驗。如果我在你的鞋子裏,我會簡單地將我的測試集打碎成'knn'將要處理的最大塊,並且一次一個地進行預測。 (併購買更多的內存;這是相當便宜!) – joran

+0

你說得對''級'版本更好。只需要處理一下格式。再次感謝您的幫助和解釋。 – screechOwl