首页 > 编程知识 正文

岭回归与lasso回归的区别,岭回归结果解读

时间:2023-05-06 21:24:45 阅读:136738 作者:1001

python岭回归算法的回归实操基本概念正则化

正则化表示明确约束模型以避免过拟合。 本文使用的岭回归是L2正则化。 (从数学角度来看,岭回归惩罚了系数的L2范数或w的欧式长度) ) )。

正则化的具体原理在这里就不多讲了,感兴趣的朋友可以读一下这篇文章。 是机器学习中正则化项L1和L2的直观理解。

个人资料岭回归

岭回归也是回归的线性模型,所以其模型公式与最乐观的绿茶乘法相同,为:

y=w [0] * x [0] w [1] * x [1] w [2] x [2]…w [ p ] x [ p ] b

但在岭回归中,系数w的选取不仅要在训练数据上取得较好的预测结果,而且要拟合附加约束。 也就是说,w的所有元素都应该接近0。 直观地看,这意味着各特征对输出的影响尽可能小,即斜率小,同时给出了较好的预测结果,该约束为正则化

资料来源波士顿房价: https://www.ka ggle.com/alta vish/Boston-housing-dataset

是非常典型的数据

简单说明这个数据的几个主要指标:

Zn:25,000平方英尺以上的土地成为住宅用地的比例。

RM :每户平均房间数。

AGE:1940年前建造的房子比例

CHAS :河流是否通过(如果等于1,则表示有,如果等于0,则表示没有) )。

CRIM :犯罪率

MEDV :住宅价格

其他指标当然是一些住宅的其他指标,感兴趣的小伙伴可以自己调查一下。

数据挖掘1.导入第三方库

importpandasaspdimportnumpyasnpimportwinregfromsklearn.model _ selectionimporttrain _ test _ splitfromsklearn.linear _ linear

2.读取文件

importwinregreal _ address=winreg.openkey (winreg.HKEY _ current _ user,r ' softwareMicrosoft windows _ Cu Cu Cu curey ) ' Desktop ' ) [0]file_address=' _file_origin=HousingData.csv'#用于设置源数据文件的桌面绝对路径的house _ price=PD.read _ CSV (file _ origin ) # 33330 我通过winreg库,设置了绝对的桌面路径,只需将数据下载到桌面上,或者粘贴到桌面上的特定文件夹中进行读取即可,不会与其他数据混淆。

其实到这一步是走流程的。 基本上每次数据挖掘都来一次。 没什么好说的。

3.清洗数据

1 .查找缺少的值

可以看到这个数据,包括几个缺失值,不是很多,直接删除就可以了。

house _ price1=house _ price.drop na (.reset _ index ) ) del house_price1['index'] 2.突变值搜索

一般看特征值中是否包含等于零的数据。 其实简言之,就是要看数据中是否含有不符合实际的数值。 例如,没有像犯罪率那样实际犯罪率为0的区域。 从以上结果来看,这个数据没有其他问题。

该数据中的ZN和CHAS都使用0和1作为指标,因此通常包含0。

4.建模

train=house_price1.drop('medv ',axis=1) X_train,X_test,y_train,y_test=train_test_ )。 确定ridge=ridge(alpha=10 ) #约束参数ridge.fit (y_train,y _ train ) print ) (岭回归训练模型得分(str ) R2_score )

得分:"+str(r2_score(y_test,ridge.predict(X_test))))#待测集

引入ridge算法,进行建模后,对测试集进行精度评分,得到的结果如下:

可以看到,该模型的训练精度为79%左右,对于新的数据来说,模型精度在63%左右。
至此,这个数据集的将建模就算是完成了。

讨论

1.参数的讨论

由于岭回归与线性回归(最乐观的绿茶乘法)的模型公式是一样的,所以这里我们与线性回归做一个比较。不了解线性回归的朋友可以看一下我的另一篇文章:最乐观的绿茶乘算法之回归实操

之前我们设立的约束参数是10,而上面模型参数设的是0,可以看出模型的训练精度有所提高,但泛化能力有所降低。同时与线性回归模型相比,二者的分数是完全一样的。所以,当岭回归的约束参数设为0时,失去约束的岭回归与普通最乐观的绿茶乘法就是同一个算法。

2.与普通最乐观的绿茶乘法的比较

我们通过变换约束参数的取值,来具体看一下岭回归与普通最乐观的绿茶乘法的优缺点。

result_b=pd.DataFrame(columns=["参数","岭回归训练模型得分","岭回归待测模型得分","线性回归训练模型得分","线性回归待测模型得分"])train=house_price1.drop(["MEDV"],axis=1)X_train,X_test,y_train,y_test=train_test_split(train,house_price1["MEDV"],random_state=23)for i in range(21): alpha=i/10#约定参数可以选定为小数 ridge=Ridge(alpha=alpha) ridge.fit(X_train,y_train) linear=LinearRegression() linear.fit(X_train,y_train) result_b=result_b.append([{"参数":alpha,"岭回归训练模型得分":r2_score(y_train,ridge.predict(X_train)),"岭回归待测模型得分":r2_score(y_test,ridge.predict(X_test)),"线性回归训练模型得分":r2_score(y_train,linear.predict(X_train)),"线性回归待测模型得分":r2_score(y_test,linear.predict(X_test))}])

结果如下所示:

可以看出如果只是针对训练模型的精度,最乐观的绿茶乘法是要优于岭回归的,但是对新的数据作出预测时,也就是考虑模型的泛化能力上,可以看出岭回归的模型得分比最乐观的绿茶乘法要好一点。
我们通过一个折线图来更直观地表现上面的数据:

import matplotlib.pyplot as pltimport seaborn as snsplt.style.use("fivethirtyeight")sns.set_style({'font.sans-serif':['SimHei','Arial']})#设定汉字字体,防止出现方框%matplotlib inline#在jupyter notebook上直接显示图表fig= plt.subplots(figsize=(15,5))plt.plot(result_b["参数"],result_b["岭回归训练模型得分"],label="岭回归训练模型得分")#画折线图plt.plot(result_b["参数"],result_b["岭回归待测模型得分"],label="岭回归待测模型得分")plt.plot(result_b["参数"],result_b["线性回归训练模型得分"],label="线性回归训练模型得分")plt.plot(result_b["参数"],result_b["线性回归待测模型得分"],label="线性回归待测模型得分")plt.rcParams.update({'font.size': 12})plt.legend()plt.xticks(fontsize=15)#设置坐标轴上的刻度字体大小plt.yticks(fontsize=15)plt.xlabel("参数",fontsize=15)#设置坐标轴上的标签内容和字体plt.ylabel("得分",fontsize=15)

结果如下所示:

可以看出岭回归模型在模型的简单性(系数都接近于0)与训练集性能之间作出权衡。简单性和训练性能二者对于模型的重要程度可以由用户通过设置aplha参数来制定。增大alpha会使得系数更加趋向于0,从而降低训练集性能,但会提高泛化性能。

而且无论是岭回归还是线性回归,所有数据集大小对应的训练分数都要高于预测分数。由于岭回归是正则化的,所以它的训练分数要整体低于线性回归的训练分数。但岭回归的测试分数高,特别是对于较小的数据集。如果数据量小于一定程度的时候,线性回归将学不到任何内容,随着模型可用数据越来越多,两个模型的性能都在提升,最终线性回归的性能追上了岭回归。所以如果有足够多的训练内容,正则化变得不那么重要,并且岭回归和线性回归将具有相同的性能。

个人博客:https://www.yyb705.com/
欢迎大家来我的个人博客逛一逛,里面不仅有技术文,也有系列书籍的内化笔记。
有很多地方做的不是很好,欢迎网友来提出建议,也希望可以遇到些朋友来一起交流讨论。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。