线性回归(五)---弹性网络回归

弹性网络回归

弹性网络ElasticNet是同时使用了系数向量的 l1 范数和 l2 范数的线性回归模型,使得可以学习得到类似于Lasso的一个稀疏模型,同时还保留了 Ridge 的正则化属性,结合了二者的优点,尤其适用于有多个特征彼此相关的场合。

主要参数说明

alpha: a值。

fit_intercept:一个布尔值,指定是否需要计算b值。如果为False,那么不计算b值(模型会认为你已经将数据中心化了)。

max_iter:整数值,指定最大迭代次数。

normalize:一个布尔值。如果为True,那么训练样本会在回归之前被归一化。

copy_X:一个布尔值,如果为True,则会复制X值

precompute:一个布尔值或者一个序列。他决定是否提前计算Gram矩阵来加速计算。

tol:一个浮点数,指定判断迭代收敛与否的阈值。

warm_start:一个布尔值,如为True,那么使用前一次训练结果继续训练。否则重头开始训练。

positive:一个布尔值,如为Ture,那么强制要求全中响亮的分量都为整数。

selection:一个字符串,可以为‘cyclic’(更新时候,从前向后一次选择权重向量的一个分量来更新)或者‘random’(随机选择权重向量的一个分量来更新),他指定了当每轮迭代的时候,选择权重向量的一个分量来更新

random_state:一个整数或者一个RandomState实例,或者为None。如果为整数,则他指定了随机数生成器种子。如果为RandomState实例,则指定了随机数生成器。如果为None,则使用默认的随机数生成器。

%config InteractiveShell.ast_node_interactivity = 'all'   #同时输出多行结果
from sklearn.linear_model import ElasticNet
reg = ElasticNet(alpha=1.0, l1_ratio=0.7)
X = [[3], [8]]
y = [1, 2]
reg.fit(X, y)
ElasticNet(alpha=1.0, copy_X=True, fit_intercept=True, l1_ratio=0.7,
  max_iter=1000, normalize=False, positive=False, precompute=False,
  random_state=None, selection='cyclic', tol=0.0001, warm_start=False)   #参数含义和lasso和ridge类似
reg.predict([[6]])
reg.coef_
reg.intercept_

ElasticNet(alpha=1.0, copy_X=True, fit_intercept=True, l1_ratio=0.7,
      max_iter=1000, normalize=False, positive=False, precompute=False,
      random_state=None, selection='cyclic', tol=0.0001, warm_start=False)


ElasticNet(alpha=1.0, copy_X=True, fit_intercept=True, l1_ratio=0.7,
      max_iter=1000, normalize=False, positive=False, precompute=False,
      random_state=None, selection='cyclic', tol=0.0001, warm_start=False)

array([1.54198473])
array([0.08396947])
1.0381679389312977
#修改参数比较结果
reg = ElasticNet(alpha=1.0, l1_ratio=0.3)   # 修改参数,进行对比
reg.fit(X, y)
ElasticNet(alpha=1.0, copy_X=True, fit_intercept=True, l1_ratio=0.3,
  max_iter=1000, normalize=False, positive=False, precompute=False,
  random_state=None, selection='cyclic', tol=0.0001, warm_start=False)
reg.predict([[6]])
reg.coef_
reg.intercept_

ElasticNet(alpha=1.0, copy_X=True, fit_intercept=True, l1_ratio=0.3,
      max_iter=1000, normalize=False, positive=False, precompute=False,
      random_state=None, selection='cyclic', tol=0.0001, warm_start=False)

ElasticNet(alpha=1.0, copy_X=True, fit_intercept=True, l1_ratio=0.3,
      max_iter=1000, normalize=False, positive=False, precompute=False,
      random_state=None, selection='cyclic', tol=0.0001, warm_start=False)

array([1.56834532])
array([0.13669065])
0.748201438848921
#利用IRIS数据集进行弹性网络回归
import pandas  as pd
import numpy  as np
from sklearn.datasets import load_iris
from sklearn import linear_model
from sklearn import metrics
#导入IRIS数据集 
iris = load_iris() 
 #特征矩阵 
X=iris.data 
 #目标向量 
y=iris.target
from sklearn.cross_validation import train_test_split #导入数据划分包
#以20%的数据构建测试样本,剩余作为训练样本
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.20,random_state =1)
elastic= linear_model.ElasticNet(alpha=0.1,l1_ratio=0.5)  # 设置lambda值,l1_ratio值
elastic.fit(X_train,y_train)  #使用训练数据进行参数求解
y_hat2 = elastic.predict(X_test)  #对测试集的预测
print ("RMSE:", np.sqrt(metrics.mean_squared_error(y_test, y_hat2)))  #计算RMSE
ElasticNet(alpha=0.1, copy_X=True, fit_intercept=True, l1_ratio=0.5,
      max_iter=1000, normalize=False, positive=False, precompute=False,
      random_state=None, selection='cyclic', tol=0.0001, warm_start=False)

RMSE: 0.25040264500501913

你可能感兴趣的:(Python)