Lasso sklearn 中的选项 normalize = True 有何作用?

2023-12-02

我有一个矩阵,其中每列的平均值为 0,标准差为 1

In [67]: x_val.std(axis=0).min()
Out[70]: 0.99999999999999922

In [71]: x_val.std(axis=0).max()
Out[71]: 1.0000000000000007

In [72]: x_val.mean(axis=0).max()
Out[72]: 1.1990408665951691e-16

In [73]: x_val.mean(axis=0).min()
Out[73]: -9.7144514654701197e-17

如果我使用归一化选项,非 0 系数的数量会发生变化

In [74]: l = Lasso(alpha=alpha_perc70).fit(x_val, y_val)

In [81]: sum(l.coef_!=0)
Out[83]: 47

In [84]: l2 = Lasso(alpha=alpha_perc70, normalize=True).fit(x_val, y_val)

In [93]: sum(l2.coef_!=0)
Out[95]: 3

在我看来,归一化只是将每列的方差设置为 1。结果变化如此之大,这很奇怪。我的数据已经有方差=1。

那么,normalize=T 实际上是做什么的呢?


这是由于缩放概念中的(或潜在的[1])不一致造成的。sklearn.linear_model.base.center_data: If normalize=True,然后它将除以norm设计矩阵的每一列,而不是由标准差。对于它的价值,关键字normalize=True将从 sklearn 0.17 版开始弃用。

Solution: Do not use standardize=True。相反,建立一个sklearn.pipeline.Pipeline并在前面添加一个sklearn.preprocessing.StandardScaler给你的Lasso目的。这样您甚至不需要执行初始缩放。

请注意,Lasso 的 sklearn 实现中的数据丢失项按比例缩放n_samples。因此,产生零解的最小惩罚是alpha_max = np.abs(X.T.dot(y)).max() / n_samples (for normalize=False).

[1] 我说潜在的不一致,因为正常化与该词相关联norm因此至少在语言上是一致的:)

[如果您不想了解详细信息,请停止阅读]

这是一些复制和粘贴的代码,重现了问题

import numpy as np
rng = np.random.RandomState(42)

n_samples, n_features, n_active_vars = 20, 10, 5
X = rng.randn(n_samples, n_features)
X = ((X - X.mean(0)) / X.std(0))

beta = rng.randn(n_features)
beta[rng.permutation(n_features)[:n_active_vars]] = 0.

y = X.dot(beta)

print X.std(0)
print X.mean(0)

from sklearn.linear_model import Lasso

lasso1 = Lasso(alpha=.1)
print lasso1.fit(X, y).coef_

lasso2 = Lasso(alpha=.1, normalize=True)
print lasso2.fit(X, y).coef_

为了了解发生了什么,现在观察一下

lasso1.fit(X / np.sqrt(n_samples), y).coef_ / np.sqrt(n_samples)

等于

lasso2.fit(X, y).coef_

因此,缩放设计矩阵并适当地重新缩放系数np.sqrt(n_samples)将一种模型转换为另一种模型。这也可以通过对惩罚进行操作来实现:套索估计器normalize=True其处罚缩小了np.sqrt(n_samples)其作用类似于套索估计器normalize=False(关于您的数据类型,即已经标准化为std=1).

lasso3 = Lasso(alpha=.1 / np.sqrt(n_samples), normalize=True)
print lasso3.fit(X, y).coef_  # yields the same coefficients as lasso1.fit(X, y).coef_
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Lasso sklearn 中的选项 normalize = True 有何作用? 的相关文章

随机推荐

  • 检查输入是否为整数

    为了学习 C 我正在翻译我用 Python 编写的程序 我写了这个 n 0 while n lt 2 try n int raw input Please insert an integer bigger than 1 except Val
  • Java:计算三角形的面积

    import java lang Math import java awt public class Triangle implements Shape java awt Point a java awt Point b java awt
  • 如何在邮件服务器上的 HTML 电子邮件中嵌入图像?

    如何在 HTML 中嵌入图像 以便图像与 html 文件内容一起传递 而不需要单独访问服务器来检索图像 我们需要它在签名离开邮件服务器之前将公司徽标嵌入到签名中 我们不想使用雷鸟或 Outlook 等客户端解决方案来添加签名 thanks
  • Google 身份服务 - 保持登录状态

    我正在从 Google 登录平台库迁移到新的 Google 身份服务使用一键登录 但当用户刷新或转到其他页面时 网站会自动注销用户 这是加载一键登录的每个页面上都存在的代码 div div 删除它只会让用户退出 无法重新登录 有一个cook
  • Google App Engine - 如何扩展 db.IntegerProperty

    当我在整数和字符串之间交换很多时 我希望扩展 db IntegerProperty 以下是一些代码片段和我在应用程序启动器日志中收到的错误消息 有什么指点吗 谢谢 大卫 class FSIdProperty db IntegerProper
  • 仅 CSS 动画绘制具有边框半径和透明背景的圆

    我正在尝试绘制一个具有边框半径的圆 并为其设置动画 我可以做到这一点 但我不能做的是覆盖元素并将圆圈背景设置为透明 而不取消隐藏蒙版 我无法使其在元素上透明 因为需要应用遮罩来隐藏圆圈的左半部分 因为它旋转以模仿绘制效果 HTML div
  • Android Studio 构建失败,并显示“在根项目 'MyProject' 中未找到任务 ''”。

    在更换笔记本电脑并更新到 Android Studio 版本 0 8 2 后尝试构建项目时 我收到此错误 失败 构建失败并出现异常 什么地方出了错 在根项目 MyProject 中找不到任务 尝试 运行 gradle 任务以获取可用任务的列
  • 远程网络驱动程序上的 Chrome(通过网格)无法启动

    我在使用 Grid 上的远程 Webdriver 功能 1 个 Linux 集线器和 1 个带有 Firefox 和 Chrome 的 Linux 节点 启动 Chrome 的 Cucumber 测试时遇到问题 Firefox 测试进行得很
  • 使用 EaselJS 在 html5 画布中绘制一条线

    我对 Easel 和 HTML5 本身非常陌生 我正在尝试使用 EaselJS 在画布上画一条线 X 坐标固定为 100 Y 坐标从数组列表中获取 我编写的代码如下 有人可以让我知道我哪里出错了吗 function myFunction a
  • Android Wear-如何捕获触摸事件

    我想捕获Android Wear上的触摸事件 我使用的是Samsung Gear Live 来绘制触摸轨迹 我尝试捕获 onTouch 事件和 onGenericMotionEvent 事件 如以下代码所示 但是当我在屏幕上滑动时 该事件仅
  • 向 .NET 应用程序添加脚本功能

    我有一个用 C 编写的小游戏 它使用数据库作为后端 它是 A集换式卡牌游戏 我想以脚本的形式实现卡片的功能 我的意思是我本质上有一个界面 ICard 卡片类实现了 public class Card056 ICard 并且其中包含一个由游戏
  • ExecutorService 的线程安全静态初始化

    我正在尝试基于 Initialization on demandholder idiom 创建一个线程安全的单例类 这是我的代码 public class Check private Check private static class P
  • 如何获取查询字符串并在 htaccess 中重写它

    我有这样的疑问 example com folder q keyword 请建议如何将包含 关键字 作为参数的所有查询重定向到服务器上的其他文件 folder core index php id 1 I mean 1必须是keyword 这
  • Mac 操作系统不支持 Java 页面翻转?

    我希望有人之前偶然发现过以下问题 我的 Java 应用程序在 Mac 上存在图形性能问题 因此我制作了一个简单的测试应用程序 代码如下 当我在 Windows 上运行它时 控制台告诉我 图形配置翻转 真的BufferStrategy翻转 真
  • 模型保存骨干

    我正在在线数据库 Parse com 上保存模型 save 函数工作正常 但 save 内部的回调函数没有被调用 this utente save success function persona never called console
  • Angular 6 代理不再工作

    我有一个 Angular 应用程序和一个 Web API 为了在本地进行测试 我使用代理配置文件 proxy conf json api target host localhost protocol http port 50565 secu
  • 以编程方式将销售价格添加到产品变体中

    我需要以编程方式更新可变产品及其所有变体的销售价格 我需要添加什么样的元字段 我正在尝试更新主要产品 例如 update post meta post id regular price 100 update post meta post i
  • 重写java中的“私有”方法

    这个想法有些含糊不清 我需要一些澄清 我的问题是使用这段代码时 public class B private void don System out println hoho private public static void main
  • 控制器上下文为空

    我有这个 MVC4 控制器 ControllerB public class MyControllerB Controller public bool Check string actionName ControllerBase contr
  • Lasso sklearn 中的选项 normalize = True 有何作用?

    我有一个矩阵 其中每列的平均值为 0 标准差为 1 In 67 x val std axis 0 min Out 70 0 99999999999999922 In 71 x val std axis 0 max Out 71 1 0000