Я не впевнений, що я розумію, що ви маєте на увазі під "збиранням" даних. Якщо ви маєте на увазі підручну оцифрування та присвоєння класів, це найкраще зробити в ГІС. Є безліч безкоштовних варіантів, які були б підходящими (i..e, QGIS, GRASS). В ідеалі ви мали б польові дані для підготовки вашої класифікації.
Процедура класифікації за допомогою випадкових лісів є досить простою. Ви можете читати у ваших тренувальних даних (тобто, точкових формах точок), використовуючи "rgdal" або "maptools", читати у своїх спектральних даних за допомогою raster::stack
, присвоювати растрові значення вашим навчальним точкам, raster:extract
а потім передавати це вrandomForest
. Вам потрібно буде примусити свій "класний" стовпець до фактору, щоб РФ визнала модель як екземпляр класифікації. Як тільки у вас є відповідна модель, ви можете використовувати функцію передбачення, передаючи її вам растровий стек. Вам потрібно буде передати стандартні аргументи для прогнозування на додаток до тих, які характерні для функції растрового передбачення. Растровий пакет має можливість обробляти растри "поза пам'яттю" і як такий є безпечним для пам'яті навіть при дуже великих растрах. Один з аргументів функції прогнозування растрових зображень - це "ім'я файлу", що дозволяє записати растр на диск. Для проблеми з багатокласовим знаком потрібно встановити type = "response" та index = 1, який виведе цілий растр ваших класів.
Є кілька застережень, які слід зазначити:
- У вашій змінній відповіді ( у ) або будь-якому факторі праворуч рівняння ( х ) не може бути більше 32 рівнів
- Ваші заняття повинні бути збалансованими. Правило на 30% - це добре дотримуватися, тобто якщо у вас є більше 30% спостережень за одним класом, ніж будь-який інший, ваша проблема стає незбалансованою, і результати можуть бути упередженими
- Це неправильне значення, яке РФ не може перевиконати. Якщо ви більше співвіднесете свій ансамбль, ви зможете доповнити модель. Хороший спосіб уникнути цього - запустити попередню модель та побудувати схему стабілізації помилок. Як правило, я вибираю в 2 рази кількість завантажувальних рядів, необхідних для стабілізації помилки для параметра ntree. Це тому, що змінна взаємодія стабілізується з меншою швидкістю, ніж помилка. Якщо ви не включаєте багато змінних у модель, ви можете бути набагато консервативнішими з цим параметром.
- Не використовуйте чистоту вузла як міру змінної важливості. Він не перестановлений, як середнє зниження точності.
У мене є функції вибору моделі, дисбалансу класів та перевірки в пакеті rfUtilities, доступному на CRAN.
Ось простий код для початку роботи.
require(sp)
require(rgdal)
require(raster)
require(randomForest)
# CREATE LIST OF RASTERS
rlist=list.files(getwd(), pattern="img$", full.names=TRUE)
# CREATE RASTER STACK
xvars <- stack(rlist)
# READ POINT SHAPEFILE TRAINING DATA
sdata <- readOGR(dsn=getwd() layer=inshape)
# ASSIGN RASTER VALUES TO TRAINING DATA
v <- as.data.frame(extract(xvars, sdata))
sdata@data = data.frame(sdata@data, v[match(rownames(sdata@data), rownames(v)),])
# RUN RF MODEL
rf.mdl <- randomForest(x=sdata@data[,3:ncol(sdata@data)], y=as.factor(sdata@data[,"train"]),
ntree=501, importance=TRUE)
# CHECK ERROR CONVERGENCE
plot(rf.mdl)
# PLOT mean decrease in accuracy VARIABLE IMPORTANCE
varImpPlot(rf.mdl, type=1)
# PREDICT MODEL
predict(xvars, rf.mdl, filename="RfClassPred.img", type="response",
index=1, na.rm=TRUE, progress="window", overwrite=TRUE)