岭回归(Ridge Regression)
如果数据的特征比样本点还多,数据特征n,样本个数m,如果n>m,则计算(XTX)的逆矩阵时会出错,因为(XTX)不是满秩矩阵,所以不可逆。(注:XT表示X的转置矩阵)
岭回归是有偏估计
岭回归代价函数这里就不贴了
选取λ值使得:
1.各回归系数的岭估计基本稳定;
2.残差平方和增大不多。
import numpy as np
from numpy import genfromtxt
from sklearn import linear_model
import matplotlib.pyplot as plt
# 导入数据
data = np.genfromtxt("C:\\ML\\chapter-1\\longley.csv",delimiter=",") # 这种方法只能读取数字,不能读取字符,字符会变成nan
print(data)
# 切分数据
x_data = data[1:,2:]
y_data = data[1:,1]
print(x_data)
print(y_data)
# 创建模型
# 生成50个值
alphas_to_test = np.linspace(0.001,1) # 默认是50,均匀变大
# 创建模型,保存误差值
model = linear_model.RidgeCV(alphas=alphas_to_test,store_cv_values=True)
model.fit(x_data,y_data)
# 岭系数
print(model.alpha_)
# loss值
print(model.cv_values_.shape)
# 画图
# 岭系数跟loss值的关系
plt.plot(alphas_to_test,model.cv_values_.mean(axis=0)) # axis=0代表方向
# 获取的岭系数值的位置
plt.plot(model.alpha_,min(model.cv_values_.mean(axis=0)),'ro')
plt.show()
print(model.predict(x_data[2,np.newaxis])) # x_data的带三行数据,是一维的,np.newaxis将其变为二维的,得到预测结果