Python 课程13-机器学习

前言

数据科学机器学习 涉及从原始数据的处理到模型的构建与评估,是一套完整的流程。在这一过程中,Python 提供了许多强大的工具和库,如 PandasNumPyMatplotlibSeaborn、以及最重要的机器学习库 scikit-learn。这些工具可以帮助我们完成从数据清洗、特征选择、模型训练到评估的全过程。

本教程将提供每个指令的详细说明,并辅以代码示例。目标是让你对整个数据科学与机器学习的流程有深刻的理解,并能在实际项目中熟练应用这些知识。


目录

  1. Pandas:数据处理与清洗

    • 数据导入与导出
    • 数据查看与筛选
    • 缺失值处理
    • 重复值处理
    • 数据标准化与归一化
    • 数据分组与聚合
  2. NumPy:数值运算

    • 数组的创建与操作
    • 数组的广播机制
    • 基本的矩阵运算
    • 随机数生成
  3. Matplotlib 与 Seaborn:数据可视化

    • 绘制折线图、柱状图、散点图与直方图
    • 自定义图表(标题、标签、颜色等)
    • 使用 Seaborn 绘制热力图与分布图
  4. scikit-learn:机器学习基础

    • 数据集拆分:训练集与测试集
    • 监督学习:线性回归与分类
    • 非监督学习:K-Means 聚类
    • 模型评估:交叉验证与性能指标

1. Pandas:数据处理与清洗

数据导入与导出

Pandas 是一个强大的数据处理库。我们通常会通过 Pandas 读取 CSV、Excel 或其他格式的数据文件,并将其存储为 DataFrame 对象。

  • 读取 CSV 文件
    import pandas as pd# 读取 CSV 文件
    df = pd.read_csv('data.csv')# 查看数据前 5 行
    print(df.head())
    

    保存 DataFrame 为 CSV 文件

    df.to_csv('output.csv', index=False)
    
    数据查看与筛选
  • 查看数据概况
    # 查看数据的基本信息(数据类型、非空值等)
    print(df.info())# 查看数据的统计信息(均值、标准差等)
    print(df.describe())# 查看前几行数据
    print(df.head(10))
    

    筛选特定列与行

    # 筛选特定列
    df_subset = df[['Name', 'Age']]# 筛选特定行(年龄大于 30)
    df_filtered = df[df['Age'] > 30]
    
    缺失值处理

    现实世界中的数据常常包含缺失值,Pandas 提供了简单的方法来处理这些缺失值。

  • 检查缺失值
    # 检查每一列的缺失值数量
    print(df.isnull().sum())
    
  • 填充缺失值
    # 用平均值填充缺失值
    df['Age'].fillna(df['Age'].mean(), inplace=True)
    
  • 删除包含缺失值的行
    # 删除包含任何缺失值的行
    df_cleaned = df.dropna()
    
    重复值处理
  • 检查与删除重复值
    # 检查重复值
    print(df.duplicated())# 删除重复值
    df_cleaned = df.drop_duplicates()
    
    数据标准化与归一化

    标准化归一化 是将数据转化为统一范围或分布的常用方法,尤其在机器学习中,标准化和归一化是非常重要的步骤。

  • 标准化
    from sklearn.preprocessing import StandardScalerscaler = StandardScaler()
    df[['Age', 'Salary']] = scaler.fit_transform(df[['Age', 'Salary']])
    
  • 归一化
    from sklearn.preprocessing import MinMaxScalerscaler = MinMaxScaler()
    df[['Age', 'Salary']] = scaler.fit_transform(df[['Age', 'Salary']])
    
    数据分组与聚合
  • 按特定列分组并计算聚合结果
    # 按 'Gender' 列分组,并计算每组的平均工资
    df_grouped = df.groupby('Gender')['Salary'].mean()
    print(df_grouped)
    

    2. NumPy:数值运算

    NumPy 是 Python 中用于科学计算的核心库。它提供了强大的数组对象和一系列高效的数值计算功能。

    数组的创建与操作
  • 创建数组
    import numpy as np# 创建一维数组
    arr = np.array([1, 2, 3, 4, 5])# 创建二维数组
    arr_2d = np.array([[1, 2, 3], [4, 5, 6]])# 创建全零数组
    zeros_arr = np.zeros((3, 3))# 创建全一数组
    ones_arr = np.ones((2, 4))
    

  • 数组切片与索引
    # 访问数组中的元素
    print(arr[0])  # 输出第一个元素# 访问二维数组中的特定行与列
    print(arr_2d[1, 2])  # 输出第二行第三列的元素# 数组切片
    print(arr[:3])  # 输出前 3 个元素
    
    数组的广播机制

    广播机制 是 NumPy 中的一个强大特性,允许不同形状的数组进行数学运算。

    arr1 = np.array([1, 2, 3])
    arr2 = np.array([[10], [20], [30]])# 广播机制将 arr1 复制为 3x3 的数组,并与 arr2 相加
    result = arr1 + arr2
    print(result)
    
    基本的矩阵运算
  • 矩阵相乘
    arr1 = np.array([[1, 2], [3, 4]])
    arr2 = np.array([[5, 6], [7, 8]])# 矩阵乘法
    result = np.dot(arr1, arr2)
    print(result)
    
    随机数生成
  • 生成随机数数组
    # 生成 0 到 1 之间的随机数
    rand_arr = np.random.rand(3, 3)# 生成正态分布的随机数
    randn_arr = np.random.randn(2, 2)
    

    3. Matplotlib 与 Seaborn:数据可视化

    数据可视化是数据分析的重要组成部分,通过图表能够直观地展示数据的趋势与分布。

    绘制折线图、柱状图、散点图与直方图

    Matplotlib 是 Python 中最常用的绘图库,而 Seaborn 是基于 Matplotlib 的高级可视化库,提供了更美观的默认样式。

  • 绘制折线图
    import matplotlib.pyplot as pltx = [1, 2, 3, 4, 5]
    y = [10, 15, 13, 18, 16]plt.plot(x, y)
    plt.title("Line Plot Example")
    plt.xlabel("X Axis")
    plt.ylabel("Y Axis")
    plt.show()
    

  • 绘制柱状图
    categories = ['A', 'B', 'C', 'D']
    values = [5, 7, 3, 8]plt.bar(categories, values)
    plt.title("Bar Plot Example")
    plt.xlabel("Category")
    plt.ylabel("Value")
    plt.show()
    

  • 绘制散点图
    import numpy as npx = np.random.rand(50)
    y = np.random.rand(50)plt.scatter(x, y)
    plt.title("Scatter Plot Example")
    plt.xlabel("X Axis")
    plt.ylabel("Y Axis")
    plt.show()
    

  • 绘制直方图
    data = np.random.randn(1000)plt.hist(data, bins=30, alpha=0.5)
    plt.title("Histogram Example")
    plt.xlabel("Value")
    plt.ylabel("Frequency")
    plt.show()
    
    使用 Seaborn 绘制热力图与分布图
  • 绘制热力图
    import seaborn as sns# 创建相关矩阵的热力图
    corr = df.corr()
    sns.heatmap(corr, annot=True, cmap='coolwarm')
    plt.title("Heatmap Example")
    plt.show()
    

  • 绘制分布图
    sns.histplot(df['Age'], kde=True)
    plt.title('Age Distribution')
    plt.show()
    

  • 4. scikit-learn:机器学习基础

    scikit-learn 是 Python 中最常用的机器学习库之一,提供了各种常见的机器学习算法、数据集处理工具、模型评估方法等。通过 scikit-learn,你可以快速构建监督学习和非监督学习模型。

    数据集拆分:训练集与测试集

    在训练机器学习模型之前,通常会将数据集拆分为 训练集测试集。训练集用于训练模型,而测试集用于评估模型的性能。

  • 使用 train_test_split 进行数据集拆分
    from sklearn.model_selection import train_test_split# 假设我们有特征数据 X 和标签 y
    X = df[['Age', 'Salary']]  # 特征
    y = df['HighSalary']       # 标签# 使用 80% 的数据作为训练集,20% 作为测试集
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
    
    监督学习:线性回归与分类

    监督学习是一种有标签的数据学习方法,常见的监督学习算法包括 线性回归分类算法(如决策树、支持向量机等)。

    线性回归

    线性回归用于解决回归问题,目标是通过输入特征预测连续值输出。

  • 线性回归示例
    from sklearn.linear_model import LinearRegression# 创建线性回归模型
    model = LinearRegression()# 训练模型
    model.fit(X_train, y_train)# 使用训练好的模型进行预测
    predictions = model.predict(X_test)# 查看模型系数
    print("Coefficients:", model.coef_)
    print("Intercept:", model.intercept_)
    
    分类算法(决策树)

    分类算法用于预测离散的类别标签。例如,我们可以通过决策树算法预测一个人是否收入高于某个值。

  • 决策树分类器示例
    from sklearn.tree import DecisionTreeClassifier# 假设我们有一个分类标签
    df['HighSalary'] = df['Salary'] > 50000# 训练决策树分类器
    X = df[['Age', 'Salary']]
    y = df['HighSalary']
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)clf = DecisionTreeClassifier()
    clf.fit(X_train, y_train)# 预测
    predictions = clf.predict(X_test)
    print("Predictions:", predictions)
    
    非监督学习:K-Means 聚类

    非监督学习是一种没有标签的数据学习方法,常用于数据聚类、降维等。常用的非监督学习算法包括 K-Means 聚类。

    K-Means 聚类

    K-Means 聚类用于将数据分成 k 个不同的簇。每个数据点被分配到离它最近的簇中心。

  • K-Means 聚类示例
    from sklearn.cluster import KMeans# 使用 K-Means 进行聚类
    kmeans = KMeans(n_clusters=3)
    kmeans.fit(X)# 获取聚类标签
    df['Cluster'] = kmeans.labels_# 可视化聚类结果
    import seaborn as sns
    import matplotlib.pyplot as pltplt.figure(figsize=(8, 6))
    sns.scatterplot(x='Age', y='Salary', hue='Cluster', data=df, palette='Set1')
    plt.title('K-Means Clustering')
    plt.show()
    
    机器学习模型评估

    模型评估是机器学习中至关重要的一步,用于评估模型在新数据上的表现。常见的评估方法有准确率(分类问题)和均方误差(回归问题)。

    分类模型的评估:准确率
  • 使用 accuracy_score 评估分类模型
    from sklearn.metrics import accuracy_score# 对于分类模型,使用准确率进行评估
    accuracy = accuracy_score(y_test, predictions)
    print(f"Accuracy: {accuracy:.2f}")
    
    回归模型的评估:均方误差
  • 使用 mean_squared_error 评估回归模型
    from sklearn.metrics import mean_squared_error# 对于回归模型,使用均方误差进行评估
    mse = mean_squared_error(y_test, predictions)
    print(f"Mean Squared Error: {mse:.2f}")
    
    交叉验证

    交叉验证是一种评估模型性能的技术,通常通过将数据分为多个子集,多次训练和测试模型,避免过拟合。

  • 使用 cross_val_score 进行交叉验证
    from sklearn.model_selection import cross_val_score# 进行 5 折交叉验证
    scores = cross_val_score(model, X, y, cv=5)# 输出每次验证的得分
    print("Cross-validation scores:", scores)# 输出平均得分
    print("Average score:", scores.mean())
    
    示例:构建一个完整的机器学习项目

    让我们通过一个完整的示例,展示如何使用 scikit-learn 进行一个完整的机器学习流程。

    任务:预测波士顿房价

    我们使用 scikit-learn 中的 波士顿房价数据集,通过线性回归模型预测房价。

    from sklearn.datasets import load_boston
    from sklearn.model_selection import train_test_split
    from sklearn.linear_model import LinearRegression
    from sklearn.metrics import mean_squared_error# 加载波士顿房价数据集
    boston = load_boston()
    X = boston.data
    y = boston.target# 划分训练集和测试集
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 创建线性回归模型
    model = LinearRegression()# 训练模型
    model.fit(X_train, y_train)# 进行预测
    predictions = model.predict(X_test)# 评估模型
    mse = mean_squared_error(y_test, predictions)
    print(f"Mean Squared Error: {mse:.2f}")
    

    在这个项目中,我们使用了 波士顿房价数据集,通过 线性回归模型 进行房价预测,并使用 均方误差 来评估模型的性能。


    结论

    通过本教程,你已经学习了如何使用 Python 中的各个工具库进行数据处理、可视化和机器学习。我们从基础的 Pandas 数据处理和 NumPy 数值计算开始,逐步深入到 MatplotlibSeaborn 的数据可视化,最后详细介绍了 scikit-learn 中常用的机器学习算法及其应用。

  • PandasNumPy 为你提供了强大的数据处理和数值运算能力。
  • MatplotlibSeaborn 帮助你快速生成各种图表,直观展示数据。
  • scikit-learn 则让你能够轻松构建、训练和评估机器学习模型。

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

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

相关文章

BLE 协议之链路层

目录 一、前言二、状态和角色三、Air Interface Packets1、Preamble 字段2、Access Address 字段2.1 静态地址2.2 私有地址 3、PDU 字段3.1 Advertising Channel PDU3.1.1 Header 字段3.1.2 Payload 字段 3.2 Data Channel PDU3.2.1 Header 字段3.2.2 Payload 字段 4、CRC 字段…

STM32上实现FFT算法精准测量正弦波信号的幅值、频率和相位差(标准库)

在研究声音、电力或任何形式的波形时,我们常常需要穿过表面看本质。FFT(快速傅里叶变换)就是这样一种强大的工具,它能够揭示隐藏在复杂信号背后的频率成分。本文将带你走进FFT的世界,了解它是如何将时域信号转化为频域…

【微信小程序】搭建项目步骤 + 引入Tdesign UI

目录 创建1个空文件夹,选择下图基础模板 开启/支持sass 创建公共style文件并引入 引入Tdesign UI: 1. 初始化: 2. 安装后,开发工具进行构建: 3. 修改 app.json 4. 使用 5. 自定义主题色 创建1个空文件夹,选择下…

初始c++:入门基础(完结)

打字不易,留个赞再走吧~~~ 目录 一函数重载二引用1 引⽤的概念和定义2引⽤的特性3引⽤的使⽤三inline四nullptr 一函数重载 C⽀持在同⼀作⽤域中出现同名函数,但是要求这些同名函数的形参不同,可以是参数个数不同或者 类型不同。这样C函数调⽤…

FPGA随记-二进制转格雷码

反射二进制码(RBC),也称为反射二进制(RB)或格雷码(Gray code),得名于Frank Gray,是二进制数制的一种排列方式,使得连续两个值之间仅有一个比特(二…

【Python进阶】requests库有哪些常用的参数和方法?一篇文章带你详细了解!!!附带源码

常用的requests库参数和方法 常用方法 requests库中定义了多个常用的请求方法,其中requests.get()和requests.post()是最常用的方法。这些方法对应于HTTP协议中的GET和POST方法。 requests.get(url, paramsNone, **kwargs): 用于发送GET请求。requests.post(url…

【高阶数据结构】二叉搜索树的插入、删除和查找(精美图解+完整代码)

🤡博客主页:醉竺 🥰本文专栏:《高阶数据结构》 😻欢迎关注:感谢大家的点赞评论关注,祝您学有所成! ✨✨💜💛想要学习更多《高阶数据结构》点击专栏链接查看&a…

Mysql梳理6——order by排序

目录 6 order by排序 6.1 排序数据 6.2 单列排序 6.3 多行排列 6 order by排序 6.1 排序数据 使用ORDER BY字句排序 ASC(ascend):升序DESC(descend):降序 ORDER BY子句在SELECT语句的结尾 6.2 单列排序 如果没有使用排序操作,默认…

一、桥式整流电路

桥式整流电路 1、二极管的单向导电性: 伏安特性曲线: 理想开关模型和恒压降模型 2、桥式整流电流流向过程 输入输出波形: 3、计算:Vo,lo,二极管反向电压。 学习心得

十三,Spring Boot 中注入 Servlet,Filter,Listener

十三,Spring Boot 中注入 Servlet,Filter,Listener 文章目录 十三,Spring Boot 中注入 Servlet,Filter,Listener1. 基本介绍2. 第一种方式:使用注解方式注入:Servlet,Fil…

【C++】——多态详解

目录 1、什么是多态? 2、多态的定义及实现 2.1多态的构成条件 ​2.2多态语法细节处理 2.3协变 2.4析构函数的重写 2.5C11 override 和 final关键字 2.6重载—重写—隐藏的对比分析 3、纯虚函数和抽象类 4、多态的原理分析 4.1多态是如何实现的 4.2虚函数…

OpenCV 2

目录 图像平滑处理 高斯与中值滤波 图像阈值 ​编辑 Canny边缘检测 非极大值抑制 边缘检测效果 轮廓检测方法 ​编辑 ​编辑​编辑 轮廓检测结果 轮廓特征与近似 图像平滑处理 以上两种出来的图片效果 以上的效果,因为填的是normalize False,越界…

零基础到项目实战:Node.js版Selenium WebDriver教程

在当今数字化时代,Web应用程序的质量和性能至关重要。为了确保这些应用的可靠性,自动化测试成为一种不可或缺的工具。Selenium,作为自动化测试领域的瑰宝,为我们提供了无限可能。本教程将深入介绍Selenium,以及如何结合…

硬盘数据恢复必备:4 款强大硬盘数据恢复软件推荐!

在数字化的时代,我们的生活和工作越来越离不开电脑,而硬盘作为重要的数据存储设备,一旦出现数据丢失的情况,往往会给我们带来极大的困扰。别担心,今天就为大家推荐四款强大的硬盘数据恢复软件,帮助你轻松找…

优化算法(三)—模拟退火算法(附MATLAB程序)

模拟退火算法(Simulated Annealing, SA)是一种基于概率的优化算法,旨在寻找全局最优解。该算法模拟金属退火过程中的物质冷却过程,逐渐降低系统的“温度”以达到全局优化的效果。它特别适用于解决复杂的组合优化问题。 一、模拟退…

[羊城杯 2020]Blackcat1

知识点:数组加密绕过 进入页面熟悉的web三部曲(url地址,web源代码,web目录扫描) url地址没有什么东西去看看源代码. 这有一个mp3文件点一下看看. 在最后面发现了 PHP源码. if(empty($_POST[Black-Cat-Sheriff]) || em…

Android Studio报错: Could not find pub.devrel:easypermissions:0.3.0, 改用linux编译

在Android studio中去编译开源的仓库,大概率就是各种编译不过,一堆错误,一顿改错,基本上会耗费非常多时间,比如: 这个就是改gradle版本,改成7.2 ,修改完成之后,还有其他报…

翻页时钟 2.0-自动置顶显示,点击小时切换显示标题栏不显示标题栏-供大家学习研究参考

更新内容 自动置顶显示点击小时切换显示标题栏,(显示标题栏后可移动时钟位置,鼠标拖动边框调整时钟大小)不显示标题栏时,透明部分光标可穿透修正一个显示bu 下载地址: https://download.csdn.net/download…

iPhone 16系列:熟悉的味道,全新的体验

来看看iPhone 16和Plus这两个新成员,实话说,它们和之前曝光的样子几乎完全一致。下面我们就一起来细数一下这次的几大变化吧。 外观设计:焕然一新 首先,最显眼的变化就是后置镜头模组的布局调整为了垂直排列。这一改变使得整个背…

小程序开发设计-第一个小程序:安装开发者工具③

上篇文章导航: 小程序开发设计-第一个小程序:注册小程序开发账号②-CSDN博客https://blog.csdn.net/qq_60872637/article/details/142219035?spm1001.2014.3001.5501 须知:不同版本选项有所不同,并无大碍。 第一个小程序&#…