第五章 逻辑回归

news2024/11/27 8:36:49

第五章 逻辑回归

Logistic回归的⼀般过程

  1. 收集数据:采⽤任意⽅法收集数据。
  2. 准备数据:由于需要进⾏距离计算,因此要求数据类型为数值型。另外,结构化数据格式则最佳。
  3. 分析数据:采⽤任意⽅法对数据进⾏分析。
  4. 训练算法:⼤部分时间将⽤于训练,训练的⽬的是为了找到最佳的分类回归系数。
  5. 测试算法:⼀旦训练步骤完成,分类将会很快。
  6. 使⽤算法

5.1基于逻辑回归和Sigmod函数的分类

逻辑回归:

  • 优点:计算代价不⾼,易于理解和实现。
  • 缺点:容易⽋拟合,分类精度可能不⾼。
    适⽤数据类型:数值型和标称型数据

Sigmoid函数: σ ( z ) = 1 1 + e − z \sigma(z)=\frac1{1+\mathrm{e}^{-z}} σ(z)=1+ez1

import numpy as np
import matplotlib.pyplot as plt

def sigmoid(x):
    return 1 / (1 + np.exp(-x))

# Generate x values from -10 to 10
x = np.linspace(-10, 10, 100)

# Calculate corresponding y values using the sigmoid function
y = sigmoid(x)

# Plot the sigmoid curve
plt.plot(x, y)
plt.xlabel('x')
plt.ylabel('sigmoid(x)')
plt.title('Sigmoid Function')
plt.grid(True)
plt.show()

在这里插入图片描述

5.2基于最优化⽅法的最佳回归系数确定

sigmoid的输入记为 z = w 0 x 0 + w 1 x 1 + w 2 x 2 + ⋯ + w n x n z=w_0x_0+w_1x_1+w_2x_2+\cdots+w_nx_n z=w0x0+w1x1+w2x2++wnxn z = w T x z=w^Tx z=wTx

5.2.1梯度上升法和梯度下降法

梯度 ∇ f ( x , y ) = ( ∂ f ( x , y ) ∂ x ∂ f ( x , y ) ∂ y ) \nabla f(x,y)=\begin{pmatrix}\dfrac{\partial f(x,y)}{\partial x}\\\\\dfrac{\partial f(x,y)}{\partial y}\end{pmatrix} f(x,y)= xf(x,y)yf(x,y)

在这里插入图片描述

沿梯度上升的方向进行移动,直到移动到满足条件的点
梯度是移动方向,没有移动大小,先定义移动的大小为步长 α \alpha α w : = w + α ∇ w f ( w ) w:= w+\alpha\nabla_wf(w) w:=w+αwf(w)
梯度下降则: w : = w − α ∇ w f ( w ) w:= w-\alpha\nabla_wf(w) w:=wαwf(w)

5.2.2训练算法:使用梯度上升找到最佳参数

伪代码:

  1. 每个回归系数初始化为1
  2. 重复R次:
    1. 计算整个数据集的梯度
    2. 使⽤alpha × gradient更新回归系数的向量
  3. 返回回归系数
def sigmoid(inX):
    return 1.0 / (1 + np.exp(-inX))
def loadDataSet():
    dataMat = []; classLabels = []
    fr = open('05testSet.txt')
    for line in fr.readlines():
        lineArr = line.strip().split()
        dataMat.append(np.array([1.0, float(lineArr[0]), float(lineArr[1])]))
        classLabels.append(int(lineArr[2]))
    return np.array(dataMat), np.array(classLabels)


dataMat, classLabels=loadDataSet()
# print(type(dataMat[:5][0]))
# print((dataMat[:5][0]))
print(dataMat[:5])
print(classLabels[:5])
[[ 1.       -0.017612 14.053064]
 [ 1.       -1.395634  4.662541]
 [ 1.       -0.752157  6.53862 ]
 [ 1.       -1.322371  7.152853]
 [ 1.        0.423363 11.054677]]
[0 1 0 0 0]

以上为载入数据集,以下进行数据的可视化

import matplotlib.pyplot as plt
import numpy as np
x = [row[1] for row in dataMat]
y = [row[2] for row in dataMat]
plt.scatter(x, y, c=['blue' if row == 1 else 'red' for row in classLabels])
plt.xlabel('X')
plt.ylabel('Y')

plt.show()

在这里插入图片描述

def stocGradAscent(dataMatrix, classLabels, numIter=100):
    m, n = np.shape(dataMatrix)
    weights = np.ones(n)   #initialize to all ones
    for j in range(numIter):
        dataIndex = list(range(m))
        for i in range(m):
            alpha = 4/(1.0+j+i)+0.0001    #apha decreases with iteration, does not
            randIndex = int(np.random.uniform(0, len(dataIndex)))#go to 0 because of the constant
            h = sigmoid(sum(dataMatrix[randIndex]*weights))
            error = classLabels[randIndex] - h
            weights = weights + alpha * error * dataMatrix[randIndex]
            del(dataIndex[randIndex])
    return weights
weights=stocGradAscent(dataMat,classLabels)
print(weights)
[13.19101136  0.94717459 -1.66951319]

上诉为梯度下降函数,进行numIter次训练。
alpha为步长,alpha = 4/(1.0+j+i)+0.0001前期ij较大,学习率高,梯度变化大;后期则反之
h经过sigmoid激活后,表示分类
error为真实和预测的差值
权重weights通过alpha、error、点共同更新

5.2.3分析数据:画出决策边界

在更新梯度中 x = [ 1 , p o i n t x , p o i n t y ] x=[1,\mathrm{point_x},\mathrm{point_y}] x=[1,pointx,pointy], w T x → 0 w^Tx\rightarrow0 wTx0
[ w 0 , w 1 , w 2 ] ∗ [ 1 , p o i n t x , p o i n t y ] = 0 [w_0,w_1,w_2]*[1,\mathrm{point_x},\mathrm{point_y}]=0 [w0,w1,w2][1,pointx,pointy]=0可得 p o i n t y = − w 1 p o i n t x − w 0 w 2 \mathrm{point_y} =\cfrac{-w_1 \mathrm{point_x}-w_0}{w_2} pointy=w2w1pointxw0
根据权重weights绘图

x = [row[1] for row in dataMat]
y = [row[2] for row in dataMat]
plt.scatter(x, y, c=['blue' if classLabel == 1 else 'red' for classLabel in classLabels])
plt.xlabel('X')
plt.ylabel('Y')

x = np.linspace(min(x), max(x), 100)
y =(-weights[0]-weights[1]*x)/weights[2]

plt.plot(x, y)

plt.show()

在这里插入图片描述

5.3调用库进行逻辑回归

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression

# 定义数据集
def loadDataSet():
    dataMat = []; classLabels = []
    fr = open('05testSet.txt')
    for line in fr.readlines():
        lineArr = line.strip().split()
        dataMat.append(np.array([ float(lineArr[0]), float(lineArr[1])]))
        classLabels.append(int(lineArr[2]))
    return np.array(dataMat), np.array(classLabels)



dataMat,classLabels = loadDataSet()
colorLables=['red' if label else 'blue' for label in classLabels]
x,y=dataMat[:,0],dataMat[:,1]

# 创建逻辑回归模型
model = LogisticRegression()

# 使用数据拟合模型
model.fit(dataMat, classLabels)


plt.figure()
plt.scatter(x, y, c=colorLables)
x_min, x_max = x.min() - 1, x.max() + 1
y_min, y_max = y.min() - 1, y.max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02),
                     np.arange(y_min, y_max, 0.02))
Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
print(Z)
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, alpha=0.2)

plt.title('Logistic Regression')
plt.xlabel('X')
plt.ylabel('Y')
plt.show()

在这里插入图片描述

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

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

相关文章

Golang每日一练(leetDay0118) 扁平化嵌套列表迭代器、整数拆分

目录 341. 扁平化嵌套列表迭代器 Flatten Nested List Iterator 🌟🌟 343. 整数拆分 Integer Break 🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/…

vscode工作区实现机制

工作区是编辑器的重要部分,它承载着编辑器和本地文件的连接,对文件增、删、改、查。下面我会介绍vscode工作区的创建。同样我们知道vscode软件打开的时候没有默认工作区,这里我对它进行了改造,软件启动时指向默认工作区。 工作区目…

提高腾讯QQ(电脑版)语音通话、视频聊天和远程协助的稳定性的方法

一、背景说明 腾讯QQ默认使用的通讯协议是UDP。但是各大运营商将UDP的优先级设置为最低,导致UDP数据包经常被丢弃。导致腾讯QQ在语音通话、视频聊天和远程协助的时候,会出现连接不上、卡顿和断线,非常不稳定。我们可以手动将通讯协议调整为TC…

用Python实现自动化交易:从趋势到收益

在现代金融市场中,自动化交易已经成为越来越流行的一种方式。相比于传统的手工交易方式,自动化交易更加高效、精准、快速且免除了人为因素的影响。而Python作为一种高级编程语言,凭借其简单易学、灵活性强的优势逐渐成为自动化交易中最受欢迎…

Ubuntu下Go语言TCP广播服务器实现

最近在学习Go语言网络编程,突然想到很久以前的用C语言写过的TCP广播聊天程序,然后就用Go尝试写了一遍,在此做个记录。 目录 1.广播结构 2.实现效果 3.源码 4.Go语言学习参考网站 1.广播结构 2.实现效果 服务器: 客户端1&…

小程序 web-view h5页面背景音乐自动播放

/*** 年度账单-登录首页*/ import React,{useEffect} from react import swiper/swiper-bundle.min.css import styles from ./styles.less import bgm from ./bgm2.mp3 // 主体 const annualAccountLoginIndex (props) > {const goAnnualAccount ()>{const {location: …

Java Web Tomcat 23.7.5

Tomcat 1, Tomcat 1.1 简介 1.1.1 什么是Web服务器 Web服务器是一个应用程序(软件),对HTTP协议的操作进行封装,使得程序员不必直接对协议进行操作,让Web开发更加便捷。主要功能是"提供网上信息浏览服务"…

[Python系列] Python虚拟环境Virtualenv

1. 什么是Virtualenv Python virtualenv 是一个用于创建和管理虚拟环境的工具。它可以帮助开发者在不同的项目中使用不同的 Python 版本和包,而不会相互干扰。使用 virtualenv,可以轻松地创建一个独立的 Python 环境,在其中安装所需的包和版本…

【网络】思科网络vlan配置+单臂路由

文章目录 前言一、vlan(虚拟局域网)二、配置vlan配置交换机0配置交换机1(和交换机0相同)配置计算机:测试联通性 三、单臂路由配置R0配置交换机1测试配置: 前言 VLAN(Virtual Local Area Networ…

力扣 491. 递增子序列

题目来源:https://leetcode.cn/problems/non-decreasing-subsequences/description/ 回溯三部曲(来源代码随想录): 递归函数参数:求子序列,很明显一个元素不能重复使用,所以需要startIndex&…

2023年 vue使用腾讯地图搜索、关键字输入提示、地点显示

先看结果 vue 在public文件下的index.html文件中引入&#xff1a; <script src"//map.qq.com/api/js?v2.exp&key你自己的key"></script><script src"https://map.qq.com/api/gljs?v1.exp&librariesservice&key你自己的key"&…

【保姆级教程】PyCharm通过SSH远程连接ModelArts

文章目录 一、创建Notebook二、配置SSH三、配置远程Python解释器四、成果展示 一、创建Notebook 首先&#xff0c;找到云资源下面的 ModelArts&#xff0c;然后点击并进入 ModelArts控制台。 在ModelArts控制台中&#xff0c;点击开发环境下的 Notebook 。然后点击创建&#x…

记录一次Nginx日志偶现499的排查

背景 查看到nginx日志在整点整分的时候频繁出现 499&#xff0c;因为配置了存活检查和就绪检查&#xff0c;担心业务会出现大面积重建导致现网故障&#xff0c;所以对出现499的原因进行排查&#xff0c;记录下排查思路&#xff0c;方便以后查看。 业务链路&#xff1a; 负载均…

B/S版手术麻醉系统源码,基于php、mysql和vue2开发

手术麻醉系统是一套以数字形式与医院信息系统&#xff08;如HIS、EMR、LIS、PACS等&#xff09;和医疗设备等软、硬件集成并获取围手术期相关信息的计算机系统&#xff0c;其核心是对围手术期患者信息自动采集、储存、分析并呈现。该系统通过整合围手术期中病人信息、人员信息、…

Packet Tracer – 研究 NAT 操作

Packet Tracer – 研究 NAT 操作 目标 第 1 部分&#xff1a;通过内联网研究 NAT 操作 第 2 部分&#xff1a;研究互联网中的 NAT 操作 第 3 部分&#xff1a;执行进一步研究 拓扑图 场景 帧通过网络时&#xff0c;MAC 地址可能更改。 当数据包由配置了 NAT 的设备转发时&…

转录组和蛋白组如何关联分析?先从绘制九象限图开始

转录组和蛋白组如何关联分析&#xff1f;先从绘制九象限图开始 五种常用蛋白质组学定量分析方法对比 - 知乎 (zhihu.com) 九象限图在多组学关联分析中非常重要&#xff0c;例如我们可以用九象限图展示“转录组蛋白组”、“转录组翻译组”等关联分析中不同基因的差异表达情况。…

DotNet VOL.Core框架学习使用笔记(二)(持续更新)

2023-7-5 生成代码的列表界面&#xff0c;在数据行里增加一个操作列 查看按钮&#xff0c;打开编辑框&#xff0c;然后让编辑框成为一个只读的查看界面。 页面对应的js文件中增加如下 this.columns.push 函数内容。 按钮的点击事件 重点代码 this.edit(row); 这就是框架里编…

构建工具——webpack、vite

文章目录 构建工具Webpack使用步骤配置文件&#xff08;webpack.config.js&#xff09;插件&#xff08;plugin&#xff09; ViteVite 也是前端的构建工具使用命令构建配置文件&#xff1a;vite.config.js 构建工具 当我们习惯了在 node 中编写代码的方式后&#xff0c;在回到…

page-break-after: always打印时强制分页

page-break-before 元素在指定元素前添加分页符。 <div stylepage-break-after: always;></div> <p stylepage-break-after: always;></p>https://www.runoob.com/cssref/pr-print-pagebb.html

小样本图像目标检测研究综述——张振伟论文阅读

小样本图像目标检测研究综述——张振伟&#xff08;计算机工程与应用 2022&#xff09; 论文阅读 目前&#xff0c;小样本图像目标检测方法多基于经典的俩阶段目标检测算法Faster R-CNN作为主干网络&#xff0c;当然也有将YOLO&#xff0c;SSD一阶段目标检测算法作为主干网络的…