Python机器学习实战:分类算法之逻辑回归-泰坦尼克号乘客生还预测

为了解决特定问题而进行的学习是提高效率的最佳途径。这种方法能够使我们专注于最相关的知识和技能,从而更快地掌握解决问题所需的能力。


目录

逻辑回归算法介绍

练习题

Python代码与分析

1、读入数据,观察数据情况

2、各属性与生还情况的关联

3、数据预处理(关键步骤)

4、划分训练集和测试集,即预留一部分数据(30%),用于评价模型

5、模型构建及训练

6、预测测试数据

7、绘制混淆矩阵和分类报告

8、绘制ROC曲线,并计算AUC,评估模型性能


逻辑回归算法介绍

逻辑回归算法,虽然名称中含有“回归”二字,却是用来解决分类问题的。

回归与分类的区别在于:回归预测的目标变量的取值是连续的(例如房屋的价格),可以用一条直线拟合,例如一元或多元线性回归模型;分类所预测的目标变量是类别型变量,取值是离散的,例如判断邮件是否为垃圾邮件、判断鸢尾花的类型等。

线性回归和逻辑回归的相同点包括:

(1)线性回归和逻辑回归都是有监督学习算法。

(2)线性回归和逻辑回归的损失函数、正则化的数学原理与形式基本类似。

线性回归和逻辑回归的不同点包括:

(1)线性回归用于解决回归问题,逻辑回归用于解决分类问题。

(2)线性回归要求目标变量是连续数值型,逻辑回归要求是离散型。

(3)线性回归要求特征与目标变量呈线性关系,逻辑回归不要求特征与目标变量是线性关系。


练习题

泰坦尼克号乘客生还的预测是数据科学竞赛平台Kaegle上最经典的人门竞赛之一。它是一个二分类问题,要求根据乘客的相关信息,如性别、年龄、船舱等级等来预测其是否会生还。本期,我们使用逻辑回归来建模泰坦尼克号乘客生还的预测问题。


Python代码与分析

1、读入数据,观察数据情况

import pandas as pd
data = pd.read_csv('train.csv')
data.info()

由上图可知,训练集中共有891行和12项。这12项的具体含义如下标所示。

有些项有缺失值。Age(年龄)有714人有记录,缺失177人的记录;Cabin(舱位)有204人有记录,缺失687人的记录;Embarked(登船港口)有889人有记录,缺失2人的记录。

是可以用下列语句进行数据的描述统计分析。

data.describe()

可以看到,乘客的平均年龄为29.7,最大年龄为80.0,最小年龄为0.42。生还人数大约为总体的38%,票价最贵的为512.33美元等。

2、各属性与生还情况的关联

此数据集有 10个属性,我们主要拿出性别和登船港口两个属性分析生还率,其余属性分析类似。

(1)不同性别的生还情况

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Heiti TC']
plt.rcParams['axes.unicode_minus'] = False# 所有获救的人中,性别为‘male’的数量
Survived_m = data.Survived[data.Sex == 'male'].value_counts()
# 所有获救的人中,性别为‘female’的数量
Survived_f = data.Survived[data.Sex == 'female'].value_counts()
df = pd.DataFrame({'男性': Survived_m, '女性':Survived_f})
df.plot(kind = 'bar', stacked = True)
plt.title('按性别看是否生还')
plt.xlabel('生还')
plt.ylabel('人数')
plt.show()

0代表未生还,1代表生还。明显可以看出,未生还人员中男性乘客比例较大,而生还人员中女性乘客比例较大。所以很大程度上可以确定性别是预测生还情况的一个重要因素。

(2)不同登船港口乘客的生还情况。

Survived_0 = data.Embarked[data.Survived == 0].value_counts()
Survived_1 = data.Embarked[data.Survived == 1].value_counts()
df = pd.DataFrame({'生还': Survived_1, '未生还': Survived_0})
df.plot(kind = 'bar', stacked = True)
plt.title('各登船港口乘客是否生还')
plt.xlabel('登船港口')
plt.ylabel('人数')
plt.show()

我们把生还人数占各个港口登船中人数的比例看成分析条件,总的来说C港口的生还率高一些,S港口的生还率相对低一些。

3、数据预处理(关键步骤)

数据预处理包括无关特征的删除、填充缺失值、编码转换、数据缩放等。

# 删除姓名、ID、船票编号、客舱号等无关信息,axis=0删除行,axis=1删除列。
data.drop(['Name', 'PassengerId', 'Ticket', 'Cabin'], axis = 1, inplace = True)
# 用平均值或众数填充缺失数据
data['Age'] = data['Age'].fillna(data['Age'].mean())
data['Fare'] = data['Fare'].fillna(data['Fare'].mean())
data['Embarked'] = data['Embarked'].fillna(data['Embarked'].value_counts().index[0])
# 将性别与登船港口进行独热编码
dumm = pd.get_dummies(data[['Sex', 'Embarked']], drop_first = True)
data = pd.concat([data, dumm], axis = 1)
data.drop(['Sex', 'Embarked'], axis = 1, inplace = True)
# 数据缩放(数据标准化-无量纲化)
data['Age'] = (data['Age'] - data['Age'].min()) / (data['Age'].max() - data['Age'].min())
data['Fare'] = (data['Fare'] - data['Fare'].min()) / (data['Fare'].max() - data['Fare'].min())

4、划分训练集和测试集,即预留一部分数据(30%),用于评价模型

from sklearn.model_selection import train_test_split
X = data.drop('Survived', axis = 1)
y = data.Survived
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3)

5、模型构建及训练

(1)创建模型

from sklearn.linear_model import LogisticRegression
LR = LogisticRegression()

(2)训练模型

LR.fit(X_train, y_train)
print('训练集准确率:\n', LR.score(X_train, y_train))
print('测试集准确率:\n', LR.score(X_test, y_test))
训练集准确率:0.797752808988764
测试集准确率:0.8171641791044776

可以看到,该模型在测试集上的准确率高于训练集上的准确率,没有过拟合,可以考虑增加模型参数或复杂度。

6、预测测试数据

y_pred = LR.predict(X_test)

7、绘制混淆矩阵和分类报告

Scikit-learn中的metrics模块中提供了有关各种评价指标的计算函数,包括混淆矩阵(confusion_matrix)和分类报告(classification_report)等。

from sklearn import metrics
from sklearn.metrics import classification_report, confusion_matrix
print(confusion_matrix(y_test, y_pred))
print(classification_report(y_test, y_pred))

从上面的混淆矩阵可以看出,真正例的个数是74,真负例的个数是145。

 从分类报告中得到,模型在类别0上的预测表现较好,具有较高的精确度、召回率和F1分数。 模型在类别1上的召回率稍低,但精确度和F1分数仍然不错。 总体而言,模型的准确度为82%,表明其在大多数情况下能够正确分类样本。

8、绘制ROC曲线,并计算AUC,评估模型性能

绘制ROC曲线需要分类器输出预测每个样例属于正例的概率值。

y_pred_prob = LR.predict_proba(X_test)

计算ROC曲线,即真正例率、假正例率、分类阈值等。

fpr, tpr, thresholds = metrics.roc_curve(y_test, y_pred_prob[:,1])

计算AUC值。

auc = metrics.auc(fpr, tpr)
print(auc)
0.8551536116322701

绘制ROC曲线

plt.plot(fpr, tpr, lw = 2, label = 'ROC曲线(area = {:.2f})'.format(auc))
plt.plot([0,1],[0,1],'r--')
plt.xlabel('假正例率') # False Positive Rate
plt.ylabel('真正例率') # True Positive Rate
plt.title('ROC曲线示例') # Receiver operating characteristic example
plt.legend(loc = 'lower right')
plt.show()

  

ROC曲线是评估二分类模型性能的一个常用工具。

曲线从左下角(0,0)开始,向右上方延伸,最终接近右上角(1,1)。曲线下方的面积越大,模型的性能越好。

理想情况下,曲线应该尽可能地靠近图表的左上角,这意味着模型具有高真正例率(TPR)和低假正例率(FPR)。

图中标注了"ROC曲线(area=0.86)",这表示该ROC曲线下方的面积是0.86。这个面积,也称为AUC(Area Under the Curve),是一个介于0到1之间的数值,用来衡量模型的整体性能。AUC值越高,模型的分类能力越好。在这个例子中,0.86是一个相对较高的AUC值,表明模型具有较好的性能。

横轴(X轴)表示假正例率(False Positive Rate, FPR),即错误地将负类(negative class)判定为正类(positive class)的比例。 纵轴(Y轴)表示真正例率(True Positive Rate, TPR),也称为召回率(Recall),即正确地将正类判定为正类的比例。

诊断线:图中还有一条从左下角到右上角的对角线,这条线代表了没有分类能力的随机猜测模型的ROC曲线。如果一个模型的ROC曲线位于这条线以下,那么它的性能不如随机猜测。

曲线特性:曲线的弯曲程度可以提供关于分类器性能的额外信息。一个平滑且接近右上角的曲线通常表示模型具有较好的区分能力。

总结来说,图片中的ROC曲线示例展示了一个具有较高AUC值的分类器的性能,表明该模型在区分正负类方面表现良好。


 都读到这里了,不妨关注、点赞一下吧! 

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

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

相关文章

用Python做一个翻译软件,比上浏览器快100倍

简单的用Python来做一个翻译软件 开发环境 Python 3.10 Pycharm模块使用 requests -> pip install requests hashlib tkinter案例分为三部分: 1. 爬虫: 获取翻译接口, 请求获取翻译结果问题1: 接口抓包分析问题2: 请求需要写cookie问题3: 不同文本翻译, s加密参数2. 界面…

PDF解锁网站

https://smallpdf.com/cn/unlock-pdfhttps://smallpdf.com/cn/unlock-pdfhttps://www.freemypdf.comhttps://www.freemypdf.com

【python】python图书管理系统_普通用户+管理员菜单(源码+论文)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

[代码审计]记一次简单的java代码审计

如果觉得该文章有帮助的,麻烦师傅们可以搜索下微信公众号:良月安全。点个关注,感谢师傅们的支持。 免责声明 本博客所发布的所有内容,包括但不限于信息、工具、项目以及文章,均旨在提供学习与研究之用。所有工具安全…

FastAPI(七十六)实战开发《在线课程学习系统》接口开发-- 课程详情

源码见:"fastapi_study_road-learning_system_online_courses: fastapi框架实战之--在线课程学习系统" 这个接口用户可以不登录,因为我们的课程随意浏览 那么我们梳理下这里的逻辑 1.根据课程id判断课程是否存在 2.课程需要返回课程的详情 3…

C# Task.WaitAll 的用法

目录 简介 1.WaitAll(Task[], Int32, CancellationToken) 2.WaitAll(Task[]) 3.WaitAll(Task[], Int32) 4.WaitAll(Task[], CancellationToken) 5.WaitAll(Task[], TimeSpan) 结束 简介 Task.WaitAll 是 C# 中用于并行编程的一个的方法,它属于 System.Threa…

DjangoRF-5-用户管理-users接口

1、创建模型,user模型之前创建过了,继承了原有的模型类 2、序列化器 在 users/serializers.py 模块中添加: class UserSerializer(serializers.ModelSerializer):class Meta:model Userfields [id, username, password, mobile, email, is…

【简单讲解Perl语言】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

基于微信小程序+SpringBoot+Vue的核酸检测服务系统(带1w+文档)

基于微信小程序SpringBootVue的核酸检测服务系统(带1w文档) 基于微信小程序SpringBootVue的核酸检测服务系统(带1w文档) 在目前的情况下,可以引进一款医院核酸检测服务系统这样的现代化管理工具,这个工具就是解决上述问题的最好的解决方案。它不仅可以实…

20240727生活沉思------------关于报考软考高级架构师

软考高级架构师 软考高级架构师 缴费 主要是报的千峰 1880元。 相对来说还算可以吧。。。其他也没给我机会选择啊 备考 我现在开始备考,考试时间2024年11月。 今天是正式开始7.27号。 给大家看看接下来我的课程安排: 额,还是满满当当的…

日入800+小红书AI表情包项目拆解

一个高考结束之后,进入暑假,只要有手就能做的AI搞钱项目,不到2个月的时间在小某书上成功涨粉5w,通过发布广告,一条广告甚至还能赚到2000元; 只要有市场需求就可以制作这种表情包快速搞钱,上手非…

openmv 学习笔记(24电赛笔记)

模版匹配 模版匹配是一种计算机视觉技术,用于图像或者视频中查找特定的模版或者对象,查找模版可以是数字或者是物体,技术通过在目标图像中寻找与模版图像相似的区域来实现匹配。这种技术最早起源在 20世纪70年代 的图像处理领域。 使用模版匹…

网络编程总复习

TCP的创建: 服务器端 : 客户端:

【计算机网络】IP分片实验

一:实验目的 1:理解IP数据报分片的工作原理。 2:理解IP协议报文类型和格式。 二:实验仪器设备及软件 硬件:RCMS-C服务器、网线、Windows 2019/2003操作系统的计算机等。 软件:记事本、WireShark、Chrom…

倒计时11天,生物发酵行业盛宴即将在沪召开!

随着生物科技领域的蓬勃发展,2024上海生物发酵展的召开已经进入倒计时阶段,距离这场生物发酵产业的年度盛事仅剩11天。作为行业内备受瞩目的展会,它不仅汇聚了全球顶尖的生物发酵技术、产品与服务,更是一个探讨行业趋势、促进合作…

c++语言学习注意事项

当学习C语言时,有几个重要的注意事项可以帮助初学者更有效地掌握这门强大的编程语言: 1. 理解基本概念和语法 C 是一门复杂且功能强大的编程语言,因此理解其基本概念和语法至关重要。初学者应该重点掌握以下几个方面: 基本语法和…

最小二乘法公式推导

微积分和线性代数碰撞的数学盛宴:最小二乘法公式推导!_哔哩哔哩_bilibili 递归最小二乘法与参数辨识_哔哩哔哩_bilibili 笔记

护眼灯有没有护眼的效果?一文揭秘用护眼灯到底好不好

护眼灯有没有护眼的效果?在现在这个时代,无论是在学习还是办公,都很难离开一款好用的台灯,所以,为了避免会挑选到质量不好的台灯,我们应该要先避开一些网红小品牌,优先选择有专业技术支持的&…

数据库作业四

1. 修改 student 表中年龄( sage )字段属性,数据类型由 int 改变为 smallint : ALTER TABLE student MODIFY Sage SMALLINT; 2. 为 Course 表中 Cno 课程号字段设置索引,并查看索引: ALTER TABLE…

JS+H5在线文心AI聊天(第三方接口)

源码在最后面 调用的不是文心官方接口 可以正常聊天 有打字动画 效果图 源代码 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-s…