---
source_url: https://docs.dolphindb.cn/zh/funcs/l/lasso.html
fetched_at: 2026-05-19T09:29:23Z
category: funcs
title: lasso
sha1: bcb40eab67d51d831c02a1cc6e65942dd059bf1f
---

# lasso

## 语法

`lasso(ds, yColName, xColNames, [alpha=1.0], [intercept=true],
[normalize=false], [maxIter=1000], [tolerance=0.0001], [positive=false],
[swColName], [checkInput=true])`

## 详情

进行 lasso 回归估计。

最小化以下目标函数：

  
![lasso](../../images/lasso.png)

## 参数

**ds** 是内存表或通常用 [sqlDS](../s/sqlDS.html) 函数生成的数据源。

**yColName** 是字符串，表示数据源中因变量的列名。

**xColNames** 是字符串标量或向量，表示数据源中自变量的列名。

**alpha** 是浮点数，表示乘以 L1 范数惩罚项的系数。默认值是1.0。

**intercept** 是布尔值，表示是否回归模型包含截距。默认值为 true。

**normalize** 是布尔值。默认值为 false。若设为 true，则所有自变量均会进行如下标准化：减去平均值，然后除以 L2 范数。若
*intercept* 为 false，该参数会被忽略。

**maxIter** 是正整数，表示最大迭代次数。默认值是1000。

**tolerance** 是浮点数，表示迭代中止的边界差值。默认值是0.0001。

**positive** 是布尔值，表示是否强制系数为正数。默认值是 false。

**swColName** 字符串，表示列名，必须为 *ds*
中存在的列名。如果未指定该参数，则所有样本的权重都默认为1；如果指定该参数，则将指定的列作为样本的权重。

**checkInput** 布尔值，表示是否检查输入参数（*yColName*, *xColNames* 和
*swColName*）的合法性。

- 若
  *checkInput*=true（默认值），则会检查这些参数中是否存在无效值（NULL），若存在，则会报错；
- 若 *checkInput*=false，则不检查无效值。

注：

强烈建议开启 *checkInput*，以检查输入参数的有效性。如果不开启
*checkInput*，则必须确保输入参数中不存在无效值，并且中间计算过程中不会产生无效值，否则可能得到一个无用的模型。

## 返回值

一个字典，包含以下 key：

- modelName：模型名称。
- coefficients：模型的回归系数。
- intercept：截距。
- dual\_gap：优化结束时的对偶间隙。
- tolerance：迭代中止的边界差值。
- iterations：迭代次数。
- xColNames：数据源中自变量的列名。
- predict：用于预测的函数。

## 例子

```dolphindb
y = [225.720746,-76.195841,63.089878,139.44561,-65.548346,2.037451,22.403987,-0.678415,37.884102,37.308288];
x0 = [2.240893,-0.854096,0.400157,1.454274,-0.977278,-0.205158,0.121675,-0.151357,0.333674,0.410599];
x1 = [0.978738,0.313068,1.764052,0.144044,1.867558,1.494079,0.761038,0.950088,0.443863,-0.103219];
t = table(y, x0, x1);

lasso(t, `y, `x0`x1);
```

如果 t 是一个 DFS 表，则应使用数据源作为输入：

```dolphindb
lasso(sqlDS(<select * from t>), `y, `x0`x1);
```
