提示:本文不调用sklearn等包,直接使用scipy.optimize,numpy和pandas完成了Ridge_Regression,即岭回归算法的实现。
一、Ridge_Regression岭回归之算法原理?
岭回归是一种常见的方法,简单来说就是在线性回归 Y = β X + b 的基础上加入了正则项,减少了过拟合,其实也就介绍完了,这个正则项可以转变成一个对权重二范数的一个约束 || β || < t
那么我们可以用Scipy里面的NonlinearConstraint去解决这个问题。通常岭回归方程的**|| β ||**会稍低于普通回归分析,但回归系数的显著性往往明显高于普通回归,在存在共线性问题和病态数据偏多的研究中有较大的实用价值,也就是说在一些实际应用场景更具有应用价值吧。
二、python源码
代码如下(示例):
1.Ridge_Regression.py
from scipy.optimize import (BFGS, NonlinearConstraint, minimize)
import numpy as np
import pandas as pd
class problem:
df = pd.read_csv('D:/Tencent/2668630468/FileRecv/PRISON.csv')
data = np.array(df.values)
thresh = 5
m = data.shape[0]
n = data.shape[1]
testx = data[:, 0:-1]
testy = data[:, -1]
def f(self, x):
temp = np.dot(self.testx, x.reshape(self.n-1, 1))
result = temp - self.testy.reshape(self.m, 1)
result = result.reshape(self.m, )
result = np.sum(result)
return result
def g(self, x):
return np.sum(x ** 2)
p = problem()
nonlinear_constraint = NonlinearConstraint(p.g, 0.0, p.thresh ** 0.5, jac='2-point', hess=BFGS())
res = minimize(p.f,
x0=np.tile(np.array([0]),p.n-1),
method='SLSQP',
jac="2-point",
constraints=[nonlinear_constraint]
)
print(res.x)
2.读入数据
优快云数据链接如下:数据链接
总结
本文将岭回归问题转化为凸优化问题并通过Scipy.minimize进行求解,其中使用Scipy.NonlinearConstraint对求解权重 β 进行约束。
参考链接:https://blog.youkuaiyun.com/weixin_43374551/article/details/83688913