Classificação do conjunto de dados de rosto com base no algoritmo de floresta aleatória

1. Sobre o autor

Li Jiamin, mulher, Escola de Informação Eletrônica, Universidade Politécnica de Xi'an, estudante de pós-graduação da classe 2021
Direção de pesquisa: reconhecimento de padrões e inteligência artificial
E-mail: [email protected]

Wu Yanzi , mulher, Escola de Informação Eletrônica, Universidade Politécnica de Xi'an, estudante de pós-graduação em 2021, Zhang Hongwei Grupo de
Pesquisa em Inteligência Artificial Direção de pesquisa: Reconhecimento de Padrões e Inteligência Artificial
E-mail: [email protected]

2. Introdução ao conhecimento sobre teoria

floresta aleatória

A floresta aleatória é na verdade um método de ensacamento especial que usa árvores de decisão como modelos no ensacamento. Primeiro, use o método bootstrap para gerar m conjuntos de treinamento. Em seguida, para cada conjunto de treinamento, construa uma árvore de decisão. Quando os nós encontram recursos para divisão, não é necessário encontrar todos os recursos que podem maximizar os indicadores (como informações ganho). , mas extrai aleatoriamente uma parte dos recursos dos recursos, encontra a solução ótima entre os recursos extraídos, aplica-a aos nós e divide. O método de floresta aleatória tem o bagging, ou seja, a ideia de integração, que na verdade equivale a amostrar tanto amostras quanto características (se os dados de treinamento são considerados como uma matriz, como é comum na prática, então é uma row sum As colunas são amostradas), então o overfitting pode ser evitado.
Resumindo: o Random Forest constrói várias árvores de decisão e as mescla para obter previsões mais precisas e estáveis.
insira a descrição da imagem aqui

3. Procedimento experimental

3.1 Introdução ao conjunto de dados

Labeled Faces in the Wild é um banco de dados de fotos faciais projetado para o estudo de problemas de reconhecimento facial irrestrito. O conjunto de dados contém mais de 13.000 imagens de rosto coletadas da rede. Cada rosto é marcado com o nome da pessoa na imagem. As 1.680 pessoas no gráfico têm duas ou mais fotos diferentes no conjunto de dados. Este conjunto de dados é uma coleção de imagens JPEG de pessoas famosas coletadas na Internet.
insira a descrição da imagem aqui>Introdução aos conjuntos de dados, preparações e pacotes a serem instalados
Código se esforça para ser bem comentado, voltado para grupos iniciantes
Usando python, blocos de código em fundo preto

3.2 Código experimental

import numpy as np
from sklearn.datasets import fetch_lfw_people

X, 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 PCA

pca = PCA(n_components=200, random_state=2022)  # PCA降维,10304维变100X = pca.fit_transform(X)  # 执行降维

from sklearn.model_selection import train_test_split

X_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 RandomForestClassifier

rf = 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_score

pre = 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 KFold

metrics = []  # 评估指标
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 Resultados em execução

insira a descrição da imagem aqui

3.3 Resumo experimental

Uma vantagem da floresta aleatória é que ela pode ser usada para tarefas de regressão e classificação, e é fácil ver a importância relativa dos recursos de entrada do modelo. Random Forest também é considerado um algoritmo muito conveniente e fácil de usar porque é o hiperparâmetro padrão que geralmente produz um bom resultado de previsão. O número de hiperparâmetros também não é tão grande, e o que eles representam é intuitivo e fácil de entender. Um grande problema no aprendizado de máquina é o overfitting, mas na maioria das vezes isso não é tão fácil para classificadores de floresta aleatória. Porque enquanto houver árvores suficientes na floresta, o classificador não se ajustará demais ao modelo.
A principal limitação das florestas aleatórias é que o uso de um grande número de árvores torna o algoritmo muito lento e não pode fazer previsões em tempo real. Em geral, esses algoritmos são rápidos para treinar e muito lentos para prever. Previsões mais precisas requerem mais árvores, o que resultará em modelos mais lentos. Na maioria das aplicações do mundo real, o algoritmo de floresta aleatória é rápido o suficiente, mas definitivamente haverá casos em que os requisitos de tempo real são muito altos, portanto, outros métodos só podem ser preferidos.

referir-se

O princípio do
algoritmo de floresta aleatória O princípio de funcionamento do algoritmo de floresta aleatória .

Acho que você gosta

Origin blog.csdn.net/m0_37758063/article/details/123644263
Recomendado
Clasificación