我在统计建模中介绍一个非常受欢迎的主题; 多线性(或多变量)回归(MLR)或分类。在简单的例子中,我将向您展示MLR的用法。MLR已广泛用于科学(生物,制药,金融,医疗等)。
测量了五个人的体重指数。对于每个人,饮食评分,无论是男性还是女性以及是否年龄超过20,也记录在三栏中。不要问我饮食评分是多少以及如何测量它们,因为我不知道这只是一个玩具的例子。问题是:BMI与饮食评分,性别和年龄之间的关系是什么?如果我们有新人的饮食评分,性别和年龄,我们可以得到他/她的体重指数吗?MLR在这里回答这些问题。我们期望BMI和三个变量之间的关系是这样的:
基于此等式,为了预测具有已知饮食分数,性别和年龄的人的BMI值,您需要知道所有β的值。MLR找到所有缺失系数的值。我们称ß 0 偏见。在大多数实际应用中,具有大偏差意味着预测器(即三个变量)没有足够的预测能力并且具有小偏差是具有良好预测模型的良好信号。一个大的偏见可能意味着还有其他描述符可以解释我们尚未发现它们的观察结果。
让我们将上表中的BMI列显示为列矩阵并将其命名为Y,并将所有自变量的值命名为具有名称X的3 x 3矩阵,最后将β矩阵的值作为列矩阵b发现。 可以找到 未知矩阵b
b =(X'X)-1 X'Y
其中X” 是矩阵的转置X 和-1 返回矩阵的逆矩阵。
如果您想要偏见,则需要向矩阵X 添加新列。此新列应该是第一个,其所有行的值必须为1。
MLR的限制: MLR仅在X矩阵中的列数小于或等于行数时起作用。换句话说,描述符的数量不能超过观察的数量。另一个限制是关于上述等式中的逆运算。并非所有矩阵都具有逆矩阵,当我们无法得到X'X的逆 矩阵时,b矩阵的计算将失败,因此MLR将失败。 当MLR失败时,还有其他方法,如偏最小二乘法 或支持向量机,可以正常工作。
使用代码
我们只需要在另一篇文章中描述的所有矩阵运算方法之上实现单个方法,以便创建模型并找到b矩阵的值。
public Matrix calculate() throws NoSquareException {
if (bias)
this.X = X.insertColumnWithValue1();
checkDiemnsion();
Matrix Xtr = MatrixMathematics.transpose(X); //X'Matrix XXtr = MatrixMathematics.multiply(Xtr,X); //X'XMatrix inverse_of_XXtr = MatrixMathematics.inverse(XXtr); //(X'X)^-1if (inverse_of_XXtr == null) {
System.out.println("Matrix X'X does not have any inverse. So MLR failed to create the model for these data.");
return null;
}
Matrix XtrY = MatrixMathematics.multiply(Xtr,Y); //X'Yreturn MatrixMathematics.multiply(inverse_of_XXtr,XtrY); //(X'X)^-1 X'Y}
以上代码遵循以下步骤以获得b 矩阵:如果你想要偏差(即beta 0),那么在X 矩阵中添加一个新列
然后检查输入矩阵是否有效
然后找到X的转置 (即 X' )
再乘以X由X”
然后从步骤4中找到矩阵的逆矩阵; 即(XX')- 1
再乘以X” 的ÿ
最后,通过步骤6中的操作矩阵,将来自步骤5中的操作的矩阵相乘
现在让我们在上面的例子中测试方法:
Matrix X = new Matrix(new double[][]{{4,0,1},{7,1,1},{6,1,0},{2,0,0},{3,0,1}});
Matrix Y = new Matrix(new double[][]{{27},{29},{23},{20},{21}});
MultiLinear ml = new MultiLinear(X, Y);
Matrix beta = ml.calculate();
当我们使用带有两个参数的构造函数时,默认情况下bias的值为true。结果如下:
这是一个预测MSI具有所有自变量值(即饮食评分,性别和年龄)的模型。β的值的大小以及它们的符号表明它们的重要性。 在这个说明性的例子中,饮食评分和性别对BMI的贡献大于年龄,性别和饮食评分的影响相反; 即,饮食评分较高的人体内BMI较高,男性体内BMI显着低于女性。 有趣的是看到MLR对BMI观察的见解。
最后一个问题:这是一个好模型吗?我们可以做的最小化是使用模型(上面的等式)并预测BMI,然后将它们与观察值进行比较:
正如您所看到的那样,预测的那些距离观察到的并不那么远。您可以找到每种情况的误差(即预测 - 观察到的)并计算可以指示我们的模型准确度的均方误差(MSE)。MSE越低,模型越好。