回归
目录
标准方程法之岭回归
sklearn之岭回归
标准方程法之岭回归
这个数是我们在用标准方程法求线性回归时所求出来需要求解的数,但是如果数据的特征比样本点还多,那么在计算时,就会出错,因为不是满秩矩阵,所以不可逆。为了解决此问题,所以引入了岭回归概念。
岭回归最早是用来处理特征数多于样本的情况,现在也用于在估计中加入偏差,从而得到更好的估计。同时也可以解决多重共线性的问题。岭回归是一种有偏估计。 岭回归代价函数: 将代价函数写成矩阵形式,然后对参数求导,令求导的倒数等于0,求出参数的表达式代码实现如下:
- 将需要用到的包导入
import numpy as np
from numpy import genfromtxt
import matplotlib.pyplot as plt
%matplotlib inline
- 将数据导入
data = np.genfromtxt('longley.csv',delimiter = ',')
print(data)
- 将数据进行处理,添加偏执
#切分数据
x_data = data[1:,2:]
y_data = data[1:,1,np.newaxis]print(x_data)
print(y_data)#添加偏执
X_data = np.concatenate((np.ones((16,1)),x_data),axis = 1)
print(X_data.shape)
- 标准方程法求解岭回归
#岭回归标准方程法实现
def Stand_equation(Xarr,Yarr,len =0.2):Xmat = np.mat(Xarr)Ymat = np.mat(Yarr)xTx = Xmat.T*XmatxTxt = xTx + np.eye(Xarr.shape[1])*lenif np.linalg.eig(xTxt) == 0.0:returnws = xTxt.I * Xmat.T * Ymatreturn ws
- 调用岭回归函数
w = Stand_equation(X_data,y_data)
print(w)
- 计算预测值
#计算预测值
np.mat(X_data) * np.mat(w)
通过岭回归,训练出来的预测值如下
我们给出的数据真实值如下
通过上述对比,我们可以看出两组数据非常接近,这就表示我们的模型已经训练好了!
sklearn之岭回归
代码实现如下:
- 需要用到的库导入
import numpy as np
from numpy import genfromtxt
from sklearn import linear_model
import matplotlib.pyplot as plt
%matplotlib inline
- 将数据导入,对数据进行处理
data = np.genfromtxt(r'longley.csv',delimiter=',')
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) #默认生成从0.001到1 的50个数 要生成100个数可写成(0.001,1,100)
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)
- 做预测
model.predict(x_data[-2,np.newaxis])
上边的代码表示我们对x_data的倒数第2行数据进行预测,它的真实值对应的是y_data的倒数第二个数据,由上边的数值图我们可以看到真实值为115.7,我们的预测结果显示
数值很接近,模型训练成功!
回归
目录
标准方程法之岭回归
sklearn之岭回归
标准方程法之岭回归
这个数是我们在用标准方程法求线性回归时所求出来需要求解的数,但是如果数据的特征比样本点还多,那么在计算时,就会出错,因为不是满秩矩阵,所以不可逆。为了解决此问题,所以引入了岭回归概念。
岭回归最早是用来处理特征数多于样本的情况,现在也用于在估计中加入偏差,从而得到更好的估计。同时也可以解决多重共线性的问题。岭回归是一种有偏估计。 岭回归代价函数: 将代价函数写成矩阵形式,然后对参数求导,令求导的倒数等于0,求出参数的表达式代码实现如下:
- 将需要用到的包导入
import numpy as np
from numpy import genfromtxt
import matplotlib.pyplot as plt
%matplotlib inline
- 将数据导入
data = np.genfromtxt('longley.csv',delimiter = ',')
print(data)
- 将数据进行处理,添加偏执
#切分数据
x_data = data[1:,2:]
y_data = data[1:,1,np.newaxis]print(x_data)
print(y_data)#添加偏执
X_data = np.concatenate((np.ones((16,1)),x_data),axis = 1)
print(X_data.shape)
- 标准方程法求解岭回归
#岭回归标准方程法实现
def Stand_equation(Xarr,Yarr,len =0.2):Xmat = np.mat(Xarr)Ymat = np.mat(Yarr)xTx = Xmat.T*XmatxTxt = xTx + np.eye(Xarr.shape[1])*lenif np.linalg.eig(xTxt) == 0.0:returnws = xTxt.I * Xmat.T * Ymatreturn ws
- 调用岭回归函数
w = Stand_equation(X_data,y_data)
print(w)
- 计算预测值
#计算预测值
np.mat(X_data) * np.mat(w)
通过岭回归,训练出来的预测值如下
我们给出的数据真实值如下
通过上述对比,我们可以看出两组数据非常接近,这就表示我们的模型已经训练好了!
sklearn之岭回归
代码实现如下:
- 需要用到的库导入
import numpy as np
from numpy import genfromtxt
from sklearn import linear_model
import matplotlib.pyplot as plt
%matplotlib inline
- 将数据导入,对数据进行处理
data = np.genfromtxt(r'longley.csv',delimiter=',')
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) #默认生成从0.001到1 的50个数 要生成100个数可写成(0.001,1,100)
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)
- 做预测
model.predict(x_data[-2,np.newaxis])
上边的代码表示我们对x_data的倒数第2行数据进行预测,它的真实值对应的是y_data的倒数第二个数据,由上边的数值图我们可以看到真实值为115.7,我们的预测结果显示
数值很接近,模型训练成功!