如何对成分数据进行建模?

数据挖掘 回归
2021-09-28 04:48:57

对组合数据问题建模的最佳方法是什么?

组合数据是指每个示例或样本是一个总和为 1(或 100%)的向量。就我而言,我对岩石中矿物质的成分感兴趣,我有传感器告诉我矿物质的总和,但不告诉我构成总和的成分。

例如,假设我有两种矿物质, m1m2,由 3 个元素(如铜和元素周期表中的其他元素)组成,它们形成一个长度为 3 的向量:

m1 = [0.1, 0.3, 0.6]
m2 = [0.6, 0.2, 0.2]

如果一块石头有 25% m1 和 75% m2,传感器读数产生两种矿物的总和(如下图左下角的子图所示):

0.25m1+0.75m2=0.25[0.1,0.3,0.6]+0.75[0.6,0.2,0.2]=[0.475,0.225,0.3]

矿物成分示例

我想知道如何建模和解决将组合物分解为其基础组件的问题,其中元素的总和被归一化为 100%(例如 0.25m1+0.75m2 具有相同的成分 0.50m1+1.50m2)。

此外,我的例子很简单。实际上,一个成分可以包含超过 2 种矿物质(最多 3000 种),每种矿物质由 118 种元素组成,而不仅仅是 3 种(元素周期表中的所有元素 - 尽管许多元素将为零)。假定矿物的元素组成是已知的(定义m1m2在示例中)。此外,传感器读数是嘈杂的——假设观察到的成分的每个元素都具有高斯噪声。

2个回答

首先对结果向量进行归一化。例如[.95, .45, .6]除以 2(成员之和);给予[.475, .225, .3].

x 是第一种矿物的份额,比 (x1) 是第二种矿物的份额。

求解必须给出相同结果的三个线性方程。

.1x+.6(1x)=.475

.3x+.2(1x)=.225

.6x+.2(1x)=.3

结果是 x=1/4 正如预期的那样。

更新

当然,上述提议的解决方案只有在矿物数量小于或等于元素数量时才有效。在问题的更新中明确指出,情况并非如此(3000 种矿物和 118 种元素)。

让我们在一个带有 3 个 minarals 和 2 个元素的小例子上模拟这个相反的情况。

m1 <- c(0.2, 0.8)  
m2 <- c(0.4, 0.6)  
m3 <- c(0.9, 0.1)

和矿物质的混合物

 x <- c(.25, .65, .1)

产生的测量

 t(matrix(c(m1,m2,m3),3,2, byrow= T))  %*% x

 [,1]
 [1,]  0.4
 [2,]  0.6

这给出了以下线性方程

m1+m2+m3=1

.2m1+.4m2+.9m3=.4

.8m1+.6m2+.1m3=.6

方程的解不是唯一的

m3∈<0,1/3.5>

m1=22m24.5m3

m2=13.5m3

下面提供了一些替代解决方案

  0 1 0
  0.125 0.825 0.050
  0.375 0.475 0.150
  0.5 0.3 0.2
  0.625 0.125 0.250
  0.71428571 0.00000000 0.28571429

这当然是一个过于简单的例子,但表明您应该仔细选择优化目标,因为可能会有更多“同样好的”解决方案。例如,通过促进稀疏性,您会发现与[0 1 0]我们使用的组合相去甚远的解决方案。

如果我理解正确,在你的问题中矿物元素向量 m1m2众所周知_

如果是这种情况,我会建议 LASSO 回归。假设你有n 矿物质 m1, m2, ..., mnRp 排列成矩阵 M=[m1;m2,...,mn]Rn×p, 和一个未知的混合向量 xRn(在你的情况下,x=[0.25;0.75])。您的传感器测量y=MxRn你想恢复xy.

LASSO 回归旨在解决x^=argminx||yMx||2+λ||x||1. 1惩罚促进了稀疏性x当你有很多候选矿物质时,这可能是有益的。

由于数据的组成性质,我认为您不需要任何特殊处理,除了规范化最终结果x^如果需要的话。