基于ElasticNetCV的回归分析

弹性网络正则化(Elastic Net Rerularization)是一种降低回归分析的过拟合风险的方法。弹性网络正则化实际上是LASSO(The Least Shrinkage and Selection)算法和岭回归算法的现象组合。LASSO可以有效约束L1范数或曼哈顿距离。L1范数是指对于两点来说,他们坐标值之差的绝对值之和。岭回归算法用L1范数的平方作为惩罚项。
定义一个ElasticNetCV对象

clf=ElasticNetCV(max_iter=200,cv=10,l1_ratio=.1)

以上代码中的ElasticNetCV类使用了一个l1_ratio的参数,其取值为0-1,若是0,则只是用岭回归算法,若是1,则只使用LASSO算法。这个参数可以是一个单个数值,也可以是以个数值列表。
下面分别使用之前预处理的降雨数据和加利福利亚州的房价数据进行预测分析。
对于降雨数据,其得分为

Scores 0.05276796268304984

发现拟合效果不好,产生了欠拟合现象。从图中也可看出

而对于房价数据有

Scores 0.5606109126805701

完整代码如下

"XU YONG KANG"
from sklearn.linear_model import ElasticNetCV
import numpy as np
from sklearn import datasets
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_california_housing

def regress(x,y,title):
    clf=ElasticNetCV(max_iter=200,cv=10,l1_ratio=.1)
    clf.fit(x,y)
    print('Scores',clf.score(x,y))

    pred=clf.predict(x)
    plt.title('Scatter plot of prediction and '+title)
    plt.xlabel('Prediction')
    plt.ylabel('Target')
    plt.scatter(y,pred,color='red')
    plt.plot(y,y,label='Fit')
    plt.legend()
    plt.grid(True)
    plt.show()

rain=.1*np.load('rain.npy')
rain[rain<0]=0.05/2
dates=np.load('doy.npy')

x=np.vstack((dates[:-1],rain[:-1]))
y=rain[1:]
regress(x.T,y,'rain data')

housing = fetch_california_housing()
x=housing.data
y=housing.target
regress(x,y,'California house prices')
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值