問題一:
現(xiàn)在我有40多萬條的數(shù)據(jù),需要對該數(shù)據(jù)使用某種機器學習分類演算法建立模型,遇到的問題是因為數(shù)據(jù)過於龐大不能一次性的進行數(shù)據(jù)的讀取,所以想問一下該如何處理數(shù)據(jù)?
問題二:
關於sklearn交叉驗證有個疑問:假如我有10000個訓練數(shù)據(jù),由交叉驗證原理可以將這一萬個訓練數(shù)據(jù)集使用KFold方法分成n組訓練(train數(shù)據(jù)佔0.7),現(xiàn)在搞不懂的就是我對第一組的訓練集進行fit(),然後對測試集進行預測驗證得到預測的準確率,但是得到預測準確率有什麼用呢?會對下一次的訓練有影響嗎?還有上一次的訓練模型會被用到下次的fit()函數(shù)嗎?
Following the voice in heart.
我最近在學大數(shù)據(jù)的資料探勘與分析這一塊,對於問題一,我有個思路你參考一下:既然無法一次性讀取,可以建立分佈式數(shù)據(jù)模型,分次讀取數(shù)據(jù),確定地址datanode(可以是某個變數(shù)名稱),建立一個namenode(名字與該位址對應的表格),然後取得資料的時候,先在namenode中確認位址(需要的是哪一個變數(shù)對應的資料),再造訪該位址取得數(shù)據(jù)進行處理。由於初學,我只是提供下我個人的思路,答案不唯一,僅供參考,各路大牛不喜勿噴。
40萬沒多少啊,頂多幾G吧......
如果真的是內(nèi)存小到8G也沒有,那還是得看你具體場景啊,舉個列子,單純算tf-idf,一個generator,記憶體中只有最後的tf-idf字典。
交叉驗證只是為了選取誤差最小的一個,你提到的前面的影響後面,是boosting的概念。
這種問答網(wǎng)站最好是一個問題一個坑,必要時兩個分開的問題給連結連相關性,避免 Double-barreled question
(1) 見How to optimize for speed,你會發(fā)現(xiàn)有很多可以調(diào)控試驗的方式,包括(a)盡量使用簡單的算法計巧(b)針對現(xiàn)實狀況做記憶體使用及速度的側寫( c)試著用Numpy陣列取代所有nested loops (d)必要時使用Cython Wrapper 去調(diào)更有效率的C/C++函式庫。這些只是基本原則和方向,其實還是要看你要操作問題的瓶頸分析,是速度還是空間,把程式碼優(yōu)化後再考慮是否要用平行運算等手段
(2) 你這問題得區(qū)分數(shù)學和實證上要求的差異,希望你對過擬合(overfitting)及underfitting的實證及數(shù)學意義有所掌握,這裡的問答還蠻不錯的,讀一下有幫助的。