如果数据的特征比样本点还多,数据特征n,样本个数m,如果n>m,则计算 时会出错.因为
不是满秩,所以不可逆
为岭系数, I 为单位矩阵(对角线上全为1 , 其他元素全为 0 )
岭回归数据集,GNP.deflator为预测的值,后面的都是训练的特征
import numpy as np from numpy import genfromtxt from sklearn import linear_model import matplotlib,pyplot as plt # 读取数据 data = genfromtxt(r'data.csv',delimiter = ',') print(data)
# 切分数据 x_data = data[1:,2:] y_data = data[1:,1] # 创建模型 #生成50个值np.linspace(0.001,1,100),最后一个参数是多少个值,默认是50 alphas_to_test = np.linspace(0.001,1) #创建模型,保存误差值 model = linear_model.RidgeCV(alphas_to_test,store_cv_values = True) model.fit(x_data,y_data) # 岭系数 print(model.alpha_) # 0.408..... # loss值 print(model.cv_values_.shape) # (16,50)
model = linear_model.RidgeCV(alphas = alphas_to_test,store_cv_values=True)
alphas = alphas_to_test ,alphas参数为交叉验证,也就是使用时交叉验证法来验证这里面创建的50个值哪一个比较好.
store_cv_values参数为:存储交叉验证后的一些结果
#画图 # 岭系数跟loss值的关系 plt.plot(alphas_to_test,model.cv_values_.mean(axis=0) # 选取的岭系数值的位置 plt.plot(model.alpha_,min(model.cv_values_.mean(axis=0)),'ro') plt.show()
参数:model.cv_values_.mean(axis=0) 为求平均值,axis=0也就是对print(model.cv_values_.shape)
# (16,50) 里面的16来求平均值,axis=1的话就是对50来求
model.predict(x_data[2,np.newaxis]) # 做预测