IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python解带L1正则的最小二乘 -> 正文阅读

[Python知识库]python解带L1正则的最小二乘

给定 H ∈ R d × n H\in\R^{d\times n} HRd×n,要解: min ? Z ∥ H ? H Z ∥ F 2 + α ∥ Z ∥ 1 s . t . ?diag ( Z ) = 0 \min_Z\parallel H-HZ\parallel_F^2+\alpha\parallel Z\parallel_1 \\ s.t.\ \text{diag}(Z)=0 Zmin?H?HZF2?+αZ1?s.t.?diag(Z)=0 拆开每一列单独求解,变成: min ? z i ∥ h i ? H ^ z i ∥ 2 2 + α ∥ z i ∥ 1 \min_{z_i}\parallel h_i-\hat Hz_i\parallel_2^2+\alpha\parallel z_i\parallel_1 zi?min?hi??H^zi?22?+αzi?1? 其中 H ^ \hat H H^ 是把 H 第 i 列 h i h_i hi? 换成全 0。即带 L1 范数正则的最小二乘(L1-norm regularized least-squares)[1,2],可以用 cvxopt 包配合 [3] 实现好的 l1regls 求。

Preliminary

安装见 [4],conda、pip 都行。

mutual conversion

numpy.ndarraycvxopt.matrix 之间的相互转换,参考 [5,6,7]。

import cvxopt
import numpy as np

H_np = np.arange(12).reshape(3, 4)
print(H_np)

# np.ndarray -> cvxopt.matrix
H_cvx = cvxopt.matrix(H_np)
print(H_cvx)

# cvxopt.matrix -> np.ndarray
print(np.array(H_cvx))

Code

  • 注意 H 要排成向量。
  • float 型 array 的 dtype 要转成 np.double 再转 cvxopt.matrix,见 [7]。
  • [3] 要单独下载,且在开头加上 solvers.options['show_progress'] = False 让 solver 求解时不要 bb[9]
import struct
import cvxopt
import numpy as np
import l1regls  # downloaded from [3]


"""L1 regularized least square
min || H - HZ ||_2 + || Z ||_1
"""


# column vector
H = np.random.permutation(12).reshape(2, 6).astype(np.double)  # use `double`
d, n = H.shape
print("H:\n", H)

Z = np.zeros([n, n], dtype=np.double)
for i in range(n):
    # the vector to approximate
    h = H[:, i]

    # mask out the target to avoid trivial solution
    _mask = np.ones_like(H[0:1])
    _mask[0][i] = 0
    H_masked = H * _mask
    # print(H_masked)

    # np.ndarray -> cvxopt.matrix
    H_masked = cvxopt.matrix(H_masked)
    h = cvxopt.matrix(h)

    # solve
    z = l1regls.l1regls(H_masked, h)

    # cvxopt.matrix -> np.ndarray
    z = np.array(z)
    # z = np.vectorize(lambda x: struct.unpack('d', x))(_tmp)
    # z = np.vectorize(lambda x: int.from_bytes(x, 'big'))(np.array(z).T)

    Z[:, i] = z.flatten()


print("Z:\n", Z)
print("recon H:\n", H.dot(Z))
  • 输出,可以看到,HZ 基本能重构出 H。
H:
[[ 6. 11.  4.  7.  8.  1.]
 [10.  0.  9.  3.  2.  5.]]
 
Z:
[[ 0.00000000e+00 -6.98943781e-06  8.92271576e-01  2.97727171e-01
   1.97727272e-01  1.59974460e-06]
 [ 1.38700201e-01  0.00000000e+00 -1.18924004e-01  4.69834622e-01
   6.15289256e-01 -1.03918158e-01]
 [ 1.10717194e+00 -3.29324447e-01  0.00000000e+00  6.28937736e-08
   4.00154515e-10  5.47136286e-01]
 [ 1.66159302e-05  1.62159367e-05 -4.83780134e-07  0.00000000e+00
   1.43251121e-09 -1.72704896e-08]
 [ 4.66304188e-06  1.52891479e+00 -1.34402595e-06  1.63529549e-07
   0.00000000e+00 -4.41351100e-08]
 [ 7.52874506e-06 -2.84235943e-05  3.14914688e-06  2.54879563e-08
   3.46453896e-10  0.00000000e+00]]

recon H:
[[ 5.95455111 10.91406371  4.04545442  6.95454546  7.95454545  1.04545454]
 [ 9.96464426  0.0937462   8.92272736  2.97727274  1.97727273  4.92424243]]

References

  1. L1-norm regularized least-squares
  2. L1-norm regularized least-squares on Python
  3. l1regls.py
  4. Installation instructions
  5. Numpy and CVXOPT
  6. python3 conversion between cvxopt.matrix and numpy.array
  7. converting numpy vector to cvxopt
  8. Fast l1-minimization algorithms and an application in robust face recognition: A review
  9. How to silent cvxopt solver [Python]?
  10. torch.lstsq
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-08-21 15:19:48  更:2021-08-21 15:20:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 10:15:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码