Melihat matriks kebingungan untuk model - Rekognition

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Melihat matriks kebingungan untuk model

Matriks kebingungan memungkinkan Anda melihat label yang membingungkan model Anda dengan label lain dalam model Anda. Dengan menggunakan matriks kebingungan, Anda dapat memfokuskan perbaikan Anda pada model.

Selama evaluasi model, Amazon Rekognition Custom Labels membuat matriks kebingungan dengan menggunakan gambar uji untuk mengidentifikasi label yang salah diidentifikasi (bingung). Amazon Rekognition Custom Labels hanya membuat matriks kebingungan untuk model klasifikasi. Matriks klasifikasi dapat diakses dari file ringkasan yang dibuat Label Kustom Rekognition Amazon selama pelatihan model. Anda tidak dapat melihat matriks kebingungan di konsol Label Kustom Rekognition Amazon.

Menggunakan matriks kebingungan

Tabel berikut adalah matriks kebingungan untuk proyek contoh klasifikasi gambar Kamar. Judul kolom adalah label (label kebenaran dasar) yang ditetapkan untuk gambar uji. Judul baris adalah label yang diprediksi model untuk gambar uji. Setiap sel adalah persentase prediksi untuk label (baris) yang seharusnya menjadi label kebenaran dasar (kolom). Misalnya, 67% prediksi untuk kamar mandi diberi label dengan benar sebagai kamar mandi. 33% persen kamar mandi salah diberi label sebagai dapur. Model berkinerja tinggi memiliki nilai sel tinggi ketika label yang diprediksi cocok dengan label kebenaran dasar. Anda dapat melihat ini sebagai garis diagonal dari label kebenaran yang diprediksi pertama hingga terakhir. Jika nilai sel adalah 0, tidak ada prediksi yang dibuat untuk label prediksi sel yang seharusnya menjadi label kebenaran dasar sel.

catatan

Karena model non-deterministik, nilai sel matriks kebingungan yang Anda dapatkan dari pelatihan proyek Rooms mungkin berbeda dari tabel berikut.

Matriks kebingungan mengidentifikasi area untuk fokus. Misalnya, matriks kebingungan menunjukkan bahwa 50% dari waktu model membingungkan lemari untuk kamar tidur. Dalam situasi ini, Anda harus menambahkan lebih banyak gambar lemari dan kamar tidur ke kumpulan data pelatihan Anda. Periksa juga apakah gambar lemari dan kamar tidur yang ada diberi label dengan benar. Ini akan membantu model membedakan kedua label dengan lebih baik. Untuk menambahkan lebih banyak gambar ke kumpulan data, lihatMenambahkan lebih banyak gambar ke dataset.

Meskipun matriks kebingungan sangat membantu, penting untuk mempertimbangkan metrik lainnya. Misalnya, 100% prediksi menemukan label floor_plan dengan benar, yang menunjukkan kinerja yang sangat baik. Namun, kumpulan data pengujian hanya memiliki 2 gambar dengan label floor_plan. Ini juga memiliki 11 gambar dengan label living_space. Ketidakseimbangan ini juga ada dalam kumpulan data pelatihan (13 gambar living_space dan 2 gambar lemari). Untuk mendapatkan evaluasi yang lebih akurat, seimbangkan kumpulan data pelatihan dan uji dengan menambahkan lebih banyak gambar label yang kurang terwakili (denah lantai dalam contoh ini). Untuk mendapatkan jumlah gambar uji per label, lihatMengakses metrik evaluasi (Konsol).

Label kebenaran dasar
Label yang diprediksi halaman belakang Kamar mandi kamar tidur lemari pakaian jalan masuk_ lantai_plan halaman depan dapur living_space teras
halaman belakang 75% 0% 0% 0% 0% 0% 33% 0% 0% 0%
Kamar mandi 0% 67% 0% 0% 0% 0% 0% 0% 0% 0%
kamar tidur 0% 0% 82% 50% 0% 0% 0% 0% 9% 0%
lemari pakaian 0% 0% 0% 50% 0% 0% 0% 0% 0% 0%
jalan masuk_ 0% 0% 0% 0% 33% 0% 0% 0% 0% 0%
lantai_plan 0% 0% 0% 0% 0% 100% 0% 0% 0% 0%
halaman depan 25% 0% 0% 0% 0% 0% 67% 0% 0% 0%
dapur 0% 33% 0% 0% 0% 0% 0% 88% 0% 0%
living_space 0% 0% 18% 0% 67% 0% 0% 12% 91% 33%
teras 0% 0% 0% 0% 0% 0% 0% 0% 0% 67%

Mendapatkan matriks kebingungan untuk sebuah model

Kode berikut menggunakan operasi DescribeProjectsdan DescribeProjectVersi untuk mendapatkan file ringkasan untuk model. Kemudian menggunakan file ringkasan untuk menampilkan matriks kebingungan untuk model.

Untuk menampilkan matriks kebingungan untuk model (SDK)
  1. Jika Anda belum melakukannya, instal dan konfigurasikan AWS CLI dan AWS SDK. Untuk informasi selengkapnya, lihat Langkah 4: Siapkan AWS CLI dan AWS SDK.

  2. Gunakan kode berikut untuk menampilkan matriks kebingungan untuk model. Berikan argumen baris perintah berikut:

    • project_name— nama proyek yang ingin Anda gunakan. Anda bisa mendapatkan nama proyek dari halaman proyek di konsol Amazon Rekognition Custom Labels.

    • version_name— versi model yang ingin Anda gunakan. Anda bisa mendapatkan nama versi dari halaman detail proyek di konsol Amazon Rekognition Custom Labels.

    # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: Apache-2.0 """ Purpose Shows how to display the confusion matrix for an Amazon Rekognition Custom labels image classification model. """ import json import argparse import logging import boto3 import pandas as pd from botocore.exceptions import ClientError logger = logging.getLogger(__name__) def get_model_summary_location(rek_client, project_name, version_name): """ Get the summary file location for a model. :param rek_client: A Boto3 Rekognition client. :param project_arn: The Amazon Resource Name (ARN) of the project that contains the model. :param model_arn: The Amazon Resource Name (ARN) of the model. :return: The location of the model summary file. """ try: logger.info( "Getting summary file for model %s in project %s.", version_name, project_name) summary_location = "" # Get the project ARN from the project name. response = rek_client.describe_projects(ProjectNames=[project_name]) assert len(response['ProjectDescriptions']) > 0, \ f"Project {project_name} not found." project_arn = response['ProjectDescriptions'][0]['ProjectArn'] # Get the summary file location for the model. describe_response = rek_client.describe_project_versions(ProjectArn=project_arn, VersionNames=[version_name]) assert len(describe_response['ProjectVersionDescriptions']) > 0, \ f"Model {version_name} not found." model=describe_response['ProjectVersionDescriptions'][0] evaluation_results=model['EvaluationResult'] summary_location=(f"s3://{evaluation_results['Summary']['S3Object']['Bucket']}" f"/{evaluation_results['Summary']['S3Object']['Name']}") return summary_location except ClientError as err: logger.exception( "Couldn't get summary file location: %s", err.response['Error']['Message']) raise def show_confusion_matrix(summary): """ Shows the confusion matrix for an Amazon Rekognition Custom Labels image classification model. :param summary: The summary file JSON object. """ pd.options.display.float_format = '{:.0%}'.format # Load the model summary JSON into a DataFrame. summary_df = pd.DataFrame( summary['AggregatedEvaluationResults']['ConfusionMatrix']) # Get the confusion matrix. confusion_matrix = summary_df.pivot_table(index='PredictedLabel', columns='GroundTruthLabel', fill_value=0.0).astype(float) # Display the confusion matrix. print(confusion_matrix) def get_summary(s3_resource, summary): """ Gets the summary file. : return: The summary file in bytes. """ try: summary_bucket, summary_key = summary.replace( "s3://", "").split("/", 1) bucket = s3_resource.Bucket(summary_bucket) obj = bucket.Object(summary_key) body = obj.get()['Body'].read() logger.info( "Got summary file '%s' from bucket '%s'.", obj.key, obj.bucket_name) except ClientError: logger.exception( "Couldn't get summary file '%s' from bucket '%s'.", obj.key, obj.bucket_name) raise else: return body def add_arguments(parser): """ Adds command line arguments to the parser. : param parser: The command line parser. """ parser.add_argument( "project_name", help="The ARN of the project in which the model resides." ) parser.add_argument( "version_name", help="The version of the model that you want to describe." ) def main(): """ Entry point for script. """ logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s") try: # Get the command line arguments. parser = argparse.ArgumentParser(usage=argparse.SUPPRESS) add_arguments(parser) args = parser.parse_args() print( f"Showing confusion matrix for: {args.version_name} for project {args.project_name}.") session = boto3.Session(profile_name='custom-labels-access') rekognition_client = session.client("rekognition") s3_resource = session.resource('s3') # Get the summary file for the model. summary_location = get_model_summary_location(rekognition_client, args.project_name, args.version_name ) summary = json.loads(get_summary(s3_resource, summary_location)) # Check that the confusion matrix is available. assert 'ConfusionMatrix' in summary['AggregatedEvaluationResults'], \ "Confusion matrix not found in summary. Is the model a classification model?" # Show the confusion matrix. show_confusion_matrix(summary) print("Done") except ClientError as err: logger.exception("Problem showing confusion matrix: %s", err) print(f"Problem describing model: {err}") except AssertionError as err: logger.exception( "Error: %s.\n", err) print( f"Error: {err}\n") if __name__ == "__main__": main()