涛声依旧在 发表于 2024-6-28 16:04:31

python数据分析——正则化

参考资料:活用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_)),
                     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_)),
    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企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: python数据分析——正则化