2015-08-15 2 views
2

Рассмотрим метод generateLinearInput из MLLib LinearDataGenerator:Почему MLLib GenerateLinearInput внутренне умножает дисперсию на 12.0?

Вот подпись метода:

def generateLinearInput(
     intercept: Double, 
     weights: Array[Double], 
     xMean: Array[Double], 
     xVariance: Array[Double], 
     nPoints: Int, 
     seed: Int, 
     eps: Double): Seq[LabeledPoint] = { 

и здесь основной логики для генерации исходных точек данных:

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 
    } 

Примечание в частности 12.0 коэффициент масштабирования по дисперсии. Какова цель этого фактора?

Для полноты: здесь остальная часть этого метода - в котором линейная функция входа применяется к значениям х/домен для генерации Y выходных значений/диапазон:

val y = x.map { xi => 
    blas.ddot(weights.length, xi, 1, weights, 1) + intercept + eps * rnd.nextGaussian() 
} 
y.zip(x).map(p => LabeledPoint(p._1, Vectors.dense(p._2))) 
+1

Это, вероятно, относится к [stats.stackexchange.com] (http://stats.stackexchange.com), но для того, чтобы дать вам подсказку, отклонение _unif (a, b) _ равно _ (b - a)^2/12_ – zero323

+0

достаточно справедливо - но почему бы не сделать этот ответ - и мы можем закрыть это. – javadba

ответ

2

Если у Вас есть случайная величина Х

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

где а ' и Ь' являются параметры желаемого равномерное распределение и EX ' - среднее значение желаемого распределения. Если вы установили xMean в 0, остальная часть кодовых центров вводит данные около 0 и корректирует спред.

+0

У вас есть ссылка, показывающая * почему * дисперсия была равна (ab)^2/12 – javadba

+0

http://math.stackexchange.com/q/728059 – zero323

+0

спасибо за это (это наименьшее количество символов, разрешенных в комментарии;)) – javadba

Смежные вопросы