近期使用随机森林回归模型的时候,留意到回归模型也有了trees,是否可以像分类模型一样保存调用呢?答案是显然的,同样的代码。
var trees = ee.List(ee.Dictionary(classifier.explain()).get('trees'))
var rf_model = ee.FeatureCollection(trees.map(function(x){
return dummy.set('trees',x)}))
Export.table.toAsset(rf_model,'save_classifier2')
而模型的调用代码为:
var treesuse = ee.FeatureCollection('projects/.../save_classifier2').aggregate_array('trees')
var rf_model_use = ee.Classifier.decisionTreeEnsemble(treesuse)
var predicted = image.select(bands).classify(rf_model_use)
下面写一下遇到的问题:
- 训练样本太大时,会提醒超过Feature属性值超过 1 × 1 0 6 1 \times 10^6 1×106个字节;
- 训练样本太大时,var trees = ee.List(ee.Dictionary(classifier.explain()).get(‘trees’))仅能得到前面部分字符,没法获取完整的trees,不知道是保护机制还是咋。
第一个问题有点小心得,可以分享,技术有限,见谅。
具体思路为:
- 将每个树按照一定字节长度切割,使每段小于 1 × 1 0 6 1 \times 10^6 1×106个字节,分别保存在同一个Feature不同属性中,然后保存到Assets中;
- 将保存的模型加载为FeactureCollection后,将各Feature各属性值拼接为新的属性。
代码如下:
function FC_string_slice(Str) {
var null_island = ee.Geometry.Point([0, 0])
var Str = ee.String(Str)
var ChunkSize = ee.Number(800000)
var Strlen = ee.Number(Str.length())
var Chunk_list = Strlen.divide(ChunkSize).ceil()
var indices = ee.List.sequence(