当前位置: 首页 > article >正文

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 StandardScaler
    
    scaler = StandardScaler()
    df[['Age', 'Salary']] = scaler.fit_transform(df[['Age', 'Salary']])
    
  • 归一化
    from sklearn.preprocessing import MinMaxScaler
    
    scaler = 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 plt
    
    x = [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 np
    
    x = 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 plt
    
    plt.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.kler.cn/a/307903.html

相关文章:

  • Brave127编译指南 Windows篇:部署Node.js(五)
  • [宁波24届]平方数
  • 【ACM出版】第四届信号处理与通信技术国际学术会议(SPCT 2024)
  • HarmonyOS 如何实现传输中的数据加密
  • 【Pikachu】目录遍历实战
  • 前端常用布局模板39套,纯CSS实现布局
  • CSS调整背景
  • 文档内容识别系统源码分享
  • 绘制简单的激波的图
  • 【数据结构】字符串与JSON字符串、JSON字符串及相应数据结构(如对象与数组)之间的相互转换
  • 基于深度学习,通过病理切片直接预测HPV状态|文献速递·24-09-16
  • web技术栈总体概念
  • 有关C# .NET Core 过滤器的使用
  • vue part 11
  • string的模拟实现and友元
  • Jacoco的XML报告详解
  • 链动321模式小程序开发源码
  • HTML 和 CSS
  • java项目之基于web的人力资源管理系统的设计与实现(源码+文档)
  • MySQL之安装与基础知识
  • R语言的基础知识R语言函数总结
  • reg和wire的区别 HDL语言
  • chapter14 数据结构与集合源码 知识点总结Note
  • Kotlin 极简小抄 P2(插值表达式、运算符、选择结构赋值)
  • SpringBoot的Web开发支持
  • AG32 MCU的引脚特点及功耗说明