为什么MLLib GenerateLinearInput在内部将方差乘以12.0?

时间:2015-08-15 12:38:52

标签: scala random apache-spark apache-spark-mllib

考虑来自MLLib {% for com in company %} {{ com.name }} {{ com.description }} {{ number_employees(com.id) }} {% endfor %} 的{​​{1}}方法:

以下是该方法的签名:

generateLinearInput

这是生成原始数据点的核心逻辑:

LinearDataGenerator

特别注意方差 def generateLinearInput( intercept: Double, weights: Array[Double], xMean: Array[Double], xVariance: Array[Double], nPoints: Int, seed: Int, eps: Double): Seq[LabeledPoint] = { 缩放系数 该因素的目的是什么?

为了完整性:这是该方法的其余部分 - 其中输入线性函数应用于x /域值以生成输出y /范围值:

val rnd = new Random(seed)
val x = Array.fill[Array[Double]](nPoints)(
  Array.fill[Double](weights.length)(rnd.nextDouble()))

x.foreach { v =>
  var i = 0
  val len = v.length
  while (i < len) {
    v(i) = (v(i) - 0.5) * math.sqrt(12.0 * xVariance(i)) + xMean(i)
    i += 1
  }

1 个答案:

答案 0 :(得分:2)

如果你有随机变量 X

enter image description here

然后its variance is equal

enter image description here

所以这段代码

v(i) = (v(i) - 0.5) * math.sqrt(12.0 * xVariance(i)) + xMean(i)

应该相当于:

enter image description here

其中 a' b'是所需均匀分布的参数, EX'是所需分布的平均值。如果将xMean设置为0,则其余代码将输入数据集中在0左右并调整范围。