对于一般地线性回归问题,参数的求解采用的是最小二乘法,其目标函数如下:
argmin||X * w - y||^(2)
参数w的求解,也可以使用如下矩阵方法进行:
w = (X.T * X)^(-1) * X.T * y
对于矩阵X,若某些列线性相关性较大(即训练样本中某些属性线性相关,不满秩,稀疏矩阵),就会导致X.T * X的值接近0,在计算(X.T * X)^(−1)时就会出现不稳定性。
结论:传统的基于最小二乘的线性回归法缺乏稳定性。
岭回归的优化目标: (正则项)
argmin||X * w - y||^(2) + alpha * ||w||^(2)
w = (X.T * X + alpha * I)^(-1) * X.T * y
- 岭回归(ridge regression)是一种专用于共线性数据分析的有偏估计回归方法。
- 是一种改良的最小二乘估计法,对某些数据的拟合要强于最小二乘法。
在sklearn库中,可以使用sklearn.linear_model.Ridge调用岭回归模型,其
主要参数有:
• alpha:正则化因子,对应于损失函数中的α。
• fit_intercept:表示是否计算截距。
• solver:设置计算参数的方法,可选参数‘auto’、‘svd’、‘sag’等。
import numpy as np
from sklearn.linear_model import Ridge
from sklearn import model_selection
import matplotlib.pyplot as plt
from sklearn.preprocessing import PolynomialFeatures
def main():
#data = np.genfromtxt('岭回归.csv')
data = np.genfromtxt('岭回归.csv', delimiter=',', skip_header=1, usecols=(1, 2, 3, 4, 5))
#data = data.reshape(data.shape[0], 6)
#print(data.shape)
plt.subplot(211)
plt.plot(data[:, 4])
X = data[:, :4]
y = data[:, 4]
ploy = PolynomialFeatures(6)
X = ploy.fit_transform(X)
train_set_X, test_set_X, train_set_Y, test_set_y = \
model_selection.train_test_split(X, y, test_size=0.3, random_state=0)
clf = Ridge(alpha=1.0, fit_intercept=True)
clf.fit(train_set_X, train_set_Y)
print(clf.score(test_set_X, test_set_y))
start = 200
end = 300
y_pre = clf.predict(X)
time = np.arange(start, end)
plt.subplot(212)
plt.plot(time, y[start:end], 'b', label='real')
plt.plot(time, y_pre[start:end], 'r', label='predict')
plt.legend(loc="upper left")
plt.show()
if __name__ == '__main__':
main()
网友评论