当前位置:首页 > AI > 正文内容

运用sklearn中的Adaboost分类器来完成ORL人脸分类

邻居的猫1个月前 (12-09)AI1120

运用sklearn中的Adaboost分类器来完成ORL人脸分类

前语:博主上网阅读运用Adaboost完成人脸分类时,发现并没有分类,大部分全都是关于人脸辨认检测的,并没有完成对某个人的精准分类(例如,这个人叫什么名字),有关ORL辨认的,大多是用PCA降维或许SVM完成的,也没有用Adaboost的,故因而写了个漫笔。

算法原理

算法进程:

假定咱们有个二分类练习数据集T={(x1,y1),...,(xN,yN)},yi∈{−1,+1}.

  • 1)在刚开始,咱们让每个变量xi都有相同的权重,也便是说,刚开始每个样本在基分类器中的作用相同。

    ​ Dj = (wj1,wj2,…. wji,…. wjN) wjN = 1/N

    Dj表明权重散布的向量,其间j表明当时是榜首轮由于后边还要进行许多轮学习,每次都会改动这个散布。wji表明第j轮对应的第xi变量

  • 2)对 m = 1 , 2 , . . . , M ,合计M个基分类器 进行以下过程:

    ①:学习得到根本分类器Gm(x)

    ​ 运用具有权值散布Dm的练习数据集进行学习,得到根本分类器Gm(x),Gm(x)能够依据输入给出 +1 或 -1 的输出

    ②:核算单个基分类器的分类差错率em

    ​ em = \(\sum_{i=1}^N\) wmi I(Gm(xi) \(\neq\)yi)

    这个公式什么意思呢:关于第m轮的差错 em,有对应xi对应的权重wmi,I 是指示函数,当后边括号里的式子建立就取1,不建立就取0, i = 1 ,2,…N 一切的xi 所以 em 便是把一切分类过错的样本权重加起来,假如初始权重持平,那么5个样本分错2个,过错率便是0.4,假如权重是[0.5,0.1,0.1,0.1,0.1,0.1],而权重为0.5的样本分错了,终究过错率便是0.5。因而这个规划使得,将权重高的样本分类正确能明显下降分类差错率。

    ③:核算 Gm(x) 的分类器投票权重αm(即在终究成果所占的重要性)

    假定em = 0.3,即分类差错较小,过错率较小,则,α较大。

    关于二分类问题,过错率超越0.5的话,只需进行简略的彻底回转就能够使其降到0.5以下。举例来说,若 分类成果为 [1,1,1,-1] 过错率0.75,那么只需改成 [-1,-1,-1,1] 过错率就只有0.25了。(另一种主意是随机分类的过错率是0.5,弱学习器尽管弱,正确率也是要略高于随机分类的。

    ④:更新练习集的权重散布

    关于第m+1轮:

    wm+1,i = \(w_{mi}e^{-α_my_iG_m(x_i)}/Z_m\)

    其间,\(Z_m = \sum_{i=1}^Ne^{-α_my_iG_m(x_i)}\)

  • 得到终究分类器

代码完成

试验渠道:kaggle 在线notebook kaggle具有不必配环境,有许多在线公共数据集,省去了许多费事

ORL数据集

咱们选用公共数据库,进行算法完成。

选取ORL人脸数据库作为试验样本,一共40个人,每人10幅图画,图画巨细为 112*92 像素。图画自身现已通过处理,不需求进行归一化和校准等作业。试验样本分为训 练样本和测验样本。首要设置练习样本集,挑选40个人前6张图片作为练习样本,进行练习。然后设置测验样本集,将40个人后4张图片作为测验样本,进行选取辨认。

该数据集来历:https://www.kaggle.com/datasets/jagadeeshkasaraneni/orlfaces

详细代码:

import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)

import os
for dirname, _, filenames in os.walk('/kaggle/input'):
    for filename in filenames:
        print(os.path.join(dirname, filename))

输出:/kaggle/input/orlfaces/ORL_faces.npz

orlfaces = np.load("/kaggle/input/orlfaces/ORL_faces.npz")
orlfaces.files

输出:['testY', 'testX', 'trainX', 'trainY']

该数据会集的练习集和测验集现已给咱们区分好了 练习集60% 测验集40%

print(orlfaces['trainX'].shape)
print(orlfaces['testX'].shape)

输出:(240, 10304)
(160, 10304)

240是指一共有24个人的图片,每个人有10张,所以是240
测验集共有16个人,因而榜首维的值为160
112 * 92 = 10304,即咱们要的图片是112 * 92的,他放在同一维度了,所以是10304

X_train = np.reshape(orlfaces['trainX'], (240, 112, 92))
Y_train = orlfaces['trainY']
X_test = np.reshape(orlfaces['testX'], (160, 112, 92))
Y_test = orlfaces['testY']
print(Y_train.shape)
Y_train

输出:
(240,)

array([ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8,
8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11,
11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12,
12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14,
14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18,
18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
19, 19], dtype=uint8)

咱们只展现其间3张图片:

## import matplotlib.pyplot as plt
%matplotlib inline

def show_images(images) -> None:
    n: int = len(images)
    for i in range(10):  # 图片太多了,展现10张图片算了吧   不然这儿填 range(n)
        plt.figure()
        plt.imshow(images[i])

show_images(X_train)

输出:

剩余图片省掉...

from sklearn.ensemble import AdaBoostClassifier
from sklearn.metrics import accuracy_score


# 假定X_train和y_train是练习样本和标签,X_test和y_test是测验样本和标签
# 这儿需求依据实践的图画数据来加载和预处理

# 初始化Adaboost分类器
ada_clf = AdaBoostClassifier(n_estimators=200,learning_rate = 0.1, random_state=42)   



# 练习模型
ada_clf.fit(X_train.reshape(-1,112*92),Y_train)    # Adaboost分类器要求X_train维度 <= 2

# 猜测测验样本
Y_pred = ada_clf.predict(X_test.reshape(-1,112*92))

# 核算准确率
accuracy = accuracy_score(Y_test, Y_pred)
print(f"辨认准确率: {accuracy:.2f}")

输出:
辨认准确率: 0.76

print(Y_test,Y_pred)

咱们能够将猜测Y和实在Y打印出来,进行比较,准确率为0.76

咱们能够调整n_estimators,learning_rate , random_stat取值,来提高准确率:

  • n_estimators:这个参数指定了要运用的弱分类器的数量。n_estimators的值越大,意味着更多的弱分类器会被用来构建强分类器。这或许会导致更好的功能,但也会添加模型的复杂度和练习时刻。
  • learning_rate:这个参数是每个弱分类器对终究猜测的贡献率。在AdaBoost算法中,每个弱分类器的权重与其准确性成份额。learning_rate参数操控这个份额的巨细。较小的learning_rate`意味着每个弱分类器对终究成果的影响较小,或许需求更多的弱分类器来到达相同的作用。
  • random_state:这个参数用于操控随机数生成器的种子,以保证成果的可重复性。设置random_state`能够保证每次运转代码时,只需输入数据不变,得到的成果都是相同的。这关于调试和试验是非常重要的,由于它答应研究人员比较不同模型或参数设置的作用。

参阅

https://blog.csdn.net/codelady_g/article/details/122571189
https://www.kaggle.com/code/jagadeeshkasaraneni/orlfacerecognition/notebook

扫描二维码推送至手机访问。

版权声明:本文由51Blog发布,如需转载请注明出处。

本文链接:https://www.51blog.vip/?id=377

分享给朋友:

“运用sklearn中的Adaboost分类器来完成ORL人脸分类” 的相关文章

AI综合,AI技术浪潮下的数字化转型与未来展望

AI综合,AI技术浪潮下的数字化转型与未来展望

1. 技术层面:包括机器学习、深度学习、自然语言处理、计算机视觉、语音识别、强化学习等核心技术。这些技术是AI综合的基础,它们的发展和应用推动了AI领域的进步。2. 应用层面:AI综合涵盖了AI技术在各个领域的应用,如智能制造、智慧城市、自动驾驶、医疗健康、金融科技、教育、娱乐等。这些应用展示了AI...

机器学习包括什么,机器学习概述

机器学习包括什么,机器学习概述

机器学习是人工智能的一个分支,它使计算机系统能够从数据中学习并做出决策,而不需要显式地进行编程。机器学习包括以下几个主要方面:1. 监督学习(Supervised Learning):在这种学习中,算法从标记的训练数据中学习,以便对未标记的数据进行预测。监督学习分为两类:回归和分类。回归任务是预测连...

ai综合能源,推动能源转型新篇章

ai综合能源,推动能源转型新篇章

AI在综合能源领域的应用非常广泛,涵盖了从发电、输电到用电的各个环节,以下是主要应用和趋势:1. 提高能源利用效率: 智能化调度:通过机器学习算法,AI可以分析历史数据,预测未来的能源需求趋势,为能源规划和决策提供科学依据,优化运行参数、调度策略和用电设备控制,从而显著减少能源浪费和损耗。...

综合自拍AI明星,科技与娱乐的完美融合

综合自拍AI明星,科技与娱乐的完美融合

1. Maskr AI: 功能:用户可以上传自己的自拍照,选择想要合影的明星,几秒钟内生成高质量、超逼真的合影照片。 适用场n2. Supawork AI: 功能:提供100多种AI生成自拍风格,用户可以选择“写实”、“休闲”或“艺术”等风格,上传自拍照后生成引人注目的艺术作品。...

学习机器人插画

1. 了解基础绘画知识:如果你是绘画初学者,建议先从基础绘画技巧开始学习,比如线条、形状、光影和色彩等。掌握这些基本技能将有助于你更好地表达机器人插画中的细节和质感。2. 研究机器人设计:了解机器人的基本结构和功能。你可以通过观看科幻电影、阅读科幻小说或浏览相关网站来获取灵感。研究不同类型的机器人,...

机器学习系统设计,构建高效智能解决方案的步骤与策略

机器学习系统设计,构建高效智能解决方案的步骤与策略

1. 定义问题:首先,你需要明确你想要解决的问题。这包括确定问题的类型(如分类、回归、聚类等)以及你想要达到的目标。2. 数据收集:根据问题的定义,收集相关的数据。数据可以来自各种来源,如数据库、文件、API等。确保数据的质量和数量,以便进行有效的训练和测试。3. 数据预处理:对收集到的数据进行清洗...