说我有如下输入:
60,3.1
61,3.6
62,3.8
63,4
65,4.1
预计输出如下:
预期产出:y = -8.098 + 0.19x。
我知道如何在java中执行此操作。但不知道这是如何使用mapreduce模型的。任何人都可以提出想法或示例Map Reduce代码来解决这个问题吗?我会很感激。
这个简单的数学例子:
Regression Formula:
Regression Equation(y) = a + bx
Slope(b) = (NΣXY - (ΣX)(ΣY)) / (NΣX2 - (ΣX)2)
Intercept(a) = (ΣY - b(ΣX)) / N
where
x and y are the variables.
b = The slope of the regression line
a = The intercept point of the regression line and the y axis.
N = Number of values or elements
X = First Score
Y = Second Score
ΣXY = Sum of the product of first and Second Scores
ΣX = Sum of First Scores
ΣY = Sum of Second Scores
ΣX2 = Sum of square First Scores
e.g。
X Values Y Values
60 3.1
61 3.6
62 3.8
63 4
65 4.1
为了找到回归方程,我们首先找到斜率,截距并用它来形成回归方程。
Step 1: Count the number of values.
N = 5
Step 2: Find XY, X2
See the below table
X Value Y Value X*Y X*X
60 3.1 60 * 3.1 = 186 60 * 60 = 3600
61 3.6 61 * 3.6 = 219.6 61 * 61 = 3721
62 3.8 62 * 3.8 = 235.6 62 * 62 = 3844
63 4 63 * 4 = 252 63 * 63 = 3969
65 4.1 65 * 4.1 = 266.5 65 * 65 = 4225
Step 3: Find ΣX, ΣY, ΣXY, ΣX2.
ΣX = 311
ΣY = 18.6
ΣXY = 1159.7
ΣX2 = 19359
Step 4: Substitute in the above slope formula given.
Slope(b) = (NΣXY - (ΣX)(ΣY)) / (NΣX2 - (ΣX)2)
= ((5)*(1159.7)-(311)*(18.6))/((5)*(19359)-(311)2)
= (5798.5 - 5784.6)/(96795 - 96721)
= 13.9/74
= 0.19
Step 5: Now, again substitute in the above intercept formula given.
Intercept(a) = (ΣY - b(ΣX)) / N
= (18.6 - 0.19(311))/5
= (18.6 - 59.09)/5
= -40.49/5
= -8.098
Step 6: Then substitute these values in regression equation formula
Regression Equation(y) = a + bx
= -8.098 + 0.19x.
假如我们想知道变量x = 64的近似y值。那么我们可以用上面的等式中的值代替。
Regression Equation(y) = a + bx
= -8.098 + 0.19(64).
= -8.098 + 12.16
= 4.06
答案 0 :(得分:1)
我用mrjob编码了Map-Reduce线性回归的实现:
获取线性回归参数的两个最重要的组件 是X.t * X(其中X是每行观察的输入矩阵)和 X.t * Y. 每个Mapper为其处理的第i部分数据计算X_i.t * X_i和X_i.t * Y_i,然后所有映射器将数据输出到单个reducer。所有映射器的减速器总和结果: X.t * X =Σi(X_i.t * X_i) X.t * Y =Σi(X_i.t * Y_i)
然后参数向量b =(X.t * X)^ - 1 * X.t * Y. 然而,更好的参数识别解决方案是使用Cholesky分解,因为它是在代码中完成的。