参考资料:活用pandas库
正则化旨在解决模型的过拟合问题。
在实际中,可能存在模型的训练分数很好,而测试分数却很低,这阐明模型出现了过拟合问题。正则化通过对系数和变量施加束缚来解决模型过拟合的问题。这会导致数据的系数变小。
在LASSO回归的环境下,可以丢弃某些系数;而在岭回归中,系数会趋近于0,但但并不是被丢弃。
- # 导入pandas库
- import pandas as pd
- # 读取数据集
- acs=pd.read_csv(r"...\data\acs_ny.csv")
- # 展示数据列
- print(acs.columns)
- # 使用patsy创建设计矩阵
- from patsy import dmatrices
- response,predictors=dmatrices(
- 'FamilyIncome ~ NumBedrooms + NumChildren + NumPeople + '\
- 'NumRooms + NumUnits + NumVehicles + NumWorkers + OwnRent + '\
- 'YearBuilt + ElectricBill + FoodStamp + HeatingFuel + '\
- 'Insurance + Language',
- data=acs)
- # 使用sklearn 把数据集分为训练集和测试集
- from sklearn.model_selection import train_test_split
- X_train,X_test,y_train,y_test=train_test_split(predictors,
- response,
- random_state=0)
- from sklearn.linear_model import LinearRegression
- lr=LinearRegression().fit(X_train,y_train)
- model_coefs=pd.DataFrame(list(zip(predictors.design_info.column_names,
- lr.coef_[0])),
- columns=['variable','coef_lr'])
- # 展示拟合系数
- print(model_coefs)
- # 查看模型得分
- print(lr.score(X_train,y_train))
- print(lr.score(X_test,y_test))
复制代码 1、LASSO回归
LASSO(least absolute shrinkage and selection operator),也称L1正则化回归。
- # 导入LASSO模块
- from sklearn.linear_model import Lasso
- lasso=Lasso(random_state=0).fit(X_train,y_train)
- coef_lasso=pd.DataFrame(
- list(zip(predictors.design_info.column_names,lasso.coef_)),
- columns=['variable','coef_lasso'])
- model_coefs=pd.merge(model_coefs,coef_lasso,on='variable')
- print(model_coefs)
- print(lasso.score(X_train,y_train))
- print(lasso.score(X_test,y_test))
复制代码 此时有些系数已经变成0。但模型的预测得分并未有显着提拔。
2、岭回归
岭回归,也称L2正则化回归。
- # 导入Ridge模块
- from sklearn.linear_model import Ridge
- ridge=Ridge(random_state=0).fit(X_train,y_train)
- coef_ridge=pd.DataFrame(
- list(zip(predictors.design_info.column_names,ridge.coef_[0])),
- columns=['variable','coef_ridge'])
- model_coefs=pd.merge(model_coefs,coef_ridge,on='variable')
- print(model_coefs)
复制代码 3、弹性网
弹性网结合了岭回归和LASSO回归两种方法。
ElasticNet对象有两个参数——alpha和l1_ratio,可用于控制模型的举动。l1_ratio参数专门控制L2或L1使用的惩罚量。如果l1_ratio=0,则模型为岭回归;如果l1_ratio=1,则模型是LASSO回归。如果l1_ratio的值介于两者时间,则模型就是岭回归和LASSO回归的组合。
- from sklearn.linear_model import ElasticNet
- en=ElasticNet(random_state=42).fit(X_train,y_train)
- coefs_en=pd.DataFrame(
- list(zip(predictors.design_info.column_names,en.coef_)),
- columns=['variable','coef_en'])
- model_coefs=pd.merge(model_coefs,coefs_en,on='variable')
- print(model_coefs)
复制代码 4、交叉验证
交叉验证是拟合模型的常用方法。交叉验证照旧选择末了正则化参数的方法。选择模型时,用户必须调解某些参数(也称“超参数”),这时可以使用交叉验证明验超参数的各种组合,以寻找“最佳模型”。ElasticNet对象的ElasticNetCV函数与之雷同,它可以迭代使用各种超参数值来拟合弹性网。
- from sklearn.linear_model import ElasticNetCV
- en_cv=ElasticNetCV(cv=5,random_state=42).fit(X_train,y_train)
- coefs_en_cv=pd.DataFrame(
- list(zip(predictors.design_info.column_names,en_cv.coef_)),
- columns=['variable','coef_en_cv'])
- models_coefs=pd.merge(model_coefs,coefs_en_cv,on='variable')
- print(model_coefs)
复制代码 正则化是一种用来防止数据过度拟合的技能,它通过添加到模型中的每个特性施加一些惩罚来实现该目的。最终结果是从模型中删除一些变量,或减少模型的系数。这两种方法都会低落模型对训练数据的拟合准确度,却能大大提拔对未知数据的预测能力。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |