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

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.mrgr.cn/news/28454.html

相关文章:

  • Python_爬虫1_Requests库入门
  • HTML面试题(2)
  • 记录一下跨域的问题,讲讲跨域
  • Centos使用人大金仓ksql
  • nuxt3添加wowjs动效
  • MQ集群
  • 【CMake】使用CMake在Visual Stdudio编译资源文件和多目标编译
  • Linux6-vi/vim
  • AI助力遥感影像智能分析计算,基于高精度YOLOv5全系列参数【n/s/m/l/x】模型开发构建卫星遥感拍摄场景下地面建筑物智能化分割检测识别系统
  • 线程池是啥有啥用,怎么用,如何自己实现一个
  • 接口测试(十二)
  • 【网络】TCP/IP 五层网络模型:数据链路层
  • 速盾:怎么使用cdn加速视频?
  • c++ templates常用函数
  • 进口车电子信息单二维码解密
  • react hooks--useLayoutEffect
  • Python pdf转换为html
  • vmvare如何给centos7 设置静态IP地址
  • 计算机的错误计算(九十五)
  • 【C++学习入门】6.左值右值
  • 探索人工智能的未来趋势
  • 24.9.16数据结构|平衡二叉树
  • [项目][WebServer][Makefile Shell]详细讲解
  • 机器学习的入门指南
  • re题(22)BUUFCTF-[ACTF新生赛2020]rome
  • 速盾:cdn免备案免费加速?