首页 > 编程语言 >机器学习——通过LazyPredict、随机森林模型、基于Python的学生情绪监控与分类模型示例解析(sklearn)

机器学习——通过LazyPredict、随机森林模型、基于Python的学生情绪监控与分类模型示例解析(sklearn)

时间:2024-12-22 23:31:39浏览次数:6  
标签:类别 示例 Python 模型 df test print col

数据集包含多个生理变量,并设置了一个目标列“参与水平”(Engagement Level),反映学生的情绪和认知状态。目标是提供学生反应的全景视图,帮助教师实时调整教学策略。

特征包括:

  • 心率(Heart Rate)

  • 皮肤电导率(Skin Conductance)

  • 脑电波(EEG,Electroencephalography)

  • 体温(Temperature)

  • 瞳孔直径(Pupil Diameter)

  • 微笑和皱眉强度(Smile and Frown Intensity)

  • 皮质醇水平(Cortisol Level)

  • 活动水平(Activity Level)

  • 环境噪声水平(Ambient Noise Level)

  • 光照水平(Lighting Level)

目标列:

  • 参与水平

    (Engagement Level):分为高度参与(Highly Engaged)、中度参与(Moderately Engaged)和不参与(Disengaged)。

该数据集适用于基于生物传感器的监测系统开发,以及研究学生在教育环境中的情绪与认知参与。通过实时跟踪参与度,帮助研究人员和开发人员构建自适应系统,以改善学生的学习体验和学习效果。


数据加载与预处理

import numpy as npimport pandas as pd
# 文件路径,注意这里是目标数据集的存放位置filepath = r"G:\...\2024-12-10-公众号Python机器学习ML.csv"
# 读取CSV文件为DataFrame格式df = pd.read_csv(filepath)
# 打印前5行数据,快速查看数据结构和字段内容print(df.head())  # 输出数据的前5行,方便初步了解数据
# 打印数据类型和非空信息print(df.info())  # 查看每列的字段类型、非空值计数等
# 查看数据的描述性统计信息(仅针对数值型列)print(df.describe())  # 输出均值、标准差、最小值、四分位数等信息
# 检查缺失值情况print(df.isnull().sum())  # 输出每列的缺失值数量,用于缺失值处理

分析

  1. 数据初步检查

    :快速查看数据的形状和字段信息。

  2. 数据质量检测

    :包括检查缺失值和字段类型。

  3. 描述性统计

    :对数值型特征的分布进行基本分析,为后续EDA提供依据。


数据探索性分析(EDA)

import matplotlib.pyplot as pltimport seaborn as sns
# 遍历每一列,对类别型变量绘制计数图for col in df:    if df[col].dtype == 'O':  # 检查是否是类别型变量        sns.countplot(x=col, data=df)  # 统计每个类别的样本数量        plt.show()  # 显示图像        print('-------------------------------------------')
# 遍历每一列,对数值型变量绘制分布图for col in df:    if df[col].dtype != 'O':  # 检查是否是数值型变量        sns.histplot(df[col], kde=True)  # 画出直方图,并叠加核密度曲线        plt.show()  # 显示图像        print('-------------------------------------------')

图片

图片

图片

图片

图片

结果分析

  1. 类别型特征分布

    • 可视化各类别样本的分布,检查是否存在类别不均衡问题。

    • 如果某些类别样本过少,可能需要进行采样或合并处理。

  2. 数值型特征分布

    • 直方图可以直观展示数值型特征的分布形状(正态分布、偏态分布等)。

    • 核密度曲线(KDE)叠加可以更平滑地观察分布趋势。


数据预处理与划分

from sklearn.model_selection import train_test_splitfrom sklearn.preprocessing import LabelEncoder
# 初始化标签编码器le = LabelEncoder()
# 对类别型变量进行编码for col in df:    if df[col].dtype == 'O':  # 仅处理类别型变量        df[col] = le.fit_transform(df[col])  # 用整数替换类别值
# 分离特征变量和目标变量X = df.drop('EngagementLevel', axis=1)  # 特征矩阵Y = df['EngagementLevel']  # 目标变量
# 划分数据集为训练集和测试集X_train, X_test, Y_train, Y_test = train_test_split(    X, Y, test_size=0.3, random_state=10)  # 测试集占比30%

分析

  • 编码处理

    :将类别型变量转换为整数,方便模型接受。

  • 划分数据集

    :确保模型能够在独立的测试集上评估性能。


模型训练与预测

代码实现


from sklearn.ensemble import RandomForestClassifier
# 初始化随机森林模型model = RandomForestClassifier()
# 在训练集上训练模型model.fit(X_train, Y_train)
# 在测试集上进行预测ypred = model.predict(X_test)
# 打印预测结果print(ypred)  # 输出测试集上的预测值

分析

  • 随机森林模型是一种基于决策树的集成学习方法,具有较强的鲁棒性。

  • 预测结果可与真实值对比,以评估模型性能。


模型评价

代码实现

from sklearn.metrics import confusion_matrix, classification_report

# 计算混淆矩阵
mat = confusion_matrix(Y_test, ypred)

# 绘制混淆矩阵热图
cmap = sns.diverging_palette(220, 20, as_cmap=True)
sns.heatmap(mat, annot=True, fmt='d', cmap=cmap)
plt.savefig('confusion_matrix.png')  # 保存图像
plt.show()  # 显示图像


# 打印分类报告
print(classification_report(Y_test, ypred))

图片

结果分析

  1. 混淆矩阵

    • 直观展示分类模型在每个类别上的预测结果(真阳性、假阳性、真阴性、假阴性)。

    • 对角线上的值越大,模型准确率越高。

  2. 分类报告

    • 提供每个类别的准确率、召回率和 F1 分数。

    • 综合评估模型的分类性能。


代码实现

from lazypredict.Supervised import LazyClassifier
# 初始化 LazyClassifierreg = LazyClassifier(verbose=0, ignore_warnings=False, custom_metric=None)
# 训练并评估所有模型models, predictions = reg.fit(X_train, X_test, Y_train, Y_test)
# 打印所有模型的评估结果print(models)
# 选择最佳模型best_model = models.loc[models['Accuracy'] == models['Accuracy'].max()]print(best_model)

图片

图片

结果分析

  • LazyClassifier

     自动对多种模型进行训练与评估。

  • 最佳模型的选择依据准确率最大化,便于后续进一步优化。


总结

本文通过对学生情绪监控数据的探索与建模,展示了从数据加载、EDA、模型训练到评价的完整流程。实验表明,随机森林和自动模型选择工具(如 LazyPredict)均能为分类问题提供高效解决方案。

关键思路

  1. 数据探索是理解问题的基础,类别分布与特征分析尤为重要。

  2. 模型的评价不仅依赖准确率,还需综合考虑召回率与 F1 分数。

  3. 自动化工具(如 LazyPredict)能够极大提高建模效率。

标签:类别,示例,Python,模型,df,test,print,col
From: https://blog.csdn.net/qq_45932996/article/details/144654596

相关文章

  • 天地图接口Python代码详解
    天地图是中国国家测绘地理信息局推出的一款权威、全面的在线地理信息系统,提供了丰富的卫星影像、地形、矢量图等地图资源。开发者可以通过天地图提供的API接口,实现地图的展示、搜索、定位等功能。本文将详细介绍如何使用Python调用天地图接口,包括理论概述和详细的代码示例。一、......
  • 模型 结构化思维
    系列文章分享 模型,了解更多......
  • Python 设计模式入门指南:23 种设计模式轻松学
    Python设计模式入门指南:23种设计模式轻松学第一部分:创建型模式(5种)1.工厂方法模式2.抽象工厂模式3.单例模式4.建造者模式5.原型模式第二部分:结构型模式(7种)1.适配器模式2.装饰器模式3.代理模式4.外观模式5.桥接模式6.组合模式7.享元......
  • Python面试题大全及答案解析
    一、基础语法面试题(一)Python中的数据类型有哪些?请举例说明。Python有多种数据类型,包括整数(如10)、浮点数(如3.14)、字符串(如“Hello,World!”)、布尔值(True或False)、列表(如[1,2,3])、元组(如(1,2,3))、集合(如{1,2,3})、字典(如{“name”:“John”,“age”:25})。......
  • python多线程爬取药品信息
    多线程爬取药品信息利用多线程来获取药品信息可以实现高效的爬取,方便我们自己对药品的名称、价格以及功效进行了解和掌握导入需要使用到的包fromconcurrent.futures.threadimportThreadPoolExecutorfromlxmlimportetreeimportrequestsimportrandomimportcsv......
  • 以泰坦尼克乘客生存预测为例 介绍机器学习模型搭建
    一、问题分析与理解(一)明确问题类型一个模型出现的意义大部分都是预测。比如说鸢尾花的分类预测呀,或者波士顿的房价预测啦,都是根据已有的数据来预测未知的数据,具体的训练过程是交给计算机学习的,这便是机器学习。所以我们在拿到一个项目的时候,我们需要先知道我们的目的是什么,......
  • 基于Python实现的高校宿舍管理系统
    《基于Python的高校宿舍管理系统的设计和实现》该项目采用技术Python的django框架、mysql数据库,项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、核心代码介绍视频等软件开发环境及开发工具:开发语言:python使用框架:Django前端技术:JavaScript、VUE.js(2......
  • python pandas 优化内存占用(一)
            最近我用python处理excel,使用的是pandas库,我发现pandas库非常占用内存,一直想研究下如何优化pandas的内存占用,但一直没腾出空来,最近终于有时间研究一把了,我先把优化方法写上,如果你想了解更多的内容,可以看一下XX这篇文章,我优化的思路来源https://www.sohu.com......
  • 大模型日报 2024-12-20
    大模型日报2024-12-20大模型资讯标题:OpenAI发布季第十一天:ChatGPT深度集成Mac应用,从Chatbot变身AIAgent摘要:本文报道了OpenAI在其发布季第十一天推出的ChatGPT与Mac应用的深度集成,标志着ChatGPT从单一的会话助手转变为更强大的AI代理工具。文......
  • 51c大模型~合集94
    我自己的原文哦~   https://blog.51cto.com/whaosoft/12897659#D(R,O)Grasp重塑跨智能体灵巧手抓取,NUS邵林团队提出全新交互式表征,斩获CoRLWorkshop最佳机器人论文奖本文的作者均来自新加坡国立大学LinSLab。本文的共同第一作者为上海交通大学实习生卫振宇和新加坡......