200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 线性回归(五)---弹性网络回归

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

时间:2021-06-28 07:27:40

相关推荐

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

弹性网络回归

弹性网络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 ElasticNetreg = 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.74838848921

#利用IRIS数据集进行弹性网络回归import pandas as pdimport numpy as npfrom sklearn.datasets import load_irisfrom sklearn import linear_modelfrom sklearn import metrics#导入IRIS数据集 iris = load_iris() #特征矩阵 X=iris.data #目标向量 y=iris.targetfrom 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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。