逻辑回归理论以及代码复现
前言在上一系列文章我们讲了线性回归的相关知识,回归和分类是机器学习中两种核心的任务类型,它们的根本区别在于目标变量的性质。回归任务旨在预测一个连续的数值输出,例如预测房价、温度或销售额等,其目标是建立一个模型来拟合输入特征与连续目标值之间的关系。而分类任务则是预测离散的类别标签,比如判断邮件是否为垃圾邮件、图像中的人物身份,或者是疾病诊断等,其目的是通过模型将输入数据划分到预定义的类别中。本系列文章主要来讲讲如何应用逻辑回归来对数据进行分类。 一、基础理论部分逻辑回归(Logistic Regression)是一种广泛应用于二分类问题的统计学习方法,通过将系数与自变量的线性计算结果输入到sigmoid函数中,得到概率预测值,从而达到分类的效果。 1.1 sigmoid函数在逻辑回归中,Sigmoid函数用于将线性组合的输出映射到(0, 1)区间,从而将问题转化为概率预测问题 下面是一个对Sigmoid函数解释以及逻辑回归的预测函数推导 这里值得注意的是sigmoid函数的输入部分,笔记里写的是线性预测值,实际上是线性计算值,意思是并非线性回归得到的参数,这里的参数the...
线性回归(二):三种梯度下降法对比以及如何通过正则化解决过拟合问题
前言上一篇文章讲了线性回归的基础理论以及sklearn库底层代码实现,这一篇文章我们来讲讲对于不同的梯度下降法,模型参数的更新效果有什么不同,这里列出了批量梯度下降法,随机梯度下降法和小批量梯度下降法三种,并且在文章的最后,还介绍了多项式回归以及如何通过岭回归对数据进行正则化从而降低模型过拟合风险。 首先回归一下之前的知识,对回归参数进行优化的本质实际上是使用梯度下降最小化目标损失函数,也就是求损失函数对参数的导数。 这里的 θ是模型输入特征对应的参数,在梯度下降中,每次迭代选定一个样本(或一批样本),然后根据这个样本计算所有参数的梯度,并根据这些梯度更新所有参数。 一、三种梯度下降对比1.1 BGD批量梯度下降简单粗暴的每次都选取所用样本来进行梯度下降,这样虽然能达到优化参数的效果,并且迭代次数相对较小,但是在大数据样本中,这样的矩阵计算量是比较大的 12345678910111213141516171819202122232425262728293031323334353637383940n_iterations = 1000#迭代次数m = len(x_b)#样本数...
模型评估方法
前言这一篇文章我们基于随机梯度下降分类器(一种线性分类器)来讲讲如何对模型准确度进行评估,涉及到交叉验证,混淆矩阵以及ROC曲线等内容 一、交叉验证在机器学习中,我们通常把数据分成训练集和验证集,交叉验证可以确保模型在不同的数据子集上都能表现良好。如果模型在某些子集上表现很好,但在其他子集上表现很差,这可能表明模型存在过拟合或欠拟合的问题。通过交叉验证,可以更全面地评估模型的泛化能力,从而避免过拟合和欠拟合。 下面对比两种检查验证的特点 可以看出似乎K折检查验证更加科学,接下来我们展示一个K折交叉验证的案例 当然,也可以用**StratifiedKFold实现** 123456789101112131415161718192021222324252627282930313233343536373839404142434445import numpy as npimport osimport matplotlib.pyplot as pltimport pandas as pdplt.rcParams["axes.labelsize"] = 14plt.rc...
线性回归(一):线性回归理论以及代码复现
前言 线性回归是一种统计方法,用于建立一个或多个自变量(解释变量)与因变量(响应变量)之间的关系。线性回归模型假设因变量与自变量之间存在线性关系,即因变量可以表示为自变量的线性组合加上一个随机误差项。通俗来讲,线性回归就是找到一条直线(或者平面)来拟合数据点,在这条直线后面,我们加入了一个误差项,并且假设这个误差符合正态分布并且相互独立。 说到假设: 线性关系:因变量与自变量之间存在线性关系。 独立性:自变量之间相互独立,没有多重共线性。 正态性:随机误差项 ϵ 服从正态分布。 同方差性:随机误差项 ϵ 的方差在所有自变量的取值范围内保持不变。 无自相关:随机误差项 ϵ 之间相互独立,没有自相关性。 一、理论部分简单概述对于简单线性回归的每个样本x以及对应的输出y,我们假设: 对于多元线性回归的每个样本矩阵X以及对应的输出y,我们假设: y 是因变量向量,大小为 n×1。 X 是设计矩阵,大小为 n×(p+1),其中第一列是常数项(全为1),其余列是自变量的值。 β 是参数向量,大小为 (p+1)×1。这里p+1的1表示截距项 β_0 ϵ...
数组与链表
前言力扣刷题知识笔记和思路记录 刷题指南参考:CyC2018/CS-Notes: :books: 技术面试必备基础知识、Leetcode、计算机操作系统、计算机网络、系统设计https://github.com/CyC2018/CS-Notes/tree/master/ 知识点参考:Hello 算法!https://www.hello-algo.com/ 一、数组(1)280-移动零给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 123输入: nums = [0,1,0,3,12]输出: [1,3,12,0,0] 示例 2: 123输入: nums = [0]输出: [0] 12345678910111213141516171819class Solution(object): def moveZeroes(self, nums): """ :type nums: List[int] ...
二分查找
刷题指南参考:CyC2018/CS-Notes: :books: 技术面试必备基础知识、Leetcode、计算机操作系统、计算机网络、系统设计https://github.com/CyC2018/CS-Notes/tree/master/ 知识点参考:Hello 算法https://www.hello-algo.com/ 前言力扣刷题学习笔记和思路记录 1.基础知识 在一个已经排好序的数组中(可能需要自己来排序),我们需要用尽可能快速的方法来查找一个元素,通常想到的方法是线性查找,既通过遍历的方法来进行暴力搜索 1.1 线性查找时间复杂度计算: 最坏情况:O(n),平均情况:O(n),空间复杂度:O(1) 1234567891011121314151617def linear_search(arr, x): for i in range(len(arr)): if arr[i] == x: return i return -1nums = [4,5,9,10,12,15,17]target = 9index = ...
python基础语法
前言语言:Python(python==3.9) 编译软件:VScode、PyCharm 环境:Anaconda 一、Python注释和输入输出注释分为单行注释,多行注释,被注释的代码不会运行,快捷键:选中代码+Ctrl+/ 主要功能有: 1.对代码进行注释,方便进行理解 2.对代码进行禁用 1.单行注释1234# 单行注释# 我是一个注释 不是运行的代码 写代码的时候:Ctrl+/# print("hello")print(123) **运行结果:**123 2.多行注释123456"""三引号引号内代码都注释随便写多少行"""print("hello") **运行结果:**hello 3.输入和输出1234567# 输出print("打印文本")print("打印数字:",123)print("文本1","文本2","文本3",sep = ...
numpy,pandas,matplotlib库的使用
前言:Python三个常用库的学习笔记 一、numpy1.1 数组创建创建函数:array() 几个参数: object:默认参数,输入一个列表,列表中又可以嵌套列表来表示多维数据 dtype:指定数据类型,可选,如果不指定则自动识别 order:指定存储方式,C-按行(先存储第一行的所有元素,然后是第二行的所有元素) F-按列(先存储第一列的所有元素,然后是第二列的所有元素,依此类推) ndmin: 设置数组维度,一般嵌套有几层列表就是几维 1234a = np.array([[1,2,3],[4,5,6]], dtype = np.float32, order = "F", ndmin = 3) 运行结果: array([[[1., 2., 3.], [4., 5., 6.]]], dtype=float32) 打印数组形状 返回一个元组(行,列) 12a = np.array([[1,2,3],[4,5,6],[7,8,9]])print(a.shape) ...