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