手写LASSO回归python实现


import numpy as np
from matplotlib.font_manager import FontProperties
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt

class Lasso():
    def __init__(self):
        pass

    # 数据准备
    def prepare_data(self):
        # 生成样本数据
        X, y = make_regression(n_samples=40, n_features=80, random_state=0, noise=0.5)
        # 划分数据集
        X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)

        return X_train, X_test, y_train.reshape(-1,1), y_test.reshape(-1,1)


    # 参数初始化
    def initialize_params(self, dims):
        w = np.zeros((dims, 1))
        b = 0
        return w, b

    # 定义L1损失函数
    def l1_loss(self, X, y, w, b, alpha):
        num_train = X.shape[0]  # 样本数
        num_feature = X.shape[1]  # 特征数

        y_hat = np.dot(X, w) + b  # 回归预测数据
        # 计算损失
        loss = np.sum((y_hat - y) ** 2) / num_train + alpha * np.sum(np.abs(w))  # 修改此处
        # 计算梯度,即参数的变化
        dw = np.dot(X.T, (y_hat - y)) / num_train + alpha * np.sign(w)  # 修改此处
        db = np.sum((y_hat - y)) / num_train
        return y_hat, loss, dw, db

    def lasso_train(self, X, y, learning_rate, epochs, alpha):
        loss_list = []
        w, b = self.initialize_params(X.shape[1])

        # 归一化特征
        X = (X - np.mean(X, axis=0)) / np.std(X, axis=0)

        for i in range(1, epochs):
            y_hat, loss, dw, db = self.l1_loss(X, y, w, b, alpha)
            # 更新参数
            w += -learning_rate * dw
            b += -learning_rate * db
            loss_list.append(loss)


            # if i % 300 == 0:
            #     print('epoch %d loss %f' % (i, loss))

            params = {
                'w': w,
                'b': b
            }
            grads = {
                'dw': dw,
                'db': db
            }
        return loss, loss_list, params, grads

    # 根据计算的得到的参数进行预测
    def predict(self, X, params):
        w = params['w']
        b = params['b']
        y_pred = np.dot(X, w) + b
        return y_pred


if __name__ == '__main__':
    lasso = Lasso()
    X_train, X_test, y_train, y_test = lasso.prepare_data()

    alphas=np.arange(0.01,0.11,0.01)
    wc=[]#统计参数w中绝对值小于0.1的个数,模拟稀疏度
    for alpha in alphas:
        # 参数:训练集x,训练集y,学习率,迭代次数,正则化系数
        loss, loss_list, params, grads = lasso.lasso_train(X_train, y_train, 0.02, 3000,alpha)
        w=np.squeeze(params['w'])
        count=np.sum(np.abs(w)<1e-1)
        wc.append(count)

    # 设置中文字体
    plt.rcParams['font.sans-serif'] = ['SimHei']
    plt.rcParams['axes.unicode_minus'] = False
    plt.figure(figsize=(10, 8))
    plt.plot(alphas, wc, 'o-')
    plt.xlabel('正则项系数',fontsize=15)
    plt.ylabel('参数w矩阵的稀疏度',fontsize=15)
    plt.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/151592.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MQTT协议详解及在Android上的应用

MQTT协议详解及在Android上的应用 一、MQTT协议简介二、MQTT工作原理三、MQTT协议特点四、MQTT在Android上的应用4.1 准备工作4.2 示例代码 五、结论 本博客将全面介绍MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;协议的基本概念、工作原理、特点以及在An…

转录组测序学习第二弹

安装软件 前面已经安装好了conda&#xff0c;那么我们现在需要安装我们后续需要用到的软件 1.先进入我们前面建立的虚拟环境中 conda activate my_env2.安装软件 conda install -y sra-tools conda install -y trimmomatic conda install -y cutadapt multiqc conda install…

MATLAB 状态空间设计 —— LQG/LQR 和极点配置算法

系列文章目录 文章目录 系列文章目录前言一、相关函数 —— LQG/LQR 和极点配置算法1.1 LQR —— lqr 函数1.1.1 函数用法1.1.2 举例1.1.2.1 倒摆模型的 LQR 控制 1.2 LQG —— lqg() 函数1.2.1 函数用法1.2.2 举例 前言 状态空间控制设计方法&#xff0c;如 LQG/LQR 和极点配…

Google play个人开发者账号最新政策要求——必须20人连续14天封闭测试

前几天&#xff0c;Google play官方宣布了一项针对个人开发者账号发布新应用的政策要求&#xff0c;即从2023年11月13日后注册的个人开发者账号&#xff0c;其应用必须满足特定的测试要求&#xff0c;才能在 Google Play 中上架。 该政策表示&#xff0c;如果开发者使用的是20…

Java相关编程思想

少用继承多用“组合”——在现有类的基础上组织一个新类。 2.继承要用“is”来检验&#xff0c;如果继承者is被继承者&#xff0c;说明这是一个比较好的继承。 3.向上造型&#xff0c;把实现方法留给继承者去实现。&#xff08;动态绑定&#xff09; 4.把接口理解为抽象类的进一…

第一百七十四回 如何创建扇形渐变背景

文章目录 1. 概念介绍2. 实现方法3. 代码与效果3.1 示例代码3.2 运行效果 4. 内容总结 我们在 上一章回中介绍了"如何创建线性渐变背景"相关的内容&#xff0c;本章回中将介绍" 如何创建扇形渐变背景"。闲话休提&#xff0c;让我们一起Talk Flutter吧。 …

Python 如何实现适配器设计模式?什么是适配器(Adapter)设计模式?

什么是适配器设计模式&#xff1f; 适配器&#xff08;Adapter&#xff09;设计模式是一种结构型设计模式&#xff0c;它允许接口不兼容的类之间进行合作。适配器模式充当两个不兼容接口之间的桥梁&#xff0c;使得它们可以一起工作&#xff0c;而无需修改它们的源代码。 主要…

CTFhub-RCE-过滤空格

1. 查看当前目录&#xff1a;127.0.0.1|ls 2. 查看 flag_890277429145.php 127.0.0.1|cat flag_890277429145.php 根据题目可以知道空格被过滤掉了 3.空格可以用以下字符代替&#xff1a; < 、>、<>、%20(space)、%09(tab)、$IFS$9、 ${IFS}、$IFS等 $IFS在li…

03.智慧商城——封装请求模块、登录静态页面、图形验证码

01. 登录页静态布局 (1) 准备工作 新建 styles/common.less 重置默认样式 // 重置默认样式 * {margin: 0;padding: 0;box-sizing: border-box; }// 文字溢出省略号 .text-ellipsis-2 {overflow: hidden;-webkit-line-clamp: 2;text-overflow: ellipsis;display: -webkit-box…

C++标准模板(STL)- 类型支持 (属性查询,获取类型的对齐要求)

类型特性 类型特性定义一个编译时基于模板的结构&#xff0c;以查询或修改类型的属性。 试图特化定义于 <type_traits> 头文件的模板导致未定义行为&#xff0c;除了 std::common_type 可依照其所描述特化。 定义于<type_traits>头文件的模板可以用不完整类型实例…

本地视频AI人脸替换,一键启动,傻瓜式操作

本地无须准备配置和运行环镜&#xff0c;整个压缩包下载后解压&#xff0c;一键启动程序&#xff0c;只需一张照片和一个视频&#xff0c;就可以把视频中的人物替换成您想要的人脸。支持CPU和GPU解码&#xff0c;使用GPU解码速度较快。 所有使用的软件安装包已上传网盘&#x…

Ubuntu 20.04 调整交换分区大小

Ubuntu 调整交换分区大小 一、系统情况二、去除旧的交换分区文件三、配置并启用交换分区四、查看swap文件大小 一、系统情况 Ubuntu &#xff1a;Ubuntu 20.04.6 LTS 交换分区位置&#xff1a; cat /proc/swaps二、去除旧的交换分区文件 去掉旧的交换分区有两个步骤&#x…

【excel技巧】Excel表格里的图片如何批量调整大小?

Excel表格里面插入了很多图片&#xff0c;但是每张图片大小不一&#xff0c;如何做到每张图片都完美的与单元格大小相同&#xff1f;并且能够根据单元格来改变大小&#xff1f;今天分享&#xff0c;excel表格里的图片如何批量调整大小。 方法如下&#xff1a; 点击表格中的一…

DBA_IND_STATISTICS 字段含义

功能 展示数据库中所有索引的优化器统计信息。 字段说明 参考&#xff1a;https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000885743

贝加莱软件功能测试

通讯及稳定性测试 Profibus DP通讯、Modbus通讯、CANOPEN通讯测试 C1 C2 C3 测试目的 测试验证贝加莱控制系统各种现场总线通讯的性能及稳定性。验收标准 主站PLC可与现有总线仪表建立Profibus DP通讯、Modbus通讯或CANOPEN通讯&#xff0c;连续运行&#xff08;通讯状态应保…

万能自定义表单系统源码 支持收费表单+在线支付+活动报名 带前后端完整部署教程

随着互联网的快速发展&#xff0c;各种在线表单系统已经成为了许多企业和个人的必备工具。这些表单系统可以帮助用户收集信息、管理数据、进行在线支付等操作。然而&#xff0c;现有的表单系统往往不能满足所有用户的需求&#xff0c;所以这款万能自定义表单系统源码应用而生。…

内衣洗衣机和手洗哪个干净?迷你洗衣机品牌推荐

很多人会觉得内衣洗衣机是智商税&#xff0c;洗个内衣只需要两分钟的事情&#xff0c;需要花个几百块钱去入手一个洗衣机吗&#xff1f;然而清洗贴身衣物的并不是一件简单的事情&#xff0c;如果只是简单的搓洗&#xff0c;内裤上看不见的细菌也无法消除&#xff0c;而且对来生…

【ROS导航Navigation】五 | 导航相关的消息 | 地图 | 里程计 | 坐标变换 | 定位 | 目标点和路径规划 | 激光雷达 | 相机

致谢&#xff1a;ROS赵虚左老师 Introduction Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程 参考赵虚左老师的实战教程 一、地图 nav_msgs/MapMetaData 地图元数据&#xff0c;包括地图的宽度、高度、分辨率等。 nav_msgs/OccupancyGrid 地图栅格数据&#…

Outlook搜索功能灰色

Outlook搜索功能灰色 故障现象&#xff1a; Outlook搜索邮件功能突然灰色&#xff0c;无法搜索邮件&#xff0c;搜索栏直接搜索的结果不准确&#xff0c;并提示服务被禁用。 故障截图&#xff1a; 故障原因&#xff1a; Windows search服务被禁用导致&#xff0c;需要重新开…

人工智能为游戏带来提升

人工智能为游戏带来提升 1提升游戏体验 提高吸引力 ​ 游戏中的****NPC 首先&#xff0c;出现和玩家相同水平&#xff08;甚至超越人类的&#xff09;的电脑玩家就已经足够吸引人了&#xff0c;尤其是一些游戏中如果可以产生一个和人类更加相似的NPC&#xff0c;无疑可以让玩…