Google Earth Engine(GEE)——在线计算列表二维ee.List对象为线性回归方程计算slope和残差

简介: Google Earth Engine(GEE)——在线计算列表二维ee.List对象为线性回归方程计算slope和残差

二维ee.List对象的可以作为回归缩减器的输入。下面的例子提供了简单的证明;自变量是因变量的副本,产生等于 0 的 y 截距和等于 1 的斜率。


注意:减少的结果ee.List是一个对象。将其强制转换为 an ee.Dictionary以使访问属性更容易。


注意:行和列之间的长度必须相等。使用null表示丢失的数据条目。

linearFit()代码:

// 定义一个列表列表,其中列代表变量。
// 第一列是自变量,第二个是因变量。
var listsVarColumns = ee.List([
  [1, 1],
  [2, 2],
  [3, 3],
  [4, 4],
  [5, 5]
]);
// 计算线性函数的最小二乘估计。请注意,一个返回对象;将其转换为 ee.Dictionary 以访问
系数更容易。很简单的操作就是根据在进行线性回归之前加入 ee.Dictionary整个程序更像是在外面进行加了一层包装
var linearFit = ee.Dictionary(listsVarColumns.reduce(ee.Reducer.linearFit()));
// 检查结果
print(linearFit);
print('y-intercept:', linearFit.get('offset'));
print('Slope:', linearFit.get('scale'));

结果很明显,因为我们取得就是相同的数,所以:

如果变量由表示,则通过转换为ee.Array,转置它,然后转换回 来转置列表ee.List

函数:

ee.Array(values, pixelType)这个函数在这里只起到对于对象的转化

返回具有给定坐标的数组。
参数:

Returns an array with the given coordinates.


Arguments:

值(对象): 要转换的现有数组,或用于创建数组的任何深度的数字/数字列表/嵌套数字列表。对于嵌套列表,相同深度的所有内部数组必须具有相同的长度,并且数字只能出现在最深层.

values (Object):

An existing array to cast, or a number/list of numbers/nested list of numbers of any depth to create an array from. For nested lists, all inner arrays at the same depth must have the same length, and numbers may only be present at the deepest level.

pixelType (PixelType, default: null):

像素类型(像素类型,默认值:null):
values 参数中每个数字的类型。如果未提供像素类型,则将从“值”中的数字推断。如果“值”中没有任何数字,则必须提供此类型。

The type of each number in the values argument. If the pixel type is not provided, it will be inferred from the numbers in 'values'. If there aren't any numbers in 'values', this type must be provided.


Returns: Array

ee.Dictionary(dict)

构造一个新的字典。

Constructs a new Dictionary.


Arguments:

dict (ComputedObject|Object, optional):

要转换为字典的对象。此构造函数接受以下类型: 1) 另一个字典。 2) 键/值对列表。 3) 空或无参数(产生一个空字典)下面的例子就是2)

An object to convert to a dictionary. This constructor accepts the following types: 1) Another dictionary. 2) A list of key/value pairs. 3) A null or no argument (producing an empty dictionary)


Returns: Dictionary

代码:

//如果列表中的变量按行排列,则需要对其进行转置。
// 定义一个列表列表,其中行代表变量。
// 第一行是自变量,第二个是因变量。
var listsVarRows = ee.List([
  [1, 2, 3, 4, 5],
  [1, 2, 3, 4, 5]
]);
// 将 ee.List 转换为 ee.Array,转置它,然后转换回 ee.List。
var listsVarColumns = ee.Array(listsVarRows).transpose().toList();
// 计算线性函数的最小二乘估计。请注意,一个返回对象;
// 将其转换为 ee.Dictionary 以访问系数更容易。
var linearFit = ee.Dictionary(listsVarColumns.reduce(ee.Reducer.linearFit()));
// 进行结果显示
print(linearFit);
print('y-intercept:', linearFit.get('offset'));
print('Slope:', linearFit.get('scale'));


linearRegression()这里面一定会有一个常数自变量,也就是自变量有两个一个常数一个自己定义的数

的应用ee.Reducer.linearRegression()类似于上面的 linearFit()示例,不同之处在于包括了一个常数自变量。

// 定义一个列表列表,其中列代表变量。
// 第一列代表一个常数项,第二个是自变量,
// 第三个是一个因变量。
var listsVarColumns = ee.List([
  [1, 1, 1],
  [1, 2, 2],
  [1, 3, 3],
  [1, 4, 4],
  [1, 5, 5]
]);
// 计算普通最小二乘回归系数。 numX 是 2,因为有一个常数项和一个额外的自变量。 
//numY 为 1,因为只有一个因变量。这里有几个自变量X就为几,因变量一般为一个
//将结果对象强制转换为 ee.Dictionary 以便于访问属性。
var linearRegression = ee.Dictionary(
  listsVarColumns.reduce(ee.Reducer.linearRegression({
    numX: 2,
    numY: 1
})));
// 将系数数组转换为列表。
var coefList = ee.Array(linearRegression.get('coefficients')).toList();
// Extract the y-intercept and slope.
var b0 = ee.List(coefList.get(0)).get(0); // y-intercept
var b1 = ee.List(coefList.get(1)).get(0); // slope
// Extract the residuals.
var residuals = ee.Array(linearRegression.get('residuals')).toList().get(0);
// 检查结果。
print('OLS estimates', linearRegression);
print('y-intercept:', b0);
print('Slope:', b1);
print('Residuals:', residuals);

结果如图,一般情况下出来的默认就是0为截距,1为斜率这是对于(linearRegression.get('coefficients'))中系数来说,而残差因为只有一个所以直接获取就可以。

基本上操作还是比较简单,但是这个在云平台上用的还是较少,一般本地的软件都可以轻松实现!



相关文章
|
10月前
|
人工智能 Java
Java 中数组Array和列表List的转换
本文介绍了数组与列表之间的相互转换方法,主要包括三部分:1)使用`Collections.addAll()`方法将数组转为列表,适用于引用类型,效率较高;2)通过`new ArrayList<>()`构造器结合`Arrays.asList()`实现类似功能;3)利用JDK8的`Stream`流式计算,支持基本数据类型数组的转换。此外,还详细讲解了列表转数组的方法,如借助`Stream`实现不同类型数组间的转换,并附带代码示例与执行结果,帮助读者深入理解两种数据结构的互转技巧。
757 1
Java 中数组Array和列表List的转换
|
数据挖掘 大数据 数据处理
python--列表list切分(超详细)
通过这些思维导图和分析说明表,您可以更直观地理解Python列表切分的概念、用法和实际应用。希望本文能帮助您更高效地使用Python进行数据处理和分析。
386 14
|
C语言 Python
[oeasy]python054_python有哪些关键字_keyword_list_列表_reserved_words
本文介绍了Python的关键字列表及其使用规则。通过回顾`hello world`示例,解释了Python中的标识符命名规则,并探讨了关键字如`if`、`for`、`in`等不能作为变量名的原因。最后,通过`import keyword`和`print(keyword.kwlist)`展示了Python的所有关键字,并总结了关键字不能用作标识符的规则。
313 9
|
数据挖掘 大数据 数据处理
python--列表list切分(超详细)
通过这些思维导图和分析说明表,您可以更直观地理解Python列表切分的概念、用法和实际应用。希望本文能帮助您更高效地使用Python进行数据处理和分析。
1219 10
|
测试技术 开发者 Python
在 Python 中创建列表时,应该写 `[]` 还是 `list()`?
在 Python 中,创建列表有两种方法:使用方括号 `[]` 和调用 `list()` 函数。虽然两者都能创建空列表,但 `[]` 更简洁、高效。性能测试显示,`[]` 的创建速度比 `list()` 快约一倍。此外,`list()` 可以接受一个可迭代对象作为参数并将其转换为列表,而 `[]` 则需要逐一列举元素。综上,`[]` 适合创建空列表,`list()` 适合转换可迭代对象。
226 1
在 Python 中创建列表时,应该写 `[]` 还是 `list()`?
|
索引 Python
List(列表)
List(列表)。
227 4
|
JavaScript 数据管理 虚拟化
ArkTS List组件基础:掌握列表渲染与动态数据管理
在HarmonyOS应用开发中,ArkTS的List组件是构建动态列表视图的核心。本文深入探讨了List组件的基础,包括数据展示、性能优化和用户交互,以及如何在实际开发中应用这些知识,提升开发效率和应用性能。通过定义数据源、渲染列表项和动态数据管理,结合虚拟化列表和条件渲染等技术,帮助开发者构建高效、响应式的用户界面。
1082 2
|
NoSQL 关系型数据库 MySQL
Redis 列表(List)
10月更文挑战第16天
190 2
|
JavaScript
DOM 节点列表长度(Node List Length)
DOM 节点列表长度(Node List Length)
|
JavaScript
DOM 节点列表长度(Node List Length)
DOM 节点列表长度(Node List Length)