【深耕 Python】Data Science with Python 数据科学(16)Scikit-learn机器学习(一)

2024-04-30 08:04

本文主要是介绍【深耕 Python】Data Science with Python 数据科学(16)Scikit-learn机器学习(一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

写在前面

关于数据科学环境的建立,可以参考我的博客:

【深耕 Python】Data Science with Python 数据科学(1)环境搭建

往期数据科学博文:

【深耕 Python】Data Science with Python 数据科学(2)jupyter-lab和numpy数组

【深耕 Python】Data Science with Python 数据科学(3)Numpy 常量、函数和线性空间

【深耕 Python】Data Science with Python 数据科学(4)(书337页)练习题及解答

【深耕 Python】Data Science with Python 数据科学(5)Matplotlib可视化(1)

【深耕 Python】Data Science with Python 数据科学(6)Matplotlib可视化(2)

【深耕 Python】Data Science with Python 数据科学(7)书352页练习题

【深耕 Python】Data Science with Python 数据科学(8)pandas数据结构:Series和DataFrame

【深耕 Python】Data Science with Python 数据科学(9)书361页练习题

【深耕 Python】Data Science with Python 数据科学(10)pandas 数据处理(一)

【深耕 Python】Data Science with Python 数据科学(11)pandas 数据处理(二)

【深耕 Python】Data Science with Python 数据科学(12)pandas 数据处理(三)

【深耕 Python】Data Science with Python 数据科学(13)pandas 数据处理(四):书377页练习题

【深耕 Python】Data Science with Python 数据科学(14)pandas 数据处理(五):泰坦尼克号亡魂 Perished Souls on “RMS Titanic”

【深耕 Python】Data Science with Python 数据科学(15)pandas 数据处理(六):书385页练习题

代码说明: 由于实机运行的原因,可能省略了某些导入(import)语句。

本期,使用Scikit-learn机器学习库对第14期泰坦尼克号乘客数据进行回归分析。

一、读取数据表格

import numpy as np
import pandas as pd
import matplotlib.pyplot as pltURL = "https://learnenough.s3.amazonaws.com/titanic.csv"
titanic = pd.read_csv(URL)

二、绘制散点图

通过绘制散点图,分析乘客年龄和生还率的关系。

首先,从表格中提取“年龄”列和“生还”列:

passenger_age = titanic[["Age", "Survived"]].dropna()  # 去除NaN值
print(passenger_age.head())

程序输出:

#   年龄     是否生还Age     Survived
0  22.0         0  # 未生还
1  38.0         1  # 生还
2  26.0         1
3  35.0         1
4  35.0         0

提取乘客年龄,并对其进行升序排序:

passenger_ages = passenger_age["Age"].unique()
passenger_ages.sort()
print(passenger_ages)

程序输出:

# 最小年龄:0.42岁;最大年龄:80岁
[ 0.42  0.67  0.75  0.83  0.92  1.    2.    3.    4.    5.    6.    7.8.    9.   10.   11.   12.   13.   14.   14.5  15.   16.   17.   18.19.   20.   20.5  21.   22.   23.   23.5  24.   24.5  25.   26.   27.28.   28.5  29.   30.   30.5  31.   32.   32.5  33.   34.   34.5  35.36.   36.5  37.   38.   39.   40.   40.5  41.   42.   43.   44.   45.45.5  46.   47.   48.   49.   50.   51.   52.   53.   54.   55.   55.556.   57.   58.   59.   60.   61.   62.   63.   64.   65.   66.   70.70.5  71.   74.   80.  ]

计算不同年龄乘客的生还率,并对年龄区间30~40岁乘客的(平均)生还率进行输出:

survival_rate = passenger_age.groupby("Age")["Survived"].mean()
print(survival_rate.loc[30:40])

程序输出:

# 年龄   平均生还率
Age
30.0    0.400000
30.5    0.000000
31.0    0.470588
32.0    0.500000
32.5    0.500000
33.0    0.400000
34.0    0.400000
34.5    0.000000
35.0    0.611111
36.0    0.500000
36.5    0.000000
37.0    0.166667
38.0    0.454545
39.0    0.357143
40.0    0.461538
Name: Survived, dtype: float64

接下来,以年龄作为横坐标,平均生还率作为纵坐标,绘制散点图:

fig, ax = plt.subplots()
ax.scatter(passenger_ages, survival_rate)
plt.title("Scatter Plot of Survival Rate vs Age")
plt.xlabel("Age")
plt.ylabel("Survival Rate")
plt.grid()
plt.show()

程序输出:

在这里插入图片描述

三、使用Scikit-learn对数据进行线性回归分析

首先,准备自变量X和因变量Y:

from sklearn.linear_model import LinearRegressionX = np.array(passenger_ages).reshape((-1, 1))
print(X[:10])
Y = np.array(survival_rate)

程序输出:

# 前10个年龄值
[[0.42][0.67][0.75][0.83][0.92][1.  ][2.  ][3.  ][4.  ][5.  ]]

建立线性回归模型并检视模型参数:

model = LinearRegression()
model.fit(X, Y)
print(model.score(X, Y))
m = model.coef_
b = model.intercept_
print(m)
print(b)

程序输出:

0.13539675574075116  # 模型的R^2值
[-0.00562704]  # 直线的斜率
0.582616045704144  # 直线的y轴截距

接下来,绘制此模型对数据拟合的直线:

fig, ax = plt.subplots()
ax.scatter(passenger_ages, survival_rate)
ax.plot(passenger_ages, m * passenger_ages + b, color="orange")
ax.set_xlabel("Age")
ax.set_ylabel("Survival Rate")
ax.set_title("Titanic survival rates by age")
plt.grid()
plt.show()

程序输出:

在这里插入图片描述

参考文献 Reference

《Learn Enough Python to be Dangerous——Software Development, Flask Web Apps, and Beginning Data Science with Python》, Michael Hartl, Boston, Pearson, 2023.

这篇关于【深耕 Python】Data Science with Python 数据科学(16)Scikit-learn机器学习(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/948311

相关文章

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

Python+PyQt5实现多屏幕协同播放功能

《Python+PyQt5实现多屏幕协同播放功能》在现代会议展示、数字广告、展览展示等场景中,多屏幕协同播放已成为刚需,下面我们就来看看如何利用Python和PyQt5开发一套功能强大的跨屏播控系统吧... 目录一、项目概述:突破传统播放限制二、核心技术解析2.1 多屏管理机制2.2 播放引擎设计2.3 专

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

Python实现无痛修改第三方库源码的方法详解

《Python实现无痛修改第三方库源码的方法详解》很多时候,我们下载的第三方库是不会有需求不满足的情况,但也有极少的情况,第三方库没有兼顾到需求,本文将介绍几个修改源码的操作,大家可以根据需求进行选择... 目录需求不符合模拟示例 1. 修改源文件2. 继承修改3. 猴子补丁4. 追踪局部变量需求不符合很

MySQL大表数据的分区与分库分表的实现

《MySQL大表数据的分区与分库分表的实现》数据库的分区和分库分表是两种常用的技术方案,本文主要介绍了MySQL大表数据的分区与分库分表的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. mysql大表数据的分区1.1 什么是分区?1.2 分区的类型1.3 分区的优点1.4 分

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

在C#中调用Python代码的两种实现方式

《在C#中调用Python代码的两种实现方式》:本文主要介绍在C#中调用Python代码的两种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#调用python代码的方式1. 使用 Python.NET2. 使用外部进程调用 Python 脚本总结C#调