基于随机森林算法的人脸数据集分类

article/2025/8/21 18:35:02

目录

  • 1. 作者介绍
  • 2. 关于理论方面的知识介绍
  • 随机森林
  • 3. 实验过程
    • 3.1 数据集介绍
    • 3.2 实验代码
    • 3.3 运行结果
    • 3.3 实验总结
  • 参考

1. 作者介绍

李佳敏,女,西安工程大学电子信息学院,2021级研究生
研究方向:模式识别与人工智能
电子邮件:2429154859@qq.com

吴燕子,女,西安工程大学电子信息学院,2021级研究生,张宏伟人工智能课题组
研究方向:模式识别与人工智能
电子邮件:1219428323@qq.com

2. 关于理论方面的知识介绍

随机森林

随机森林实际上是一种特殊的bagging方法,它将决策树用作bagging中的模型。首先,用bootstrap方法生成m个训练集,然后,对于每个训练集,构造一颗决策树,在节点找特征进行分裂的时候,并不是对所有特征找到能使得指标(如信息增益)最大的,而是在特征中随机抽取一部分特征,在抽到的特征中间找到最优解,应用于节点,进行分裂。随机森林的方法由于有了bagging,也就是集成的思想在,实际上相当于对于样本和特征都进行了采样(如果把训练数据看成矩阵,就像实际中常见的那样,那么就是一个行和列都进行采样的过程),所以可以避免过拟合。
简而言之:随机森林建立了多个决策树,并将它们合并在一起以获得更准确和稳定的预测。
在这里插入图片描述

3. 实验过程

3.1 数据集介绍

Labeled Faces in the Wild是一个面部照片数据库,专为研究无约束人脸识别问题而设计。该数据集包含从网络收集的13,000多张面部图像。每张脸都标有图中人物的名字。图中的1680人在数据集中有两张或更多不同的照片。该数据集是在互联网上收集的著名人物的JPEG图片的集合。
在这里插入图片描述>介绍数据集,准备和需要安装的软件包
代码力求有详细的注释,面向初学者群体
使用python,黑色背景的代码块

3.2 实验代码

import numpy as np
from sklearn.datasets import fetch_lfw_peopleX, labels = fetch_lfw_people(return_X_y=True, min_faces_per_person=230)
print(X.shape, labels.shape)
print(len(set(labels)))  # 类别数from sklearn.decomposition import PCApca = PCA(n_components=200, random_state=2022)  # PCA降维,10304维变100X = pca.fit_transform(X)  # 执行降维from sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test = train_test_split(X, labels, random_state=2022, test_size=0.25, shuffle=True)
# 分割数据集,测试集占25%from sklearn.ensemble import RandomForestClassifierrf = RandomForestClassifier(n_estimators=100, n_jobs=-1,random_state=2022,max_depth=9)  # 随机森林模型 n_estimators决策树数量 n_jobs使用所有cpu核心计算 random_state随机种子,结果可重现
rf.fit(X_train, y_train)  # 训练
print("训练集准确率", rf.score(X_train, y_train))
print("测试集准确率", rf.score(X_test, y_test))from sklearn.metrics import classification_report
from sklearn.metrics import accuracy_score, recall_score, precision_score, f1_scorepre = rf.predict(X_test)  # 预测 类别
print("测试集准确率", accuracy_score(y_test, pre))
print("测试集召回率", recall_score(y_test, pre, average="weighted"))
print("测试集精确率", precision_score(y_test, pre, average="weighted"))
print("测试集f1", f1_score(y_test, pre, average="weighted"))from sklearn.model_selection import KFoldmetrics = []  # 评估指标
kf = KFold(n_splits=5, shuffle=True, random_state=2022)  # n_splits折数 shuffle打乱 random_state随机种子,结果可重现
for train, test in kf.split(X):X_train, X_test, y_train, y_test = X[train], X[test], labels[train], labels[test]  # 重新划分数据集rf = RandomForestClassifier(n_estimators=100, n_jobs=-1, random_state=2022, max_depth=9)rf.fit(X_train, y_train)pre = rf.predict(X_test)  # 预测 类别metrics.append([accuracy_score(y_test, pre),recall_score(y_test, pre, average="weighted"),precision_score(y_test, pre, average="weighted"),f1_score(y_test, pre, average="weighted"),])
metrics = np.mean(metrics, axis=0)  # 求平均值print("5折交叉验证 准确率、召回率、精确率和f1分别为", metrics)

3.3 运行结果

在这里插入图片描述

3.3 实验总结

随机森林的一个优点是它可以用于回归和分类任务,并且很容易查看模型的输入特征的相对重要性。随机森林同时也被认为是一种非常方便且易于使用的算法,因为它是默认的超参数通常会产生一个很好的预测结果。超参数的数量也不是那么多,而且它们所代表的含义直观易懂。机器学习中的一个重大问题是过拟合,但大多数情况下这对于随机森林分类器而言不会那么容易出现。因为只要森林中有足够多的树,分类器就不会过度拟合模型。
随机森林的主要限制在于使用大量的树会使算法变得很慢,并且无法做到实时预测。一般而言,这些算法训练速度很快,预测十分缓慢。越准确的预测需要越多的树,这将导致模型越慢。在大多数现实世界的应用中,随机森林算法已经足够快,但肯定会遇到实时性要求很高的情况,那就只能首选其他方法。

参考

随机森林算法原理.
随机森林算法工作原理.


http://chatgpt.dhexx.cn/article/r1Mpe4Ct.shtml

相关文章

随机森林算法的Python实现

随机森林主要应用于回归和分类。 它几乎可以将任何数据填进去,下文使用鸢尾花数据进行分类和预测 环境 python3.8 数据集 鸢尾花数据集 def dataset(self):iris load_iris()feature pd.DataFrame(datairis.data, columnsiris.feature_names)target pd.DataFrame(…

基于Matlab的随机森林算法实现(附算法介绍及代码详解)

本算例完整代码领取方式在文末展示~ 一、内容提要 在地学领域中,岩性的准确识别对于储层评价来说至关重要。因此,今天笔者想要分享的是随机森林算法在岩性识别中的应用与代码实现。 科普中国科学百科定义:随机森林(Random fores…

随机森林 c语言,随机森林算法有哪些优缺点

什么是随机森林算法?随机森林算法有哪些优缺点?随机森林是一种有监督学习算法,是以决策树为基学习器的集成学习算法,随机森林非常简单,易于实现,计算开销也很小,但是它在分类和回归上表现出非常惊人的性能&#xff0…

【随机森林】深入浅出讲解随机森林算法

本文收录于《深入浅出讲解自然语言处理》专栏,此专栏聚焦于自然语言处理领域的各大经典算法,将持续更新,欢迎大家订阅!​个人主页:有梦想的程序星空​个人介绍:小编是人工智能领域硕士,全栈工程…

随机森林算法总结

随机森林算法 个体学习器 个体学习器又称为基学习器(base learner),由单个的学习算法训练数据得到,比如“决策树算法”,“神经网络算法”等等。在不正式的说法下,基学习器,弱学习器&#xff0…

Android动画(帧动画、补间动画、属性动画)讲解

Android动画(帧动画、补间动画、属性动画)讲解 首先我们来看看啥是帧动画、补间动画、属性动画。 介绍: 帧动画:是一种常见的动画形式(Frame By Frame),其原理是在“连续的关键帧”中分解动画动…

Android动画学习记录一(Android动画种类、补间动画和帧动画)

Android动画学习记录一(动画种类、补间动画和帧动画) 动画种类、补间动画和帧动画 Android动画学习记录一(动画种类、补间动画和帧动画)一、动画种类二、View动画2.1 补间动画补间动画公有属性平移动画(Translate&…

Android动画分类与总结

前言 动画的使用 是 Android 开发中常用的知识可是动画的种类繁多、使用复杂,每当需要 采用自定义动画 实现 复杂的动画效果时,很多开发者就显得束手无策本文将献上一份Android动画的全面介绍攻略,包括动画的种类、使用、原理等,…

Android动画分析(ValueAnimator)

动画创建 先看入口函数: 参数很熟悉了,具体看里面做了什么,其实也很简单,创建一个实例对象,并将参数设置到对象中。 第一个参数暂时先不看,看第二个参数,**anim.setObjectValues(values)**重…

好看的android动画效果

这段时间看到一些比较好看的android动画效果,下面我就给大家一些我比较喜欢的动画效果,并附上源码希望对你们有用处。 1.很简单却很酷的粒子破碎效果 介绍: 实现思路 1.新建一个 Bean Particle,表示一个粒子对象;新…

Android 动画系列二之补间动画

1. 前言 Android三种动画中的第二种——补间动画(Tween),和帧动画不同,帧动画 是通过连续播放图片来模拟动画效果,而补间动画开发者只需指定动画开始,以及动画结束"关键帧", 而动画变化的"中间帧"…

Android动画大合集

android中的动画实现方式繁多,在项目中也经常用到动画,网上有很多人也都进行了一些总结,但是感觉还是零零散散,自己总结一下才能加深印象,以后有时间了,也可以从各个分类里进一步去补充完善。 如果喜欢看G…

Android中动画详细讲解

一、前言 Android动画经常会在切换activity、数据加载时会用到动画效果,以前接触的比较少,用的都是封装好的动画效果,自己写的比较少,今天心血来潮想写一个自己设计的动画效果,发现学习动画代码比较简单,但…

android 动画中插值器Interpolator详解

1、插值器简介–Interpolator 通俗易懂的说,Interpolator负责控制动画变化的速率,即确定了 动画效果变化的模式,使得基本的动画效果能够以匀速、加速、减速、抛物线速率等各种速率变化 动画是开发者给定开始和结束的“关键帧”,…

Android中的属性动画

1.属性动画简介 接下来我们学习Android动画中的第三种动画——属性动画(Property Animation) Animation一般动画就是我们前面学的帧动画和补间动画!Animator则是本节要讲的属性动画! 1.1为什么要用属性动画 补间动画功能比较单调,只有四种动画(透明度…

android 动画库

1. Spruce(安卓动画库)(是一个轻量级的动画库,可以帮助排版屏幕上的动画。使用有很多不同的动画库时,开发人员需要确保每个视图都能够在适当的时间活动。) 2. Litho(是一个非常强大的框架,以声明的方式构建…

android动画类型有哪几种,Android动画概念大揭秘

前言 说起Android里面的动画,我可能会立马想起平移、旋转、渐变、缩放等动画效果,但是对于他们的属性就记的不太清了,知道的都是皮毛而且很容易忘记,每次需要用到的时候总要去baidu或者google,完全无法做到灵活应用,信手拈来。所以抽时间重新温故了一下动画相关的知识,把…

Android 动画分类

前言 动画的使用 是 Android 开发中常用的知识可是动画的种类繁多、使用复杂,每当需要 采用自定义动画 实现 复杂的动画效果时,很多开发者就显得束手无策本文将献上一份Android动画的全面介绍攻略,包括动画的种类、使用、原理等,能…

Android动画

这篇博客主要总结一下自己在项目中对动画的一些使用。我写博客,其实更多的是总结自己在工作中用到的一些知识。比如某一段时间一个知识点相关的技术用的比较多,那我会总结一下。其实,对于Android动画的总结,这是几个月前就应该写完…

Android动画之帧动画

在Android开发时,为了实现一些动态的炫酷的效果,我们常用到帧动画,View动画(补间动画)和属性动画,今天就来总结下我在使用帧动画的实现方式。 1、什么是帧动画? 帧动画就是顺序播放一组预先定…