图解Python逻辑回归:调包实现+徒手实现

Python分类模型实战(KNN、逻辑回归、决策树、SVM)调优调参,评估模型——综合项目 Python实战,对负债率,信用卡负债违约负债率、工龄违约信用卡负债、工龄违约,分析违约与各特征之间的关系。通过循环,基础原理实现对模型SVM,KNN,逻辑回归,决策树的调优调参,自动化得到最高得分score和accuracy, 阅读详情

1、sklearn实现

from sklearn.linear_model import LogisticRegression
from sklearn.datasets.samples_generator import make_blobs
import numpy as np, matplotlib.pyplot as mp
from mpl_toolkits import mplot3d

# 创建数据
X, y = make_blobs(centers=[[2, 2, 2], [0, 0, 0]], random_state=3)

# 训练模型
model = LogisticRegression()
model.fit(X, y)

# 系数(coefficient)和截距
k = model.coef_[0]
b = model.intercept_[0]

# 可视化
fig = mp.figure()
ax = mplot3d.Axes3D(fig)  # 获取三维坐标轴
# 散点图
ax.scatter(X[:, 0], X[:, 1], X[:, 2], s=99, c=y)
# 决策边界
x1 = np.arange(X[:, 0].min()-1, X[:, 0].max()+1, 2)
x2 = np.arange(X[:, 1].min()-1, X[:, 1].max()+1, 2)
x1, x2 = np.meshgrid(x1, x2)
x3 = (b + k[0] * x1 + k[1] * x2) / - k[2]  # 边界函数
ax.plot_surface(x1, x2, x3, alpha=0.2, color='g')
mp.show()

2、徒手写一个!

import numpy as np, matplotlib.pyplot as mp
from sklearn.datasets import make_blobs

"""创建随机样本"""
X, Y = make_blobs(centers=2, cluster_std=5)

"""数据处理"""
X = np.insert(X, 0, 1, axis=1)  # 增加一列,用于矩阵相乘
Y = Y.reshape(-1, 1)

"""sigmoid函数"""
sigmoid = lambda x: 1 / (1 + np.exp(-x))

"""梯度上升"""
d = X.shape[1]  # 维数
theta = np.mat([[1]] * d)  # 初始化回归系数
for i in range(5999, 8999):
    alpha = 1 / i  # 步长(先大后小)
    h = sigmoid(X * theta)
    theta = theta + alpha * X.T * (Y - h)  # 最终梯度上升迭代公式

"""数据可视化"""
x1, x2 = X[:, 1], X[:, 2]
mp.axis([x1.min() + 1, x1.max() + 1, x2.min() + 1, x2.max() + 1])
mp.scatter(x1, x2, c=Y.reshape(-1))  # 原始样本点
x = np.array([x1.min(), x1.max()])
y = (-theta[0, 0] - theta[1, 0] * x) / theta[2, 0]  # 决策边界
mp.plot(x, y)
mp.show()

2.1、创建样本

X, y = make_blobs(centers=2, cluster_std=6)
X = np.insert(X, 0, 1, axis=1)  # 增加一列,用于矩阵相乘
y = y.reshape(-1, 1)  # 转换成n*1维的矩阵

X = ( 1 x 12 x 13 1 x 22 x 33 ⋮ ⋮ ⋮ 1 x n 2 x n 3 ) n 行 3 列 y = [ y 1 y 2 ⋮ y n ] n 行 1 列 X = \begin{pmatrix} 1 & x_{12} & x_{13}\\ 1 & x_{22} & x_{33}\\ \vdots & \vdots & \vdots\\ 1 & x_{n2} & x_{n3}\\ \end{pmatrix}_{n行3列} y=\begin{bmatrix} y_1 \\ y_2 \\ \vdots \\ y_n \end{bmatrix}_{n行1列} X=⎝⎜⎜⎜⎛​11⋮1​x12​x22​⋮xn2​​x13​x33​⋮xn3​​⎠⎟⎟⎟⎞​n行3列​y=⎣⎢⎢⎢⎡​y1​y2​⋮yn​​⎦⎥⎥⎥⎤​n行1列​

2.2、Sigmoid函数

亦称S型生长曲线。在信息科学中,常被用作神经网络的阈值函数,将变量映射到(0,1)

import numpy as np, matplotlib.pyplot as mp
sigmoid = lambda x: 1 / (1 + np.exp(-x))  # sigmoid函数
x = np.linspace(-8, 8, 65)
mp.plot(x, sigmoid(x), label=r'$S(x)=\frac{1}{1+e^{-x}}$')
mp.legend()  # 图例
mp.show()

2.3、梯度上升

d = X.shape[1]  # dimensionality
theta = np.mat([[1]] * d)  # 初始化回归系数
for i in range(9, 9999):
    alpha = 1 / i  # 学习率(前期大步迭代,后期小步迭代)
    h = sigmoid(X * theta)
    theta = theta + alpha * X.transpose() * (y - h)  # 最终梯度上升迭代公式

3、梯度下降原理

以 f ( x ) = x 2 − 2 x + 1 f(x)=x^2-2x+1 f(x)=x2−2x+1 为例,求函数的极值点
1、求导数: f ′ ( x ) = 2 x − 2 f'(x)=2x-2 f′(x)=2x−2
2、计算机使用迭代的方法,一步一步逼近极值点
3、迭代公式: x i + 1 = x i − α ∂ f ( x i ) x i = x i − α ( 2 x i − 2 ) x_{i+1}=x_i-\alpha\frac{\partial f(x_i)}{x_i}=x_i-\alpha(2x_i-2) xi+1​=xi​−αxi​∂f(xi​)​=xi​−α(2xi​−2)
import matplotlib.pyplot as mp, numpy as np

# Δx
delta = 1e-9
# 步长,即学习速率
alpha = 0.1
# 允许误差范围
precision = delta

def derivative(fx, x0):
    """求f'(x0)"""
    return (fx(x0 + delta) - fx(x0)) / delta

# 原函数
f = lambda x: x ** 2 - 2 * x + 1
x = np.linspace(0, 2, 9999)
mp.plot(x, f(x), c='black')  # 绘制函数曲线

# 梯度下降求极值点
extreme_point = 0  # 初始值
error = np.inf  # 初始化误差
while abs(error) >= precision:  # 误差小于精度时退出迭代
    mp.scatter(extreme_point, f(extreme_point), c='b', alpha=.3)  # 绘制散点
    error = alpha * derivative(f, extreme_point)  # 步伐
    extreme_point -= error  # 梯度下降
    mp.pause(.1)
    print(extreme_point, error)

4、附录

EnCn
logistic regression逻辑回归
alpha希腊字母的第1个字母: α \alpha α
theta希腊字母的第8个字母: θ \theta θ
presision精度
gradient ascent梯度上升
linspaceabbr. 线性等分向量(linear space)
abbreviation缩写词
shapen. 形状;身材;v 形成
extreme point极值点
derivative导数
partial derivatives偏导


动态图

import numpy as np, matplotlib.pyplot as mp
from sklearn.datasets import make_blobs

"""创建随机样本"""
X, Y = make_blobs(centers=2, cluster_std=5)

"""数据处理"""
X = np.insert(X, 0, 1, axis=1)  # 增加一列,用于矩阵相乘
Y = Y.reshape(-1, 1)
x1, x2 = X[:, 1], X[:, 2]
fig, ax = mp.subplots()  # 创建绘图对象

"""sigmoid函数"""
sigmoid = lambda x: 1 / (1 + np.exp(-x))

"""梯度上升"""
d = X.shape[1]  # 维数
theta = np.mat([[1]] * d)  # 初始化回归系数
for i in range(2000, 2200):
    alpha = 1 / i  # 步长(先大后小)
    h = sigmoid(X * theta)
    theta = theta + alpha * X.T * (Y - h)  # 最终梯度上升迭代公式
    """数据可视化"""
    ax.cla()  # 清除
    ax.axis([x1.min() + 1, x1.max() + 1, x2.min() + 1, x2.max() + 1])
    ax.scatter(x1, x2, c=Y.reshape(-1))  # 原始样本点
    x = np.array([x1.min(), x1.max()])
    y = (-theta[0, 0] - theta[1, 0] * x) / theta[2, 0]  # 决策边界
    ax.plot(x, y)
    mp.pause(.1)
Python 逻辑回归算法描述以及skleran调包实现 逻辑回归算法的实现过程 输入训练集 学习率 过程: 1.初始化权值参数和b 2.由梯度下降算法或者其他优化算法,跟新参数和b使得 跟新的过程见西瓜书或相关讲义   下面给出用sklearn库的调包实现 from sklearn.datasets import load_iris from sklearn.linear_model import LogisticRegres... 阅读详情

相关推荐

机器学习知识图谱——逻辑回归算法(Logistic Regression)

逻辑回归是一种 用于分类问题的监督学习算法,尽管它名字中有“回归”,但其实是用于解决 二分类或多分类 问题的。 它通过将线性回归结果映射到 (0, 1) 区间上的概率值,来实现分类判断。

moton2017的博客 1738

机器学习-逻辑回归(LogisticRegression)详解

逻辑回归详解 1.什么是逻辑回归 逻辑回归是监督学习,主要解决二分类问题。 逻辑回归虽然有回归字样,但是它是一种被用来解决分类的模型,为什么叫逻辑回归是因为它是利用回归的思想去解决了分类的问题。 逻辑回归和线性回归都是一种广义的线性模型,只不过逻辑回归的因变量(Y)服从伯努利分布(离散分布),而线性回归的因变量(Y)满足的是高斯分布(正态分布),因此他们两个是很相似的(PS:线性回归是拟合一条直线,而逻辑回归是根据sigmoid将线性变成非线性,所以去掉sigmoid,他们一样的...

yuxj的博客 1万+

《Python机器学习基础教程》第二章监督学习2.8 深度解析:线性模型入门——从线性回归到逻辑回归的全面指南

fill:#333;color:#333;color:#333;fill:none;2.8 线性模型入门2.8.1 线性回归原理2.8.2 线性回归公式推导2.8.3 逻辑回归原理2.8.4 逻辑回归公式推导2.8.5 线性回归实战示例2.8.6 逻辑回归实战示例2.8.7 线性模型在实际问题中的应用。

941

pyspark学习之——逻辑回归、模型选择与调参

       记录pyspark的MLlib库学习篇,学习资料来自spark官方文档,主要记录pyspark相关内容,要么直接翻译过来,要么加上自己的理解。spark2.4.8官方文档如下:https://spark.apache.org/docs/2.4.8/ml-classification-regression.html#logistic-regression 目录一、二分类        spark的逻辑回归即可以用.

a_dreaming的博客 7070

第20步 机器学习分类实战:Logistic回归建模(上)

Logistic回归建模(上)

Jet4505的博客 722

逻辑回归的元学习:快速适应新任务方法

为传统机器学习模型赋予快速适应能力,解决小样本场景下的分类问题。覆盖元学习核心原理、逻辑回归改造方法及实际应用场景。元学习:学习如何学习的范式,通过多个任务训练获得快速适应能力支持集:新任务中的少量样本(如5个样本/类)查询集:用于评估模型适应效果的验证集元学习是"学习如何学习"的范式逻辑回归通过二阶优化获得快速适应能力双循环结构实现参数空间的智能初始化。

AI 算法实战派 1054

逻辑回归——机器学习(图解+理论+python实现)

目录 前言 一、Sigmoid函数(核心) 二、确定最佳回归系数 三、思路总结 四、用Python实现逻辑回归算法 前言 逻辑回归虽然带有回归两字,但实际上是做分类任务的,并且是一个经典的二分类算法。在我们选择使用机器学习算法的时候,通常呢,首先考虑的就是逻辑回归算法,再去考虑另外复杂的算法,也就是说我们能用简单的还是用简单的算法。在机器学习中,算法不是越复杂越好,而是要简单、高效、...

huacha__的博客 8367

Codesys电子凸轮功能块MC_CamIn的masteroffset和slaveoffset参数的使用

问题1:在Codesys使用作轴电子凸轮时,MC_CamTableSelect的参数设置为MasterAbsolute=1,SlaveAbsolute=1,此设置为绝得模式, 此时主从轴当前位置都不为零时,此时Masteroffset=0、slaveOffset=0,凸轮启时出现突变,实轴无法启动。问题分析:在觉得模式下,主轴位置和从轴为是对应凸轮表的相位的,Masteroffset=0、slaveOffset=0,启动点时在主轴位置=0,从轴位置=0的点启动,此时主轴当前位置不为零则主从轴位置发生突变,

weixin_43587371的博客 1801

【机器学习】逻辑回归(Logistic Regression)(理论+图解+公式推导+代码实现)

文章目录一、概述二、逻辑回归是什么1.概述2.逻辑回归的原理2.1 sigmoid概率映射2.2 概率计算2.3 极大似然估计3.逻辑回归的本质4.损失函数5.权值求解三、正则项1.概述2.L1正则项3.L2正则项 欢迎回到机器学习编程系列。在这篇文章中,我们将通过MindSpore的来简单的搭建最简单的线性回归。废话不多说,我们开始吧。 一、概述 对于我们的机器学习算法来说,一般有分类模型、回归模型等,对于分类模型又分为线性模型和非线性模型,那么什么是线性模型和非线性模型呢? 如果对于一维变量来说,y=

优快云 精品推荐 6464

告别Keil手动分区!用CubeMX+VS Code一键生成带Bootloader的STM32 OTA工程

本文详细介绍了如何利用STM32CubeMX和VS Code实现STM32 OTA工程的自动化构建,告别传统Keil手动分区的繁琐流程。通过图形化配置Flash分区、自动生成链接脚本以及实现Bootloader跳转逻辑,开发者可以高效完成远程升级功能开发,显著提升嵌入式开发效率。

weixin_33720956的博客 390

Burp靶场实战:JWT签名绕过漏洞分析与利用

本文通过Burp Suite靶场实战,深入剖析了JWT签名绕过漏洞的多种攻击手法,包括签名未验证、alg:none攻击、弱密钥爆破、JWK/JKU头注入、KID路径遍历及算法混淆攻击。文章详细演示了利用过程,并提供了关键的防御指南,帮助开发和安全人员加固JWT实现,确保认证安全。

weixin_29325515的博客 602

【图解例说机器学习】逻辑回归 (Logistic Regression)

在我们日常生活中,我们经常会遇到使用到预测的事例,而预测的值一般可以是连续的,或离散的。比如,在天气预报中,预测明天的最高温,最低温(连续),亦或是明天是否下雨(离散)。在机器学习中,预测连续性变量的模型称为回归(Regression)模型,比如标准的线性回归,多项式回归;预测离散型变量的模型称为分类(Classification)模型,比如这里要介绍的逻辑回归和以后要提到的支持向量机(SVM)等...

青峰碧陋室 2344

检索生成(RAG) vs 长文本大模型:实际应用中如何选择?

大模型的上下文理解能力直接影响到 LLMs 在复杂任务和长对话中的表现。本期内容聚焦于两种主流技术:长上下文(Large Context Windows)和检索增强生成(RAG)。这两种技术各有何优势?在实际应用中,我们又该如何权衡选择?文章不仅详细阐述了这两种技术的工作原理,还深入分析了它们在效率、准确性和实施成本等方面的差异。文章特别提到了在执行重复性任务时使用 Context Caching 优化长上下文的优势,然而,缓存策略的效果很大程度上取决于提示词的可预测性。

2401_85782938的博客 1256

下载 | 9G火爆的Python爬虫教程+ 520页《图解机器学习》

前段时间,小伙伴多次在后台留言询问Python爬虫教程的问题。经过这两个多月以来的收集与整理,汇集了多个高校以及公开课视频教程,包括python爬虫的入门、进阶与实践,共9G左右。爬虫作...

木东居士 476

Meta DINOv3实战指南:如何用7B参数ViT模型搞定图像分割与检测(附Hugging Face配置)

本文提供了Meta DINOv3模型的实战应用指南,重点介绍了如何利用这个7B参数的视觉Transformer模型进行图像分割与目标检测。通过详细的Hugging Face配置步骤、环境搭建、模型加载与推理优化,帮助开发者快速上手这一强大的自监督视觉模型,并高效应用于实际计算机视觉任务中。

s3t4u的博客 907

【CASS精品教程】006:CASS7.1 道路设计参数文件打开无响应,提示roadpara解决办法,权威解决办法汇总

在用CASS7.1 软件进行断面法土方量计算,在生成断面图后,需要进行道路设计参数文件的设计,打开断面设计参数文件的时候,无响应,提示roadpara,如下所示: 道路设计参数文件 解决办法有三种 第一种方法:Win+R (1)64位系统:输入regsvr32 C:\Windows\SysWOW64\CellCtrl5.ocx,回车 (2)32位系统输入regsvr32 C:...

智慧空间实验室 1万+

机器学习-逻辑回归

逻辑回归是一种用于二分类问题的统计学习方法,通过Sigmoid函数将线性结果映射为概率值(0~1)。核心原理包括极大似然估计和对数损失函数,采用梯度下降优化参数。应用场景涵盖金融风控、医疗诊断等领域。Python实现需注意参数配置(solver、penalty等),评估指标包括精确率、召回率、F1值和AUC。案例实践表明,月合约和光纤服务用户具有较高流失风险。该模型适用于处理二分类问题,但样本不均衡时需重点关注召回率指标。

qq_64232275的博客 1393

【腾讯小龙虾WorkBuddy专栏02】保姆级安装教程!彻底分清WorkBuddy/CodeBuddy,最新积分活动&会员体系全攻略

【腾讯小龙虾WorkBuddy专栏02】保姆级安装教程!彻底分清WorkBuddy/CodeBuddy,最新积分活动&会员体系全攻略

AI人人懂 2681

干货 | 9G火爆的Python爬虫教程+ 520页《图解机器学习》

前段时间,小伙伴多次在后台留言询问Python爬虫教程的问题。经过这两个多月以来的收集与整理,汇集了多个高校以及公开课视频教程,包括python爬虫的入门、进阶与实践,共9G左右。爬虫作...

weixin_45727359的博客 411

当C#遇见声音魔法:从麦克风到文字的0.1秒奇幻漂流

为什么选300Hz?因为人声基频通常在85-255Hz,但清脆的“啊”可能到2kHz,所以300Hz是安全区!(参考知识库[1])

墨夶的博客 366

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

逻辑回归(Logistic Regression)

逻辑回归(Logistic Regression)

qq_45030475的博客 178

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

NG机器学习总结-(四)逻辑回归

在第一篇博客NG机器学习总结一中,我们提到了监督学习通常一般可以分为两类:回归和分类。线性回归属于回归问题,例如房价的预测问题。而判断一封邮件是否是垃圾邮件、肿瘤的判断(良性还是恶性)、在线交易是否欺诈都是分类问题,当然这些都是二分类的问题。 Email:Spam / Not Spam? (是否垃圾邮件) Online Transactions : Fraudulent(Yes or No)...

徐先森的博客 1239

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

上一篇: Python【打印进度条】
下一篇: Python写日志【自用】
小基基o_O
博客等级 码龄9年 4414粉丝 467原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小基基o_O

您的鼓励是我创作的巨大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值