【发布时间】:2017-11-29 03:32:02
【问题描述】:
我正在尝试在 python 中使用套索回归。 我目前在 scikit-learn 库中使用 lasso 函数。
我希望我的模型在训练时不要惩罚某些变量。 (只惩罚其余的变量)
下面是我当前的训练代码
rg_mdt = linear_model.LassoCV(alphas=np.array(10**np.linspace(0, -4, 100)), fit_intercept=True, normalize=True, cv=10)
rg_mdt.fit(df_mdt_rgmt.loc[df_mdt_rgmt.CLUSTER_ID == k].drop(['RESPONSE', 'CLUSTER_ID'], axis=1), df_mdt_rgmt.loc[df_mdt_rgmt.CLUSTER_ID == k, 'RESPONSE'])
df_mdt_rgmt 是数据集市,我正在尝试将某些列的系数保持为非零。
R 中的 glmnet 提供了让我这样做的“惩罚因子”参数,但我如何在 python scikit-learn 中做到这一点?
下面是我在 R 中的代码
get.Lassomodel <- function(TB.EXP, TB.RSP){
VT.PEN <- rep(1, ncol(TB.EXP))
VT.PEN[which(colnames(TB.EXP) == "DC_RATE")] <- 0
VT.PEN[which(colnames(TB.EXP) == "FR_PRICE_PW_REP")] <- 0
VT.GRID <- 10^seq(0, -4, length=100)
REG.MOD <- cv.glmnet(as.matrix(TB.EXP), as.matrix(TB.RSP), alpha=1,
lambda=VT.GRID, penalty.factor=VT.PEN, nfolds=10, intercept=TRUE)
return(REG.MOD)
}
【问题讨论】:
-
一个不优雅的 hack 可能是缩放和居中所有变量,然后将所有要惩罚的变量乘以 100 之类的大常数(并且不要更改您不想要的变量受到处罚)。由于这些系数会更大,因此正则化将“关注”这些变量
标签: python scikit-learn