基于惩罚项的特征选择法

惩罚项的基模型,除了筛选出特征外,同时也进行了降维。使用feature_selection库的SelectFromModel类结合带L1惩罚项的逻辑回归模型,来选择特征的代码如下:

from sklearn.feature_selection import SelectFromModel
from sklearn.linear_model import LogisticRegression
#带L1惩罚项的逻辑回归作为基模型的特征选择
SelectFromModel(LogisticRegression(penalty="l1", C=0.1)).fit_transform(iris.data, iris.target)

实际上,L1惩罚项降维的原理在于保留多个对目标值具有同等相关性的特征中的一个,所以没选到的特征不代表不重要。故,可结合L2惩罚项来优化。具体操作为:若一个特征在L1中的权值为1,选择在L2中权值差别不大且在L1中权值为0的特征构成同类集合,将这一集合中的特征平分L1中的权值,故需要构建一个新的逻辑回归模型。

from sklearn.linear_model import LogisticRegression
class LR(LogisticRegression):def __init__(self, threshold=0.01, dual=False, tol=1e-4, C=1.0,fit_intercept=True, intercept_scaling=1, class_weight=None,random_state=None, solver='liblinear', max_iter=100,multi_class='ovr', verbose=0, warm_start=False, n_jobs=1):#权值相近的阈值self.threshold = thresholdLogisticRegression.__init__(self, penalty='l1', dual=dual, tol=tol, C=C,fit_intercept=fit_intercept, intercept_scaling=intercept_scaling, class_weight=class_weight,random_state=random_state, solver=solver, max_iter=max_iter,multi_class=multi_class, verbose=verbose, warm_start=warm_start, n_jobs=n_jobs)#使用同样的参数创建L2逻辑回归self.l2 = LogisticRegression(penalty='l2', dual=dual, tol=tol, C=C, fit_intercept=fit_intercept, intercept_scaling=intercept_scaling, class_weight = class_weight, random_state=random_state, solver=solver, max_iter=max_iter, multi_class=multi_class, verbose=verbose, warm_start=warm_start, n_jobs=n_jobs)def fit(self, X, y, sample_weight=None):#训练L1逻辑回归super(LR, self).fit(X, y, sample_weight=sample_weight)self.coef_old_ = self.coef_.copy()#训练L2逻辑回归self.l2.fit(X, y, sample_weight=sample_weight)cntOfRow, cntOfCol = self.coef_.shape#权值系数矩阵的行数对应目标值的种类数目for i in range(cntOfRow):for j in range(cntOfCol):coef = self.coef_[i][j]#L1逻辑回归的权值系数不为0if coef != 0:idx = [j]#对应在L2逻辑回归中的权值系数coef1 = self.l2.coef_[i][j]for k in range(cntOfCol):coef2 = self.l2.coef_[i][k]#在L2逻辑回归中,权值系数之差小于设定的阈值,且在L1中对应的权值为0if abs(coef1-coef2) < self.threshold and j != k and self.coef_[i][k] == 0:idx.append(k)#计算这一类特征的权值系数均值mean = coef / len(idx)self.coef_[i][idx] = meanreturn self

使用feature_selection库的SelectFromModel类结合带L1以及L2惩罚项的逻辑回归模型,来选择特征的代码如下:

from sklearn.feature_selection import SelectFromModel
#带L1和L2惩罚项的逻辑回归作为基模型的特征选择
#参数threshold为权值系数之差的阈值
SelectFromModel(LR(threshold=0.5, C=0.1)).fit_transform(iris.data, iris.target)

L1正则化进行特征选择相关推荐

  1. L1正则化和L2正则化的直观解释

    正则化(Regularization) 机器学习中几乎都可以看到损失函数后面会添加一个额外项,常用的额外项一般有两种,一般英文称作ℓ1ℓ1-norm,中文称作L1正则化和L2正则化,或者L1范数和L2 ...

  2. L1正则化和L2正则化的详细直观解释

    正则化(Regularization) 转自:此处 机器学习中几乎都可以看到损失函数后面会添加一个额外项,常用的额外项一般有两种,一般英文称作ℓ1ℓ1-norm和ℓ2ℓ2-norm,中文称作L1正则化 ...

  3. 【Python-ML】SKlearn库L1正则化特征选择

    # -*- coding: utf-8 -*- ''' Created on 2018年1月17日 @author: Jason.F @summary: Scikit-Learn库逻辑斯蒂L1正则化- ...

  4. L1正则化与嵌入式特征选择(稀疏性)

    岭回归的历史可追溯到1943年由A.Tikhonov发表在<苏联科学院院刊>上的一篇文章,我们知道计算机是在1946年发明出来的,由此可见,这是一个历史悠久的算法,至今依旧有生命力,属于经 ...

  5. 为什么L1正则化会有稀疏性?为什么L1正则化能进行内置特征选择?

    # 个人认为,这两个应该是同一个问题. 首先给大家推荐一个比较直观地搞懂L1和L2正则化的思考,有视频有图像,手动赞! https://zhuanlan.zhihu.com/p/25707761 当然 ...

  6. 【机器学习】L1正则化与L2正则化详解及解决过拟合的方法

    在详细介绍L1与L2之前,先讲讲正则化的应用场景. 正则化方法:防止过拟合,提高泛化能力 所谓过拟合(over-fitting)其实就是所建的机器学习模型或者是深度学习模型在训练样本中表现得过于优越, ...

  7. L1正则化和L2正则化(从解空间角度)

    文章目录 一.什么是过拟合? 二.为什么模型会过拟合? 三.如何防止模型过拟合? 四.L1正则和L2正则 4.1 L1.L2的区别 4.2 为什么正则化能够防止过拟合? 4.3 为什么L1正则具有稀疏 ...

  8. L1正则化与L2正则化

    1.1-范数,2-范数 1-范数: 2-范数:2-范数就是通常意义下的距离 2.L1和L2正则化 我们所说的正则化,就是在原来的loss function的基础上,加上了一些正则化项或者称为模型复杂度 ...

  9. 正则项的原理、梯度公式、L1正则化和L2正则化的区别、应用场景

    先对"L1正则化和L2正则化的区别.应用场景"给出结论,具体见后面的原理解释: L1正则化会产生更稀疏的解,因此基于L1正则化的学习方法相当于嵌入式的特征选择方法. L2正则化计算 ...

最新文章

  1. vb初学者编程代码大全_学习VB编程第14天,一个简单的排序代码把我难住了
  2. how to undo git commit
  3. SAP Marketing Cloud的技术架构
  4. 服务器是什么系统_服务器自愈路由系统、单线以及BGP多线的区别是什么?
  5. Java @FunctionalInterface注解
  6. PB 循环删除树的所有根节点
  7. 我的是50M宽带,速度有5M/s,难道是百度网盘不给力?
  8. gjrand 4.0 发布,C语言的伪随机数生成器
  9. ffmpeg之PCM转AAC
  10. 如何让元素支持 height:100%效果
  11. mysql无法修改表字段
  12. 妹妹呀,哥也是第一次当哥哥!
  13. Poi操作Excel,保留格式的情况下插入行
  14. NSIS 头文件介绍_WordFunc.nsh(3)
  15. 典型的多层神经网络模型,神经网络多传感器融合
  16. 阿里云ECS CentOS 7 安装图形化桌面
  17. iOS-OC-自定义融云IM聊天界面,键盘收回去输入工具栏下去
  18. ava基础知识02-
  19. 2017CCF大数据学术会议大数据智能分析分论坛成功举办
  20. 软件测试中用正交实验法设计测试用例

热门文章

  1. 笔记 | 产品经理必懂的技术(五)
  2. 提取节点最大应力应变方法(APDL)
  3. Mac端口5000被ControlCe占用问题解决方法
  4. Execute JavaScript
  5. 百万冲顶 获取复活币
  6. JavaSE 和 Java EE 分别是什么
  7. linux shell 中数组的定义和for循环遍历
  8. 多余文字隐藏用省略号代替
  9. 在vscode中加参数调试-python
  10. android微信群聊功能,Android仿微信群聊头像效果