机器学习笔记(三)Logistic回归模型

yizhihongxing

机器学习笔记(三)Logistic回归模型

简介

Logistic回归模型是一种用于分类问题的模型。与线性回归模型不同的是,Logistic回归模型使用的是sigmoid函数将线性模型输出的连续值映射为0或1的概率值,从而实现二分类任务。本篇文章将介绍Logistic回归模型的原理、损失函数、优化算法以及基于Python的实现方法。

原理

Logistic回归模型将输入的特征向量和权值向量进行相乘,将其结果映射到[0,1]的范围内,表示样本属于某一分类的概率。这一映射过程可以通过sigmoid函数来实现,sigmoid函数的数学表达式为:

$$sigmoid(z)=\frac{1}{1+e^{-z}}$$

其中,$z$为输入的特征向量和权值向量的乘积。如果将$z$看作一个分数,那么sigmoid函数就可以将这个分数转化成一个概率。

Logistic回归模型的预测可以表示为:

$$\hat{y}=sigmoid(\mathbf{x}\mathbf{w})$$

其中,$\hat{y}$表示预测结果,$\mathbf{x}$表示输入的特征向量,$\mathbf{w}$表示权值向量。

损失函数

Logistic回归模型的损失函数是交叉熵损失函数。交叉熵损失函数的数学表达式为:

$$J(\mathbf{w})=-\frac{1}{m}\sum_{i=1}^{m}(y^{(i)}\log(\hat{y}^{(i)})+(1-y^{(i)})\log(1-\hat{y}^{(i)}))$$

其中,$m$为样本数量,$y^{(i)}$为第$i$个样本的真实标签值,$\hat{y}^{(i)}$为第$i$个样本的预测概率值。

Logistic回归模型的目标是最小化整个训练集中所有样本的交叉熵损失函数值。

优化算法

Logistic回归模型的优化算法有很多种,其中比较常用的是梯度下降算法。梯度下降算法的基本思想是沿着梯度的反方向移动一定的步长,从而达到最小化损失函数的目的。梯度下降算法的更新公式为:

$$\mathbf{w}=\mathbf{w}-\eta\frac{\partial J(\mathbf{w})}{\partial \mathbf{w}}$$

其中,$\eta$表示学习率,$\frac{\partial J(\mathbf{w})}{\partial \mathbf{w}}$表示损失函数对权值向量的导数。

Python实现

下面是Logistic回归模型在Python中的实现代码:

import numpy as np

class LogisticRegression:
    def __init__(self, lr=0.1, num_iter=1000):
        self.lr = lr
        self.num_iter = num_iter
        self.theta = None

    def sigmoid(self, z):
        return 1.0 / (1.0 + np.exp(-z))

    def fit(self, X, y):
        m, n = X.shape
        self.theta = np.zeros(n)

        for i in range(self.num_iter):
            z = np.dot(X, self.theta)
            h = self.sigmoid(z)
            gradient = np.dot(X.T, (h - y)) / m
            self.theta -= self.lr * gradient

    def predict(self, X):
        z = np.dot(X, self.theta)
        h = self.sigmoid(z)
        return h > 0.5

其中,fit方法用于训练模型,predict方法用于预测样本标签。

总结

本篇文章介绍了Logistic回归模型的原理、损失函数、优化算法以及Python实现方法。通过学习Logistic回归模型,我们可以使用它来解决二分类问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:机器学习笔记(三)Logistic回归模型 - Python技术站

(0)
上一篇 2023年3月28日
下一篇 2023年3月28日

相关文章

  • svn 用户名,密码 查看/删除方法

    当我们使用svn进行版本控制时,需要设置用户名和密码来保护源代码的安全。有时候,我们需要查看或删除已经保存的svn用户名和密码。下面是详细讲解“svn 用户名,密码 查看/删除方法”的完整攻略。 查看已存储的用户名和密码 可以通过查看Subversion客户端的配置文件,来查看已经存储的用户名和密码。Subversion客户端的配置文件通常位于{user.h…

    other 2023年6月27日
    00
  • vivoPad2怎么退出开发者模式 vivoPad2关闭开发者模式教程

    vivoPad2是vivo品牌的一款平板电脑,在使用vivoPad2开发者模式时,需要谨慎操作。如果要退出开发者模式或关闭开发者模式,可以按照以下步骤进行。 退出开发者模式 打开设备的“设置”应用,滑动到底部,找到“开发者选项”。 点击“开发者选项”,滑动到最下面,找到“关闭开发者选项”。 点击“关闭开发者选项”。 系统会提示你“关闭开发者选项”,点击“确定…

    other 2023年6月26日
    00
  • linuxcomposer的使用

    LinuxComposer的使用 LinuxComposer是一个基于Web的PHP应用程序,用于在Linux服务器上便捷地管理PHP依赖项。它是专为PHAR包管理而设计的,可以让您轻松快速地管理和更新PHP依赖项,从而简化项目的管理和维护工作。 安装和配置LinuxComposer 首先,您需要确保您的Linux服务器上已经安装了PHP CLI和Git。然…

    其他 2023年3月29日
    00
  • Python中Enum使用的几点注意事项

    下文会为您详细讲解Python中Enum使用的几点注意事项。 Enum定义 首先,我们应该明确Enum的定义。Enum是一个枚举类,它将一组常量定义为一个特定类型的有限集合。在Python中,可以使用标准库中的枚举类Enum来定义一个枚举类。一般的Enum定义方式如下: from enum import Enum class Color(Enum): RED…

    other 2023年6月26日
    00
  • java用类加载器的5种方式读取.properties文件

    Java用类加载器的5种方式读取.properties文件 1. 使用ClassLoader.getResourceAsStream() 这是最常见的一种方式,可以通过类加载器来加载.properties文件,并返回一个InputStream对象,可以进一步读取文件内容。 String fileName = "config.properties&q…

    other 2023年6月28日
    00
  • qt创建.csv文件

    qt创建.csv文件 在Qt中,我们可以使用QFile类来创建和操作文件。创建CSV文件的过程与创建任何其他类型的文件非常相似。 CSV(Comma Separated Values)文件是一种常用的文件格式,通常用于存储具有类似表格结构的数据。CSV格式的文件可以使用各种软件轻松处理,包括Microsoft Excel、Google Sheets和Open…

    其他 2023年3月28日
    00
  • JAVA里面的IO流(一)分类1(字节/字符和输入/输出)

    JAVA里面的IO流(一)分类1(字节/字符和输入/输出) 在Java中,IO流是一种用于读写数据的机制。Java中的IO流分为字节流和字符流,以及输入流和输出流。本文将为您详细讲解Java中IO流的分类和使用方法,包括介绍、方法和两个示例说明。 介绍 在Java中,IO流是一种用于读写数据的机制。Java中的IO流分为字节流和字符流,以及输入流和输出流。字…

    other 2023年5月6日
    00
  • C语言单链表实现多项式相加

    下面是关于C语言单链表实现多项式相加的完整攻略。 一、单链表实现多项式的存储 多项式是由若干项组成的,每一项有系数和指数两部分构成。为了在计算机中表示多项式,我们可以采用单链表来存储。假设一个多项式为: $$P(x) = 3x^4 + 2x^3 + x^2 – 5$$ 那么我们可以采用下面的结构体来表示一个多项式中的一项: typedef struct no…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部