Имам почти 900 000 реда информация, която азПроблемът е, че когато се опитам да създам модела, компютърът ми замръзва напълно, така че това, което искам да опитам, е да изпълнява модела на всеки 50 000 реда, но не съм сигурен дали е възможно.
Така че кодът, който имам сега, е
# This code freezes my computer
rfc.fit(X,Y)
#what I want is
model = rfc.fit(X.ix[0:50000],Y.ix[0:50000])
model = rfc.fit(X.ix[0:100000],Y.ix[0:100000])
model = rfc.fit(X.ix[0:150000],Y.ix[0:150000])
#... and so on
Отговори:
1 за отговор № 1Някои алгоритми в scikit-learn изпълняват"частен_фит ()" метод, който е това, което търсите. Съществуват случайни алгоритми за горите, които правят това, но аз вярвам, че алгоритъмът за научен урок не е такъв алгоритъм.
Въпреки това, този въпрос и отговор може да имат заобиколно решение, което ще работи за вас. Можете да обучавате гори на различни подгрупи и да сглобите наистина голяма гора в края: Комбиниране на случайни горски модели в научен урок
1 за отговор № 2
Друг метод, подобен на този, свързан с Андреус, е да се отглеждат дърветата в гората поотделно.
Направих това известно време назад: основно обучих редица DecisionTreeClassifier
"Една по една на различни дялове на данните за обучение. Запазих всеки модел чрез ецване, след което ги заредих в списък, който беше присвоен на estimators_
атрибут на RandomForestClassifier
обект. Вие също трябва да се погрижите да настроите останалата част от RandomForestClassifier
атрибути.
Попаднах на проблеми с паметта, когато построих всички дървета в един питон скрипт, Ако използвате този метод и се сблъскате с този проблем, имаме работа, която публикувах в свързания въпрос.
0 за отговор № 3
Чувствайте се свободни да ме коригирате, ако "греша, но предполагам, че не използвате най-актуалната версия на scikit-learn
(0.16.1 като на това пишете), че сте на Windows машина и използвате n_jobs=-1
(или комбинация от трите). Така че моето предложение би било първо да ъпгрейдвам scikit-learn
или задайте n_jobs=1
и се опитайте да подберете целия набор от данни.
Ако това не успее, разгледайте warm_start
параметър. Като я настроите True
и постепенно увеличаване n_estimators
можете да поставите допълнителни дървета в поднабори от данните си:
# First build 100 trees on the first chunk
clf = RandomForestClassifier(n_estimators=100, warm_start=True)
clf.fit(X.ix[0:50000],Y.ix[0:50000])
# add another 100 estimators on chunk 2
clf.set_params(n_estimators=200)
clf.fit(X.ix[0:100000],Y.ix[0:100000])
# and so forth...
clf.set_params(n_estimators=300)
clf.fit(X.ix[0:150000],Y.ix[0:150000])
Друга възможност е да се постави нов класификатор на всяко парче и след това просто да се изчислят средните прогнози от всички класификатори или да се сливат дърветата в една голяма случайна гора описани тук.