Tôi không chắc chắn rằng tôi hiểu ý của bạn khi "thu thập" dữ liệu. Nếu bạn đang đề cập đến số hóa và phân công các lớp học, thì điều này được thực hiện tốt nhất trong một hệ thống GIS. Có nhiều tùy chọn miễn phí sẽ phù hợp (ví dụ: QGIS, GRASS). Lý tưởng nhất là bạn sẽ có dữ liệu thực địa để đào tạo phân loại của bạn.
Quy trình phân loại sử dụng Rừng ngẫu nhiên khá đơn giản. Bạn có thể đọc trong dữ liệu huấn luyện của bạn (ví dụ, một shapefile điểm) sử dụng "rgdal" hoặc "maptools", đọc dữ liệu quang phổ của bạn sử dụng raster::stack
, chuyển nhượng các giá trị raster đến các điểm đào tạo của bạn sử dụng raster:extract
và sau đó chuyển thông tin này đếnrandomForest
. Bạn sẽ cần phải ép cột "lớp" của mình thành một yếu tố để RF nhận ra mô hình là một thể hiện phân loại. Khi bạn có một mô hình phù hợp, bạn có thể sử dụng chức năng dự đoán, chuyển nó vào ngăn xếp raster. Bạn sẽ cần phải vượt qua các đối số tiêu chuẩn để dự đoán ngoài các đối số cụ thể cho chức năng dự đoán raster. Gói raster có khả năng xử lý các raster "hết bộ nhớ" và như vậy là an toàn cho bộ nhớ, ngay cả với các raster rất lớn. Một trong những đối số trong chức năng dự đoán raster là "tên tệp" cho phép raster ghi vào đĩa. Đối với một vấn đề đa lớp, bạn sẽ cần đặt type = "reply" và index = 1, nó sẽ xuất ra một raster số nguyên của các lớp của bạn.
Có một số lưu ý cần lưu ý:
- Bạn không thể có nhiều hơn 32 cấp độ trong biến trả lời ( y ) hoặc bất kỳ yếu tố nào ở bên phải của phương trình ( x )
- Các lớp học của bạn phải được cân bằng. Quy tắc 30% là một quy tắc tốt để tuân theo, đó là nếu bạn có nhiều hơn 30% quan sát trên một lớp so với bất kỳ vấn đề nào khác, vấn đề của bạn trở nên mất cân bằng và kết quả có thể bị sai lệch
- Đó là một cách hiểu sai rằng RF không thể vượt quá. Nếu bạn quá tương quan với bộ đồng phục của bạn, bạn có thể phù hợp với mô hình. Một cách tốt để tránh điều này là chạy một mô hình sơ bộ và vẽ sơ đồ ổn định lỗi. Theo nguyên tắc thông thường, tôi chọn gấp 2 lần số bootstraps cần thiết để ổn định lỗi cho tham số ntree. Điều này là do tương tác biến ổn định ở tốc độ chậm hơn lỗi. Nếu bạn không bao gồm nhiều biến trong mô hình, bạn có thể thận trọng hơn nhiều với tham số này.
- Không sử dụng độ tinh khiết của nút làm thước đo tầm quan trọng của biến. Nó không được cho phép như độ chính xác giảm trung bình.
Tôi có các chức năng lựa chọn mô hình, mất cân bằng lớp và xác nhận trong gói rfUtilities có sẵn trên CRAN.
Đây là một số mã đơn giản để giúp bạn bắt đầu.
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)