python机器学习《基于逻辑回归的预测分类》

news2024/12/28 7:03:22

前言:

        本文所有代码均在阿里天池实验室运行,本机的jupyter notebook也可运行。除此之外,还需要导入numpy,matplotlib,sklearn,seaborn包。每期文章前面都会有环境搭建说明。文中的讲解知识点均是按照从上往下讲解,将一些平常未接触到的知识点先将清楚,再融合自己的想法去学习探索。

一、学习知识点概要

预备知识:

  1. 基本的python语法,例如import语句,传参知识
  2. 会基本的配置环境的命令,如:本章会利用到的seaborn包。会用pip install seaborn进行安装
  3. 会基本的画图指令(matplotlib)和数据操作(numpy)
  4. 一些基本的数据概念,测试集,训练集,特诊,准确率等等

本节知识:

  1. 逻辑回归的理论和实践知识
  2. 掌握seaborn函数的调用并运用到鸢尾花数据进行预测
  3. 本文主要研究逻辑回归在机器学习中的应用

二、学习内容

逻辑回归

2.1 逻辑回归的介绍

逻辑回归(Logistic regression)是一个分类模型,不是回归模型。并且广泛运用再各个领域,虽然在深度学习中相对更火,但由于其独特的优势,被广泛运用于各个领域中。

对于逻辑回归而言,最为突出的两点就是模型简单和模型的可解释性强。

逻辑回归模型的优劣势:

  • 优点:实现简单,易于理解和实现;计算代价不高,速度很快,存储资源低;
  • 缺点:容易欠拟合,分类精度可能不高

2.2 逻辑回归的应用

2.2.1 医学

逻辑回归模型广泛运用在各个领域,包括机器学习,大多数医学领域和社会科学。例如,最初由Boyd等人开发的创伤和损伤严重度评分(TRISS)被广泛运用于预测受伤患者的死亡率,使用逻辑回归基于观察到的患者特征(年龄,性别,体重指数,各种血液检查的结果等)分析预测发生特定疾病(例如糖尿病,冠心病)的风险。

2.2.2 商业市场

逻辑回归模型也用于预测在给定的过程中,系统或产品的故障可能性,还用于市场营销应用程序,例如预测客户购买产品或中止订购的倾向等。在经济学中它可以用来预测一个人选择进入劳动市场的可能性,而商业应用则可以用来预测房主拖欠抵押贷款的可能性。

2.2.3 其他延申

条件随机字段是逻辑回归到顺序数据的扩展,用于自然语言处理。逻辑回归模型现在同样是很多分类算法的基础组件,比如 分类任务中基于GBDT算法+LR逻辑回归的信用卡交易反欺诈,CTR(点击通过率)预估等,其好处在于输出值自然地落在0和1之间,并且有概率意义。模型清晰。有对应的概率学理论基础。它拟合出来的参数就代表了每一个特征对结果的影响。也是一个理解数据的好工具。但同时由于其本质是一个线性的分类器,所以不能应对较为复杂的情况。很多时候我们也会拿逻辑回归模型去做一些任务尝试的基线

三、学习问题与解答

3.1 遇到的bug:

  • 数据集x增加,y没有变化

 解决办法:

y_label = np.array([0,0,0,1,1,1])的值增加两个,可以是0和1

  • 逻辑回归模型的fit函数传参需要注意顺序

 解决办法:

上述代码改写成

lr_clf = lr_clf.fit(x_features,y_abel)

3.2 学习中测试:

3.2.1可视化构造数据样本点

## 可视化构造的数据样本点
plt.figure()
plt.scatter(x_fearures[:,0],x_fearures[:,1], c=y_label, s=50, cmap=None)
plt.title('Dataset')
plt.show()

plt.scatter参数的详细说明:

第一个参数 x_fearures[:,0]传入为第一个坐标,x_fearures[:,1]传入为第二个坐标,c = y_label表示对应的y的值,s=50描述的是所标出的图像的大小,cmap = None表示图中小圈的颜色

 3.2.2 可视化决策边界

3.2.2.1 np.meshgrid():

x_min ,y_min分别表示-3.3,和3.3即为最小值和最大值

np.linspace(x_min,x_max,nx)函数,把所在区间分成了nx份

np.meshgrid()函数用于将两个向量,转换成两个维度相同的矩阵,假如x向量为1行五列的向量,y向量为四行一列的向量,此函数可以得到两个行数为4,列数为5的矩阵。

实验证明:

 

我们将数据改成肉眼可以分辨清楚的数据,比如将上述的nx,ny从200,100分别下调至20,10。得到的结果会是和理论一样

 3.2.2.2 np.c_([],[]):

用于两个数组合并,示例

3.2.2.3 np.predict_proba()

这是一个用于计算x到y之间预测准确率的函数,第一个表示正确的概率,第二个表示错误的概率,相加起来会是1

 3.2.2.4 进行向量维度之间的转换

ravel函数用于将多维的矩阵转成一维的向量

 reshape函数用于强制转换

 

代码:

##  基础函数库
import numpy as np 

## 导入画图库
import matplotlib.pyplot as plt
import seaborn as sns

## 导入逻辑回归模型函数
from sklearn.linear_model import LogisticRegression

##Demo演示LogisticRegression分类

## 构造数据集
x_fearures = np.array([[-1, -2], [-2, -1], [-3, -2], [1, 3], [2, 1], [3, 2],[4,4],[5,5]])
y_label = np.array([0, 0, 0, 1, 1, 1,1,1])



## 调用逻辑回归模型
lr_clf = LogisticRegression()

## 用逻辑回归模型拟合构造的数据集
lr_clf = lr_clf.fit(x_fearures ,y_label) #其拟合方程为 y=w0+w1*x1+w2*x2

## 查看其对应模型的w
print('the weight of Logistic Regression:',lr_clf.coef_)

## 查看其对应模型的w0
print('the intercept(w0) of Logistic Regression:',lr_clf.intercept_)

## 可视化构造的数据样本点
plt.figure()
plt.scatter(x_fearures[:,0],x_fearures[:,1], c=y_label, s=50, cmap='viridis')
plt.title('Dataset')
plt.show()

# 可视化决策边界
plt.figure()
plt.scatter(x_fearures[:,0],x_fearures[:,1], c=y_label, s=50, cmap='viridis')
plt.title('Dataset')

nx, ny = 200, 100
x_min, x_max = plt.xlim()
y_min, y_max = plt.ylim()
x_grid, y_grid = np.meshgrid(np.linspace(x_min, x_max, nx),np.linspace(y_min, y_max, ny))

z_proba = lr_clf.predict_proba(np.c_[x_grid.ravel(), y_grid.ravel()])
z_proba = z_proba[:, 1].reshape(x_grid.shape)
plt.contour(x_grid, y_grid, z_proba, [0.5], linewidths=2., colors='blue')

plt.show()

### 可视化预测新样本

plt.figure()
## new point 1
x_fearures_new1 = np.array([[0, -1]])
plt.scatter(x_fearures_new1[:,0],x_fearures_new1[:,1], s=50, cmap='viridis')
plt.annotate(s='New point 1',xy=(0,-1),xytext=(-2,0),color='blue',arrowprops=dict(arrowstyle='-|>',connectionstyle='arc3',color='red'))

## new point 2
x_fearures_new2 = np.array([[1, 2]])
plt.scatter(x_fearures_new2[:,0],x_fearures_new2[:,1], s=50, cmap='viridis')
plt.annotate(s='New point 2',xy=(1,2),xytext=(-1.5,2.5),color='red',arrowprops=dict(arrowstyle='-|>',connectionstyle='arc3',color='red'))

## 训练样本
plt.scatter(x_fearures[:,0],x_fearures[:,1], c=y_label, s=50, cmap='viridis')
plt.title('Dataset')

# 可视化决策边界
plt.contour(x_grid, y_grid, z_proba, [0.5], linewidths=2., colors='blue')

plt.show()

## 在训练集和测试集上分别利用训练好的模型进行预测
y_label_new1_predict = lr_clf.predict(x_fearures_new1)
y_label_new2_predict = lr_clf.predict(x_fearures_new2)

print('The New point 1 predict class:\n',y_label_new1_predict)
print('The New point 2 predict class:\n',y_label_new2_predict)

## 由于逻辑回归模型是概率预测模型(前文介绍的 p = p(y=1|x,\theta)),所以我们可以利用 predict_proba 函数预测其概率
y_label_new1_predict_proba = lr_clf.predict_proba(x_fearures_new1)
y_label_new2_predict_proba = lr_clf.predict_proba(x_fearures_new2)

print('The New point 1 predict Probability of each class:\n',y_label_new1_predict_proba)
print('The New point 2 predict Probability of each class:\n',y_label_new2_predict_proba)

四、学习思考与总结

        在本文开始之前,已经有对逻辑回归模型有一定的了解,发现仅仅是了解单独会如何使用spss软件进行逻辑回归太过于简陋,通过这次的学习:

  • 已经学会用python绘制混淆矩阵的热力图来检验实验的准确性。
  • 运用python绘制2D情况下不同的特征组合对于不同类别的花的散点分布,以及大概的区分能力。
  • 利用箱型图我们也可以得到不同类别在不同特征上的分布差异情况。
  • 选取其前三个特征绘制三维散点图。
  • 并且通过实验的方式证明为什么逻辑回归最好只是用于二分类,而对于多分类,逻辑回归得出的分类情况会下降。

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

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

相关文章

⼯⼚⽅法模式

⼯⼚⽅法模式 ⼯⼚⽅法模式,属于创建者模式中的一种,这类模式提供创建对象的机制, 能够提升已有代码的灵活性和可复⽤性。 创建者模式包括:⼯⼚⽅法、抽象⼯⼚、⽣成器、原型、单例,这5类。 1.⼯⼚⽅法模式介绍 ⼯⼚…

LaoCat带你认识容器与镜像(二【一章】)

系列二章,祝大家新的一年事事顺心,想要的一定都实现。 本章内容 使用Docker镜像。 本文实操全部基于Ubuntu 20.04 一、使用Docker镜像 镜像(image)是Docker三大核心概念中最重要的,Docker运行容器前需要本地存在对应得…

在wsl下开发T113的主线linux(5)-构建ubi文件系统

接下来是构建文件系统,这里使用最新的buildroothttps://buildroot.org/download.htmlhttps://buildroot.org/download.html tar xf buildroot-2022.11.tar.gz cd buildroot-2022.11 make menuconfig 配置目标指令集类型 配置外部自定义编译器 配置生成文件系统类型…

数据结构和算法--算法与数据结构的概述、简单排序

目录 算法 算法概述 算法复杂度 数据结构 数据结构的概述 物理结构 逻辑结构 简单排序 1.选择排序 1.1算法描述 1.2算法实现 2冒泡排序 2.1算法描述 2.2算法实现 3插入排序 3.1算法描述 3.2算法实现 三种算法的比较 算法 算法概述 算法是一系列程序指令&am…

回溯算法题型

目录 一组合总和 二组合总和 三子集 四全排列 五解数独 一组合总和 题目描述: 找出所有相加之和为 n 的 k 个数的组合,且满足下列条件: 只使用数字1到9每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组…

ArcGIS基础:提取道路中心线

本实验为对道路路面数据进行中心线提取 以路边两侧边界为准,运用等分的办法实现道路中心线提取,原始数据如下所示(来源于网络)。 道路顶端有一些圆弧段的部分,需要把其去除。 首先要做的是面转线操作,如下…

HashMap解读

1.简介 HashMap ,是一种散列表,用于存储 key-value 键值对的数据结构,一般翻译为“哈希表”,提供平均时间复杂度为 O(1) 的、基于 key 级别的 get/put 等操作。 2.哈希表结构 哈希表结构为数组,链表和红黑树。如图 …

已解决+ FullyQualifiedErrorId : UnauthorizedAccess

已解决无法加载文件 E:\day_01\Scripts\activate.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID135170 中的about_Execution_Policies。 CategoryInfo: SecurityError: (:) [ ]…

Spring Bean的配置详解

目录 1.bean基础配置 例如:配置UserDaolmpl由Spring容器负责管理 2.Spring开发中主要是对Bean的配置, Bean的常用配置一览如下: 3.bean的别名配置 4.bean作用范围配置 5.bean的实例化 6.bean生命周期 7.Spring的get方法 8.Bean的延迟加载…

57. 数据增广 / 图像增广 代码实现

1. 图像增广 在对常用图像增广方法的探索时,我们将使用下面这个尺寸为400 x 500的图像作为示例。 从github上把img下载下来后,放到同一目录下: d2l.set_figsize() img d2l.Image.open(./img/cat1.jpg) d2l.plt.imshow(img);大多数图像增广…

数字通信系统和模拟通信系统的简单介绍

关于数字和模拟,比较形象的一个对比如下图所示。 模拟系统就好比传统的钟表,秒钟一直在走,也就是连续之意;而数字系统相当于数字表,“ :”的闪烁相当于二进制的 0 和 1,有离散之意。 模拟通信系…

a billion ways to grasp

https://blog.csdn.net/weixin_26752765/article/details/108132661 翻译自 https://darshanhegde.github.io/blog/2020/heuristics-for-robotic-grasping/ 讲述了各种抓取 https://rpal.cse.usf.edu/competition_iros2021/ Grasping is one of the fundamental subtask of a r…

ECCV 2022|DynamicDepth:动态场景下的多帧自监督深度估计

🏆前言:本文别名DynamicDepth (github),如本文的名字所示,本文着重处理的就是动态场景下的多帧自监督深度估计问题。因为MVS在动态场景下会失效,所以在动态区域的多帧深度并不可靠。现在的已有方法例如ManyDepth,利用t…

老王linux面试题汇总

1.统计一个网站的访问量,统计网站访问次数最多的前几名的IP地址。 2.取两个文件的相同和不同行 3.分别创建10个账号(user1-user10) 5.独立磁盘冗余阵列RAID O,1,5,6,10,01级别区别 5.1磁盘利用率 5.2最少几盘磁盘实现 5.3容错性,…

(十二)大白话对于VARCHAR这种变长字段,在磁盘上到底是如何存储的?

文章目录 1、一行数据在磁盘上存储的时候,包含哪些东西?2、变长字段在磁盘中是怎么存储的?3、存储在磁盘文件里的变长字段,为什么难以读取?4、引入变长字段的长度列表,解决一行数据的读取问题5、引入变长字段长度列表后,如何解决变长字段的读取问题?6、如果有多个变长字…

蒙特卡洛积分、重要性采样、低差异序列

渲染公式 渲染的目标在于计算周围环境的光线有多少从表面像素点反射到相机视口中。要计算总的反射光,每个入射方向的贡献,必须将他们在半球上相加: 为入射光线 与法线 的夹角,为方便计算可以使用法线向量和入射向量(单位化&…

Linux|科普扫盲帖|配置网络软件源---阿里云镜像仓库服务使用(centos,Ubuntu)

前言: 部署搭建各种环境,例如,集群环境,编译环境,测试环境,桌面环境,lnmp环境等等以及修复各种各样的漏洞,基本是使用本地仓库就可以完成的,但本地仓库有一个比较致命的…

深入理解TDNN(Time Delay Neural Network)——兼谈x-vector网络结构

概述 TDNN(Time Delay Neural Network,时延神经网络)是用于处理序列数据的,比如:一段语音、一段文本将TDNN和统计池化(Statistics Pooling)结合起来,正如x-vector的网络结构&#x…

x86_64架构的VINS-fusion-GPU部署

x86_64架构的VINS-fusion-GPU部署 1. 环境配置(Ubuntu 18.04) (0)CUDA 10.2 安装 由于笔记本的GPU太老(GeForce 840M),只能使用较低版本的 CUDA,但是也能有个好处就是能够同时兼顾…

Linux TCP 拥塞正反馈 bad case

前置知识,TCP thin stream,参见: 该文档中搜索 tcp_thin_linear_timeoutsTCP-thin-stream 看图说话: 参见 tcp_retransmit_timer 函数,着重看下面段落: if (sk->sk_state TCP_ESTABLISHED &&am…