5 LASSO回归
5.1 简介
LASSO回归:在模型迭代过程所依据的代价函数中增加了正则惩罚项(L1范数正则化),以限制模型参数对异常样本的匹配程度,进而提高模型面对多数正常样本的拟合精度,解决过拟合问题
成本函数:
说明:λ>0
- L1范数:向量中的各个元素绝对值之和
- 规则强度λ(惩罚因子)越大,曲线的拟合度越低,忽略异常样本(噪声)的效果越好。
5.2 Sklearn之LASSO回归
LASSO回归相关API:
# sklearn库
import sklearn.linear_model as lm
# 创建模型
model=lm.Lasso(正则强度,fit_intercept=是否训练截距,max_iter=最大迭代次数,normalize=是否特征归一化)
# 训练模型
# 输入:一个二维数组表示的样本矩阵
# 输出:每个样本最终的结果
model.fit(输入,输出)
# 预测输出
# 输入array是一个二维数组,每一行是一个样本,每一列是一个特征
result=model.predict(array)
案例:加载abnormal.txt文件中的数据,基于LASSO回归算法训练回归模型
import numpy as np
import matplotlib.pyplot as plt
# sklearn库
import sklearn.linear_model as lm
# 加载数据:读文本
def loaddata():
# x,y=np.loadtxt("data/abnormal.txt",delimiter=",",unpack=True)
data=np.loadtxt("data/abnormal.txt",delimiter=",")
cols=data.shape[1] # data.shape[1]:列数
x=data[:,0:cols-1]
y=data[:,-1].reshape(-1,1) # data[:,-1]:获取所有行的最后一列
return x,y
x,y=loaddata()
## LASSO回归
model=lm.Lasso(0.01,fit_intercept=True,max_iter=1000,normalize=True) # 模型构建
model.fit(x,y) # 模型训练
print("\n")
print("系数:",model.coef_)
print("截距:",model.intercept_)
pred_y=model.predict(x) # 模型预测
plt.title("modelLASSO Regression")
plt.scatter(x,y)
plt.plot(x,pred_y)
6 ElasticNet(弹性网)
6.1 简介
ElasticNet(弹性网):在模型迭代过程所依据的代价函数中结合了L1范数正则化与L2范数正则化,以限制模型参数对异常样本的匹配程度,进而提高模型面对多数正常样本的拟合精度,解决过拟合问题
成本函数:
说明:λ>0,0≤ρ≤1(权重占比)
- L1范数:向量中的各个元素绝对值之和
- L2范数:向量中的各个元素平方之和
- 规则强度λ(惩罚因子)越大,曲线的拟合度越低,忽略异常样本(噪声)的效果越好。
5.2 Sklearn之ElasticNet
ElasticNet相关API:
# sklearn库
import sklearn.linear_model as lm
# 创建模型
model=lm.ElasticNet(正则强度,l1_ratio=L1正则惩罚项权重占比,fit_intercept=是否训练截距,max_iter=最大迭代次数,normalize=是否特征归一化)
# 训练模型
# 输入:一个二维数组表示的样本矩阵
# 输出:每个样本最终的结果
model.fit(输入,输出)
# 预测输出
# 输入array是一个二维数组,每一行是一个样本,每一列是一个特征
result=model.predict(array)
案例:加载abnormal.txt文件中的数据,基于ElasticNet训练回归模型
import numpy as np
import matplotlib.pyplot as plt
# sklearn库
import sklearn.linear_model as lm
# 加载数据:读文本
def loaddata():
# x,y=np.loadtxt("data/abnormal.txt",delimiter=",",unpack=True)
data=np.loadtxt("data/abnormal.txt",delimiter=",")
cols=data.shape[1] # data.shape[1]:列数
x=data[:,0:cols-1]
y=data[:,-1].reshape(-1,1) # data[:,-1]:获取所有行的最后一列
return x,y
x,y=loaddata()
## ElasticNet(弹性网)
model4=lm.ElasticNet(0.01,l1_ratio=0.2,fit_intercept=True,max_iter=1000,normalize=True) # 模型构建
model4.fit(x,y) # 模型训练
print("\n")
print("系数:",model4.coef_)
print("截距:",model4.intercept_)
pred_y=model4.predict(x) # 模型预测
plt.title("ElasticNet")
plt.scatter(x,y)
plt.plot(x,pred_y)
文章出处登录后可见!
已经登录?立即刷新