岭回归一般可以用来解决线性回归模型系数无解的两种情况。 一方面是自变量间存在高度多重共线性,另一方面则是自变量个数大于等于观测个数。 即在X’X的基础上加上一个较小的lambda扰动
-
cv::Mat RidgeRegression(cv::Mat D, cv::Mat Y)
-
{
-
float lamda = 0.01;
-
cv::Mat tranD = D.t();
-
cv::Mat I = cv::Mat::eye(D.cols,D.cols,CV_32F);
-
cv::Mat tmp = tranD*D+lamda*I;
-
cv::Mat invtmp = tmp.inv(DECOMP_SVD);
-
cv::Mat W = invtmp * tranD* Y;
-
return W;
-
-
}
-
def ridgeRegres(xMat,yMat,lam=0.2):
-
xTx = xMat.T*xMat
-
denom = xTx + np.eye(np.shape(xMat)[1])*lam
-
if np.linalg.det(denom) == 0.0:
-
print("This matrix is singular, cannot do inverse")
-
return
-
-
ws = denom.I * (xMat.T*yMat)
-
return ws
-