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))}])结果如下所示:
可以看出如果只是针对训练模型的精度,最乐观的绿茶乘法是要优于岭回归的,但是对新的数据作出预测时,也就是考虑模型的泛化能力上,可以看出岭回归的模型得分比最乐观的绿茶乘法要好一点。
我们通过一个折线图来更直观地表现上面的数据:
结果如下所示:
可以看出岭回归模型在模型的简单性(系数都接近于0)与训练集性能之间作出权衡。简单性和训练性能二者对于模型的重要程度可以由用户通过设置aplha参数来制定。增大alpha会使得系数更加趋向于0,从而降低训练集性能,但会提高泛化性能。
而且无论是岭回归还是线性回归,所有数据集大小对应的训练分数都要高于预测分数。由于岭回归是正则化的,所以它的训练分数要整体低于线性回归的训练分数。但岭回归的测试分数高,特别是对于较小的数据集。如果数据量小于一定程度的时候,线性回归将学不到任何内容,随着模型可用数据越来越多,两个模型的性能都在提升,最终线性回归的性能追上了岭回归。所以如果有足够多的训练内容,正则化变得不那么重要,并且岭回归和线性回归将具有相同的性能。
个人博客:https://www.yyb705.com/
欢迎大家来我的个人博客逛一逛,里面不仅有技术文,也有系列书籍的内化笔记。
有很多地方做的不是很好,欢迎网友来提出建议,也希望可以遇到些朋友来一起交流讨论。
版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。