【深耕 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

相关文章

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

Python进行JSON和Excel文件转换处理指南

《Python进行JSON和Excel文件转换处理指南》在数据交换与系统集成中,JSON与Excel是两种极为常见的数据格式,本文将介绍如何使用Python实现将JSON转换为格式化的Excel文件,... 目录将 jsON 导入为格式化 Excel将 Excel 导出为结构化 JSON处理嵌套 JSON:

Python操作PDF文档的主流库使用指南

《Python操作PDF文档的主流库使用指南》PDF因其跨平台、格式固定的特性成为文档交换的标准,然而,由于其复杂的内部结构,程序化操作PDF一直是个挑战,本文主要为大家整理了Python操作PD... 目录一、 基础操作1.PyPDF2 (及其继任者 pypdf)2.PyMuPDF / fitz3.Fre

python设置环境变量路径实现过程

《python设置环境变量路径实现过程》本文介绍设置Python路径的多种方法:临时设置(Windows用`set`,Linux/macOS用`export`)、永久设置(系统属性或shell配置文件... 目录设置python路径的方法临时设置环境变量(适用于当前会话)永久设置环境变量(Windows系统

python中列表应用和扩展性实用详解

《python中列表应用和扩展性实用详解》文章介绍了Python列表的核心特性:有序数据集合,用[]定义,元素类型可不同,支持迭代、循环、切片,可执行增删改查、排序、推导式及嵌套操作,是常用的数据处理... 目录1、列表定义2、格式3、列表是可迭代对象4、列表的常见操作总结1、列表定义是处理一组有序项目的

python运用requests模拟浏览器发送请求过程

《python运用requests模拟浏览器发送请求过程》模拟浏览器请求可选用requests处理静态内容,selenium应对动态页面,playwright支持高级自动化,设置代理和超时参数,根据需... 目录使用requests库模拟浏览器请求使用selenium自动化浏览器操作使用playwright

python使用try函数详解

《python使用try函数详解》Pythontry语句用于异常处理,支持捕获特定/多种异常、else/final子句确保资源释放,结合with语句自动清理,可自定义异常及嵌套结构,灵活应对错误场景... 目录try 函数的基本语法捕获特定异常捕获多个异常使用 else 子句使用 finally 子句捕获所

Python极速搭建局域网文件共享服务器完整指南

《Python极速搭建局域网文件共享服务器完整指南》在办公室或家庭局域网中快速共享文件时,许多人会选择第三方工具或云存储服务,但这些方案往往存在隐私泄露风险或需要复杂配置,下面我们就来看看如何使用Py... 目录一、android基础版:HTTP文件共享的魔法命令1. 一行代码启动HTTP服务器2. 关键参

Python对接支付宝支付之使用AliPay实现的详细操作指南

《Python对接支付宝支付之使用AliPay实现的详细操作指南》支付宝没有提供PythonSDK,但是强大的github就有提供python-alipay-sdk,封装里很多复杂操作,使用这个我们就... 目录一、引言二、准备工作2.1 支付宝开放平台入驻与应用创建2.2 密钥生成与配置2.3 安装ali

Python获取浏览器Cookies的四种方式小结

《Python获取浏览器Cookies的四种方式小结》在进行Web应用程序测试和开发时,获取浏览器Cookies是一项重要任务,本文我们介绍四种用Python获取浏览器Cookies的方式,具有一定的... 目录什么是 Cookie?1.使用Selenium库获取浏览器Cookies2.使用浏览器开发者工具