机器学习 监督学习 Week3

news2024/11/26 10:41:04

Logistic Regression

一个用于分类的算法,模型拟合后,以某些值作为阈值,将数据区分为不同的类别。过去的回归算法中,y的值可以范围很广,而在分类算法中y代表类别,往往只有几个,甚至只有两个(true or false)

 

 

凸函数

凸函数的割线在函数曲线的上方。凸优化问题的局部最优解是全局最优解,在数据科学的模型求解中,如果优化的目标函数是凸函数,则局部极小值就是全局最小值。这也意味着我们求得的模型是全局最优的,不会陷入到局部最优值。

代价函数的选择

在逻辑回归算法中,方差作为代价函数来训练数据已经不合适了,因为方差作为代价函数时,代价函数曲线图不是凸函数,会有许多“坑”,梯度下降的时候很容易陷入局部最小值无法跳出。

逻辑回归算法一般采用以下代价函数,这个特殊的成本函数是从统计学中推导出来的,叫极大似然估计

 loss(f_{\mathbf{w},b}(\mathbf{x}^{(i)}), y^{(i)}) = \begin{cases} - \log\left(f_{\mathbf{w},b}\left( \mathbf{x}^{(i)} \right) \right) & \text{if $y^{(i)}=1$}\\ \log \left( 1 - f_{\mathbf{w},b}\left( \mathbf{x}^{(i)} \right) \right) & \text{if $y^{(i)}=0$} \end{cases}

y = 1时,f的值越接近1,{\hat{y}}和y相差的越小,预测的也就越准,同时,代价函数L就越小,即惩罚越小;

y = 0时,f的值越接近0,{\hat{y}}和y相差的越小,预测的也就越准,同时,代价函数L就越小,即惩罚越小; 

 

 可以看出cost函数修改后图像很平滑,明显有一个全局最优解

代价函数实现

Numpy中有个函数叫exp(),可以输入z,计算出e^(z)的结果

def sigmoid(z):
    z = np.clip(z,-500,500) #防止溢出
    result = 1.0/(1.0+np.exp(-z))
    return result

def compute_cost_logistic(X, y, w, b):
    m = X.shape[0]
    cost = 0.0
    for i in range(m):
        z = np.dot(X[i],w)+b
        f_wb = sigmoid(z)
        cost += -y[i]*np.log(f_wb) - (1-y[i])*np.log(1-f_wb) #同时考虑y的两种情况
        cost /= m
    return cost

 偏导计算

def compute_gradient_logistic(X, y, w, b): 
    m,n = X.shape 
    dj_dw = np.zeros((n,))
    dj_db = 0.0

    for i in range(m):
        z = np.dot(X[i],w)
        f_wb = sigmoid(z)+b
        err = f_wb - y[i]
        for j in range(n):
            dj_dw[j]+= err*X[i,j]
        dj_db += err
    dj_dw /= m
    dj_db /= m
    return dj_dw,dj_db

梯度下降实现

def gradient_descent(X, y, w_in, b_in, alpha, num_iters): 
    J_history = []
    w = copy.deepcopy(w_in)
    b = b_in

    for i in range(num_iters):
        dj_dw,dj_db = compute_gradient_logistic(X,y,w,b)
        w -= alpha*dj_dw
        b -= alpha*dj_db

        if i <100000:
            J_history.append(compute_cost_logistic(X,y,w,b))
    return  w,b,J_history

误差和过拟合

在训练集上的误差称为训练误差(training error)或经验误差(empirical error)。

在测试集上的误差称为测试误差(test error)。

学习器在所有新样本上的误差称为泛化误差(generalization error)。

显然,我们希望得到的是在新样本上表现得很好的学习器,即泛化误差小的学习器。因此,我们应该让学习器 尽可能地从训练集中学出普适性的“一般特征”,这样在遇到新样本时才能做出正确的判别。然而,当学习器把 训练集学得“太好”的时候,即把一些训练样本的自身特点当做了普遍特征;同时也有学习能力不足的情况,即训练集的基本特征都没有学习出来

学习能力过强,以至于把训练样本所包含的不太一般的特性都学到了,称为:过拟合(overfitting)。

学习能太差,训练样本的一般性质尚未学好,称为:欠拟合(underfitting)。  

在过拟合问题中,训练误差十分小,但测试误差教大;在欠拟合问题中,训练误差和测试误差都比较大。目前,欠拟合问题比较容易克服,例如增加迭代次数等,但过拟合问题还没有十分好的解决方案,过拟合是机器学习面临的关键障碍

正则化解决过拟合问题

结果模型过拟合问题思路:

1.搜集更多数据

2.舍弃某些特征值

3.用正则化的方法缩小参数的大小

正则化通过向损失函数添加一个正则项来约束模型参数的大小。实际上,这些参数(w_{j})的值越小,通常对应于越光滑的函数,也就是更加简单的函数。因此就不易发生过拟合的问题,这个额外的项是正则化项系数和进入模型复杂度计算的一部分。lambda使wj不会过大(因为如果lambda*wj很大的话,代价函数会很大,训练的过程中惩罚就比较“狠”),可以有效约束模型的过拟合问题,同时,lambda要做的就是控制在两个不同的目标(模型不会过拟合与梯度下降找最优解)中的平衡关系。

正则化之后梯度下降的改变

正则化后偏导该怎么求?

def compute_cost_linear_reg(X, y, w, b, lambda_):
    """
    Computes the cost over all examples
    Args:
      X (ndarray (m,n): Data, m examples with n features
      y (ndarray (m,)): target values
      w (ndarray (n,)): model parameters  
      b (scalar)      : model parameter
      lambda_ (scalar): Controls amount of regularization
    Returns:
      total_cost (scalar):  cost 
    """

    m  = X.shape[0]
    n  = len(w)
    cost = 0.
    for i in range(m):
        f_wb_i = np.dot(X[i], w) + b                                   #(n,)(n,)=scalar, see np.dot
        cost = cost + (f_wb_i - y[i])**2                               #scalar             
    cost = cost / (2 * m)                                              #scalar  
 
    reg_cost = 0
    for j in range(n):
        reg_cost += (w[j]**2)                                          #scalar
    reg_cost = (lambda_/(2*m)) * reg_cost                              #scalar
    
    total_cost = cost + reg_cost                                       #scalar
    return total_cost                                                  #scalar
def compute_gradient_linear_reg(X, y, w, b, lambda_): 
    """
    Computes the gradient for linear regression 
    Args:
      X (ndarray (m,n): Data, m examples with n features
      y (ndarray (m,)): target values
      w (ndarray (n,)): model parameters  
      b (scalar)      : model parameter
      lambda_ (scalar): Controls amount of regularization
      
    Returns:
      dj_dw (ndarray (n,)): The gradient of the cost w.r.t. the parameters w. 
      dj_db (scalar):       The gradient of the cost w.r.t. the parameter b. 
    """
    m,n = X.shape           #(number of examples, number of features)
    dj_dw = np.zeros((n,))
    dj_db = 0.

    for i in range(m):                             
        err = (np.dot(X[i], w) + b) - y[i]                 
        for j in range(n):                         
            dj_dw[j] = dj_dw[j] + err * X[i, j]               
        dj_db = dj_db + err                        
    dj_dw = dj_dw / m                                
    dj_db = dj_db / m   
    
    for j in range(n):
        dj_dw[j] = dj_dw[j] + (lambda_/m) * w[j]

    return dj_db, dj_dw

与之前不同的地方就是计算代价时考虑上了lambda*wj

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

物联网HMI的关键驱动力—SCADA级功能库和控件库

一、前言 在这个数字化时代&#xff0c;物联网HMI已成为连接人与设备之间的关键纽带&#xff0c;为用户提供直观、智能的交互体验&#xff0c;背后强大的关键驱动力扮演着至关重要的角色&#xff0c;其中SCADA级功能库和控件库的引入成为了物联网HMI设计和开发的核心要素。 S…

论文参考文献怎么引用|Word引用多篇参考文献|word参考文献连续引用|参考文献连续编号|交叉引用

一、参考文献准备 首先将参考文献在段落设置模型中进行编号&#xff0c;通过“交叉引用”对“参考文献”编号引用&#xff0c;以“[x-y]”引用格式实现连续多个文献引用。以实现以[1-3]交叉引用格式来引用[1][2][3] 三个连续参考文献为例说明本方法。 二、参考文献连续编号[…

Redis数据类型之列表List

Redis数据类型之列表List list中的命令如下&#xff1a; lpush&#xff1a;从左边插入&#xff0c;插入的数据是倒叙 LPUSH key value1 [value2] 将一个或多个值插入到列表头部 lpush k1 a b c d e f ; 输出结果 f e d c b a lpop k1; 输出 f 从左边pop弹出时先弹出的是f&…

ESD监控系统、防静电闸机的应用案例

ESD监控系统和防静电闸机是在电子厂、医药厂、半导体厂、航空航天等领域广泛应用的静电措施&#xff0c;可以有效地保护生产线上的产品安全&#xff0c;提高产品质量和可靠性。 近日一家电子元器件公司在其生产线上安装了防静电监控系统、ESD防静电闸机&#xff0c;用于控制人员…

Vue之基本使用

一、前端的发展史 1.HTML(5)、CSS(3)、JavaScript(ES5、ES6)&#xff1a;编写一个个的页面 -> 给后端(PHP、Python、Go、Java) -> 后端嵌入模板语法 -> 后端渲染完数据 -> 返回数据给前端 -> 在浏览器中查看 2.Ajax的出现 -> 后台发送异步请求&#xff0c;…

今天是六一儿童节~身为我们班的信息担当的我为我们班同学准备了一个小惊喜,你确定不来看看吗(turtle库实现:送给同学们一朵小红花)

目录 一.实现思路 二.花朵的实现方法 三.花朵的茎实现方法 四.画出第一片叶子的方法 五.画出第二片叶子的方法 六.如何设置页面主体 结尾 今天呢&#xff0c;也是一年一度的六一儿童节&#xff08;虽然各位大佬可能不过&#xff0c;但是我还是要过的&#xff09;&#xf…

JMeter性能测试零基础完整入门版,视频教程加源码免费看

目录 1. Jmeter简介 2. Jmeter安装 2.1 JDK安装 2.2 JMeter安装 3. 测试实例 3.2 请求参数 3.3 返回结果 4. JMeter脚本编写 4.1 添加线程组 4.2 添加HTTP请求 4.3 添加察看结果树 4.4 添加用户自定义变量 4.5 添加断言 4.6 添加断言结果 4.7 添加聚合报告 5. 执…

Spring Boot如何实现微服务架构中的API网关?

Spring Boot如何实现微服务架构中的API网关&#xff1f; 随着微服务架构的流行&#xff0c;越来越多的企业开始构建自己的微服务系统。在这种情况下&#xff0c;API网关变得尤为重要。API网关是微服务架构中的一个组件&#xff0c;它可以帮助我们管理和路由所有的API请求。Spr…

【LeetCode热题100】打卡第10天:删除链表倒数第N个节点

文章目录 删除链表倒数第N个节点⛅前言&#x1f512;题目&#x1f511;题解 删除链表倒数第N个节点 ⛅前言 大家好&#xff0c;我是知识汲取者&#xff0c;欢迎来到我的LeetCode热题100刷题专栏&#xff01; 精选 100 道力扣&#xff08;LeetCode&#xff09;上最热门的题目&a…

8. 何为ECC

非对称加密 在我们认知里面&#xff0c;通常说到非对称加密&#xff0c;就会弹出2个词&#xff0c;RSA和ECC&#xff0c;做过对称加密的都非常清楚&#xff0c;RSA其实就是模指运算。用公钥来加密&#xff0c;私钥来解密&#xff1b;私钥签名&#xff0c;公钥验签。但是提到EC…

【数据结构】链表 linked list

一、什么是链表 零散的内存空间存储&#xff0c;由元素和指针组成 二、常用操作 1.原理 access&#xff1a;通过next指针遍历 时间复杂度&#xff1a;O(N) search&#xff1a;通过next指针遍历 时间复杂度&#xff1a;O(N) insert&#xff1a;找个新的内存空间存储新元素…

学习HCIP的day.10

十、对BGP一些情况的总结&#xff1a; 1、路由条目不优特殊情况&#xff1a; 在BGP协议中&#xff0c;存在一种无法优秀的路由条目&#xff1b;假设R4路由表中存在一条非BGP产生的到达5.5.5.5的路由条目&#xff0c;且该条目用于R4与R5建立BGP邻居关系&#xff1b;那么之后R5…

【Linux网络】搭建LNMP架构

搭建LNMP架构 一、编译安装MySQL服务二、安装Nginx服务三、安装配置PHP解析环境四、部署Discuz社区论坛Web应用五、部署博客论坛应用六fpm进程优化 一、编译安装MySQL服务 1.安装MySQL环境依赖包 yum -y install gcc gcc-c ncurses ncurses-devel bison cmake2、创建运行用户 u…

地震勘探基础(三)之地震波的时距曲线

时距曲线 在反射波地震勘探中&#xff0c;一般是在地面激发地面接收&#xff0c;激发点到接受点的距离称为炮间距&#xff08;offset&#xff09;&#xff0c;用 x x x表示。如果炮间距为0&#xff0c;称为自激自收。 单道接收&#xff1a;激发一次只在一个位置上接收地震波。…

在线ps网页版推荐,让你摆脱安装包的烦恼

在设计领域&#xff0c;Photoshop的地位多年来一直是不可动摇的&#xff0c;其强大的功能可以毫不夸张地说&#xff1a;只有你想不到的&#xff0c;没有PS做不到的。但强大如PS&#xff0c;也有自己的小局限性&#xff1a;处理矢量图相对较弱&#xff0c;更难掌握。今天&#x…

微信小程序——监听页面滑动(一)onPageScroll

微信小程序——手把手教你学会监听页面滑动 知识回调&#xff08;不懂就看这儿&#xff01;&#xff09;场景复现核心干货如何进行页面监听了解onPageScroll实际使用onPageScroll 知识回调&#xff08;不懂就看这儿&#xff01;&#xff09; 知识专栏专栏链接微信小程序专栏ht…

栈和队列高频面试题(必刷): 用队列实现栈 用栈实现队列 实现循环队列 括号匹配

文章目录 用队列实现栈用栈实现队列实现循环队列括号匹配 用队列实现栈 题目描述&#xff1a; 请你仅使用两个队列实现一个后入先出&#xff08;LIFO&#xff09;的栈&#xff0c;并支持普通队列的全部四种操作&#xff08;push、top、pop 和 empty&#xff09;。 实现 MySt…

新项目 使用 IDEA 搭建后端环境 及 搭建是可能遇到的 问题 及解决方法

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 新项目 使用 IDEA 搭建后端环境 及 搭建是可能遇到的 问题 及解决方法 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 新项目 使用 IDEA 搭建后端环…

【群智能算法改进】一种改进的沙丘猫群优化算法 改进沙丘猫群算法 改进SCSO[2]【Matlab代码#36】

文章目录 【获取资源请见文章第5节&#xff1a;资源获取】1. 原始沙丘猫群优化算法2. 改进沙丘猫群算法2.1 非线性自适应参数2.2 Cauchy变异策略2.3 最优邻域扰动策略 3. 部分代码展示4. 仿真结果展示5. 资源获取6. 参考文献 【获取资源请见文章第5节&#xff1a;资源获取】 1.…

华为OD机试真题B卷 Java 实现【光伏场地建设规划】,附详细解题思路

一、题目描述 祖国西北部有一片大片荒地&#xff0c;其中零星的分布着一些湖泊&#xff0c;保护区&#xff0c;矿区&#xff1b;整体上常年光照良好&#xff0c;但是也有一些地区光照不太好。某电力公司希望在这里建设多个光伏电站&#xff0c;生产清洁能源。对每平方公里的土…