Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save skilfoy/2550cbd88f19eee6b31ab5c88124b6aa to your computer and use it in GitHub Desktop.
Save skilfoy/2550cbd88f19eee6b31ab5c88124b6aa to your computer and use it in GitHub Desktop.
Facial Recognition with Supervised Learning.ipynb
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/skilfoy/2550cbd88f19eee6b31ab5c88124b6aa/facial-recognition-with-supervised-learning.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"source": [
"![facialrecognition.jpg](data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEBLAEsAAD/4QDvRXhpZgAASUkqAAgAAAADAA4BAgClAAAAMgAAABoBBQABAAAA1wAAABsBBQABAAAA3wAAAAAAAABQb3J0cmFpdCBvZiBtYW4gYW5kIHdvbWFuIHdpdGggb25seSBmYWNlIHNpbGhvdWV0dGUuIFR3byBwZW9wbGUgaGF2ZSB3aGl0ZSBmYWNpYWwgc2Nhbm5lciBsaW5lcyBvbiB0aGVpciBmYWNlcy4gRmFjZSBzY2FubmluZyBjb25jZXB0LiBCYWNrZ3JvdW5kIHNvbGlkIHllbGxvdyBjb2xvci4sAQAAAQAAACwBAAABAAAA/+EFumh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8APD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyI+Cgk8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgoJCTxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1sbnM6SXB0YzR4bXBDb3JlPSJodHRwOi8vaXB0Yy5vcmcvc3RkL0lwdGM0eG1wQ29yZS8xLjAveG1sbnMvIiAgIHhtbG5zOkdldHR5SW1hZ2VzR0lGVD0iaHR0cDovL3htcC5nZXR0eWltYWdlcy5jb20vZ2lmdC8xLjAvIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBsdXM9Imh0dHA6Ly9ucy51c2VwbHVzLm9yZy9sZGYveG1wLzEuMC8iICB4bWxuczppcHRjRXh0PSJodHRwOi8vaXB0Yy5vcmcvc3RkL0lwdGM0eG1wRXh0LzIwMDgtMDItMjkvIiB4bWxuczp4bXBSaWdodHM9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9yaWdodHMvIiBwaG90b3Nob3A6Q3JlZGl0PSJHZXR0eSBJbWFnZXMiIEdldHR5SW1hZ2VzR0lGVDpBc3NldElEPSIxMzMxMjMwNzg0IiB4bXBSaWdodHM6V2ViU3RhdGVtZW50PSJodHRwczovL3d3dy5pc3RvY2twaG90by5jb20vbGVnYWwvbGljZW5zZS1hZ3JlZW1lbnQ/dXRtX21lZGl1bT1vcmdhbmljJmFtcDt1dG1fc291cmNlPWdvb2dsZSZhbXA7dXRtX2NhbXBhaWduPWlwdGN1cmwiID4KPGRjOmNyZWF0b3I+PHJkZjpTZXE+PHJkZjpsaT5yZWtsYW1sYXI8L3JkZjpsaT48L3JkZjpTZXE+PC9kYzpjcmVhdG9yPjxkYzpkZXNjcmlwdGlvbj48cmRmOkFsdD48cmRmOmxpIHhtbDpsYW5nPSJ4LWRlZmF1bHQiPlBvcnRyYWl0IG9mIG1hbiBhbmQgd29tYW4gd2l0aCBvbmx5IGZhY2Ugc2lsaG91ZXR0ZS4gVHdvIHBlb3BsZSBoYXZlIHdoaXRlIGZhY2lhbCBzY2FubmVyIGxpbmVzIG9uIHRoZWlyIGZhY2VzLiBGYWNlIHNjYW5uaW5nIGNvbmNlcHQuIEJhY2tncm91bmQgc29saWQgeWVsbG93IGNvbG9yLjwvcmRmOmxpPjwvcmRmOkFsdD48L2RjOmRlc2NyaXB0aW9uPgo8cGx1czpMaWNlbnNvcj48cmRmOlNlcT48cmRmOmxpIHJkZjpwYXJzZVR5cGU9J1Jlc291cmNlJz48cGx1czpMaWNlbnNvclVSTD5odHRwczovL3d3dy5pc3RvY2twaG90by5jb20vcGhvdG8vbGljZW5zZS1nbTEzMzEyMzA3ODQtP3V0bV9tZWRpdW09b3JnYW5pYyZhbXA7dXRtX3NvdXJjZT1nb29nbGUmYW1wO3V0bV9jYW1wYWlnbj1pcHRjdXJsPC9wbHVzOkxpY2Vuc29yVVJMPjwvcmRmOmxpPjwvcmRmOlNlcT48L3BsdXM6TGljZW5zb3I+CgkJPC9yZGY6RGVzY3JpcHRpb24+Cgk8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJ3Ij8+Cv/tAOZQaG90b3Nob3AgMy4wADhCSU0EBAAAAAAAyRwCUAAJcmVrbGFtbGFyHAJ4AKVQb3J0cmFpdCBvZiBtYW4gYW5kIHdv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)"
],
"metadata": {
"id": "88c639dc-bfcd-449e-bddd-55f8bd551dd5"
},
"id": "88c639dc-bfcd-449e-bddd-55f8bd551dd5",
"cell_type": "markdown"
},
{
"cell_type": "markdown",
"source": [
"## Project Background"
],
"metadata": {
"id": "smegcaVtrrvJ"
},
"id": "smegcaVtrrvJ"
},
{
"source": [
"### **Project Scenario**\n",
"\n",
"In this project, we play a member of an elite group of data scientists, specialising in advanced facial recognition technology. The firm is dedicated to identifying and safeguarding prominent individuals from various spheres—ranging from entertainment and sports to politics and philanthropy. The team's mission is to deploy AI-driven solutions that can accurately distinguish between images of notable personalities and the general populace, enhancing the personal security of such high-profile individuals. You're to focus on Arnold Schwarzenegger, a figure whose accomplishments span from bodybuilding champion to Hollywood icon, and from philanthropist to the Governor of California."
],
"metadata": {
"id": "0fd04b96-d360-411c-8b17-a10382c97d29"
},
"id": "0fd04b96-d360-411c-8b17-a10382c97d29",
"cell_type": "markdown"
},
{
"source": [
"### **The Data**\n",
"The `data/lfw_arnie_nonarnie.csv` dataset contains processed facial image data derived from the \"Labeled Faces in the Wild\" (LFW) dataset, focusing specifically on images of Arnold Schwarzenegger and other individuals not identified as him. This dataset has been prepared to aid in the development and evaluation of facial recognition models. There are 40 images of Arnold Schwarzenegger and 150 of other people.\n",
"\n",
"| Column Name | Description |\n",
"|-------------|-------------|\n",
"| PC1, PC2, ... PCN | Principal components from PCA, capturing key image features. |\n",
"| Label | Binary indicator: `1` for Arnold Schwarzenegger, `0` for others. |"
],
"metadata": {
"id": "be124832-8192-4f93-b487-247c3d03d23b"
},
"id": "be124832-8192-4f93-b487-247c3d03d23b",
"cell_type": "markdown"
},
{
"source": [
"# Facial Recognition for Enhanced Security of High-Profile Individuals"
],
"metadata": {
"id": "06d45f35-7e25-4515-8d9d-59b1c6a2e9ed"
},
"cell_type": "markdown",
"id": "06d45f35-7e25-4515-8d9d-59b1c6a2e9ed"
},
{
"source": [
"## Introduction\n",
"\n",
"In this project, we aim to leverage advanced facial recognition technology to enhance the security of high-profile individuals. Our focus is on accurately distinguishing images of Arnold Schwarzenegger from others using machine learning techniques. This will assist in ensuring the safety and security of such prominent figures."
],
"metadata": {
"id": "a03619b9-17e7-4ae1-9160-56db3b9267b2"
},
"cell_type": "markdown",
"id": "a03619b9-17e7-4ae1-9160-56db3b9267b2"
},
{
"source": [
"## Data Overview\n",
"\n",
"We utilize the `data/lfw_arnie_nonarnie.csv` dataset, which comprises processed facial image data of Arnold Schwarzenegger and other individuals. The data features are derived using Principal Component Analysis (PCA), simplifying the complex image data into principal components that capture the most significant features necessary for our classification task."
],
"metadata": {
"id": "0c7c7835-6211-4676-9d1e-d42d785b0d98"
},
"cell_type": "markdown",
"id": "0c7c7835-6211-4676-9d1e-d42d785b0d98"
},
{
"source": [
"## Project Setup"
],
"metadata": {
"id": "90a8b672-321f-4c2d-a7f1-8eeb140cc576"
},
"cell_type": "markdown",
"id": "90a8b672-321f-4c2d-a7f1-8eeb140cc576"
},
{
"cell_type": "code",
"source": [
"from google.colab import drive\n",
"drive.mount('/content/drive')"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "hnlh7W23VkzM",
"outputId": "403ce3da-431a-412e-d246-471462d7c8bc"
},
"id": "hnlh7W23VkzM",
"execution_count": 1,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n"
]
}
]
},
{
"source": [
"# Import required libraries\n",
"import pandas as pd\n",
"from sklearn.pipeline import Pipeline\n",
"from sklearn.preprocessing import StandardScaler\n",
"from sklearn.model_selection import GridSearchCV, KFold, train_test_split\n",
"from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, confusion_matrix\n",
"import seaborn as sns\n",
"import matplotlib.pyplot as plt"
],
"metadata": {
"executionCancelledAt": null,
"executionTime": 11,
"lastExecutedAt": 1714185297947,
"lastExecutedByKernel": "12fc850e-d8c3-4a24-abd4-044dae3a685b",
"lastScheduledRunId": null,
"lastSuccessfullyExecutedCode": "# Import required libraries\nimport pandas as pd\nfrom sklearn.pipeline import Pipeline\nfrom sklearn.preprocessing import StandardScaler\nfrom sklearn.model_selection import GridSearchCV, KFold, train_test_split\nfrom sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, confusion_matrix\nimport seaborn as sns\nimport matplotlib.pyplot as plt",
"id": "2e0be28b-29dd-49bd-8e8b-f3cb828a5065"
},
"cell_type": "code",
"id": "2e0be28b-29dd-49bd-8e8b-f3cb828a5065",
"outputs": [],
"execution_count": 2
},
{
"source": [
"### Load and Prepare Data"
],
"metadata": {
"id": "5710cc39-a43b-4fe4-9339-ca30e83f7dac"
},
"cell_type": "markdown",
"id": "5710cc39-a43b-4fe4-9339-ca30e83f7dac"
},
{
"source": [
"df = pd.read_csv(\"/content/drive/MyDrive/Colab Notebooks/DataCamp Projects/workspace - Facial Recognition with Supervised Learning/data/lfw_arnie_nonarnie.csv\")\n",
"X = df.drop('Label', axis=1)\n",
"y = df['Label']\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=21, stratify=y)"
],
"metadata": {
"executionCancelledAt": null,
"executionTime": 49,
"lastExecutedAt": 1714185297996,
"lastExecutedByKernel": "12fc850e-d8c3-4a24-abd4-044dae3a685b",
"lastScheduledRunId": null,
"lastSuccessfullyExecutedCode": "# Read the CSV file \ndf = pd.read_csv(\"data/lfw_arnie_nonarnie.csv\")\n\n# Seperate the predictor and class label\nX = df.drop('Label', axis=1)\ny = df['Label'] \n\n# Split the data into training and testing sets using stratify to balance the class\nX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=21, stratify=y)",
"id": "bcfaf0d7-ece8-492a-becb-a30da120b6e8"
},
"cell_type": "code",
"id": "bcfaf0d7-ece8-492a-becb-a30da120b6e8",
"outputs": [],
"execution_count": 3
},
{
"source": [
"## Model Initialization"
],
"metadata": {
"id": "6b38bdf0-67bc-4136-a7c2-5c6a9ba67e37"
},
"cell_type": "markdown",
"id": "6b38bdf0-67bc-4136-a7c2-5c6a9ba67e37"
},
{
"source": [
"### Import Models\n",
"\n",
"We import three different types of classification models from scikit-learn which will be tested to find the most effective model for our facial recognition task."
],
"metadata": {
"id": "7a1e96b2-da6c-4f30-8ce4-c89b6af76085"
},
"cell_type": "markdown",
"id": "7a1e96b2-da6c-4f30-8ce4-c89b6af76085"
},
{
"source": [
"from sklearn.linear_model import LogisticRegression\n",
"from sklearn.ensemble import RandomForestClassifier\n",
"from sklearn.svm import SVC"
],
"metadata": {
"executionCancelledAt": null,
"executionTime": 50,
"lastExecutedAt": 1714185298047,
"lastExecutedByKernel": "12fc850e-d8c3-4a24-abd4-044dae3a685b",
"lastScheduledRunId": null,
"lastSuccessfullyExecutedCode": "from sklearn.linear_model import LogisticRegression\nfrom sklearn.ensemble import RandomForestClassifier\nfrom sklearn.svm import SVC",
"id": "025af80b-08ef-4d27-8087-31d773ed4360"
},
"cell_type": "code",
"id": "025af80b-08ef-4d27-8087-31d773ed4360",
"outputs": [],
"execution_count": 4
},
{
"source": [
"### Initialize Models\n",
"\n",
"The models are initialized here and stored in a dictionary for easier management and access during the grid search process."
],
"metadata": {
"id": "010f785c-0f5e-4146-8e7d-c9f194ba33d1"
},
"cell_type": "markdown",
"id": "010f785c-0f5e-4146-8e7d-c9f194ba33d1"
},
{
"source": [
"models = {\n",
" \"Logistic Regression\": LogisticRegression(),\n",
" \"Random Forest\": RandomForestClassifier(),\n",
" \"SVM\": SVC()\n",
"}"
],
"metadata": {
"executionCancelledAt": null,
"executionTime": 48,
"lastExecutedAt": 1714185298095,
"lastExecutedByKernel": "12fc850e-d8c3-4a24-abd4-044dae3a685b",
"lastScheduledRunId": null,
"lastSuccessfullyExecutedCode": "models = {\n \"Logistic Regression\": LogisticRegression(),\n \"Random Forest\": RandomForestClassifier(),\n \"SVM\": SVC()\n}",
"id": "7fefc465-a8f4-4dba-ae5a-08aef281dfb7"
},
"cell_type": "code",
"id": "7fefc465-a8f4-4dba-ae5a-08aef281dfb7",
"outputs": [],
"execution_count": 5
},
{
"source": [
"## Grid Search Setup"
],
"metadata": {
"id": "28d52140-1e37-4d9f-b3b8-d67d29fa8439"
},
"cell_type": "markdown",
"id": "28d52140-1e37-4d9f-b3b8-d67d29fa8439"
},
{
"source": [
"### Model Parameters\n",
"\n",
"Parameters for each model are defined here. These parameters will be tuned in the grid search to find the best combination for each model."
],
"metadata": {
"id": "18d2fef5-160f-4001-a18f-088f94854c24"
},
"cell_type": "markdown",
"id": "18d2fef5-160f-4001-a18f-088f94854c24"
},
{
"source": [
"model_params = {\n",
" \"Logistic Regression\": {\"model__C\": [0.1, 1, 10]},\n",
" \"Random Forest\": {\"model__n_estimators\": [10, 50, 100]},\n",
" \"SVM\": {\"model__C\": [0.1, 1, 10], \"model__gamma\": ['scale', 'auto']}\n",
"}"
],
"metadata": {
"executionCancelledAt": null,
"executionTime": 48,
"lastExecutedAt": 1714185298143,
"lastExecutedByKernel": "12fc850e-d8c3-4a24-abd4-044dae3a685b",
"lastScheduledRunId": null,
"lastSuccessfullyExecutedCode": "model_params = {\n \"Logistic Regression\": {\"model__C\": [0.1, 1, 10]},\n \"Random Forest\": {\"model__n_estimators\": [10, 50, 100]},\n \"SVM\": {\"model__C\": [0.1, 1, 10], \"model__gamma\": ['scale', 'auto']}\n}",
"id": "ff59ba24-9264-40d2-af36-8251b1481b24"
},
"cell_type": "code",
"id": "ff59ba24-9264-40d2-af36-8251b1481b24",
"outputs": [],
"execution_count": 6
},
{
"source": [
"### Cross-Validation Setup\n",
"\n",
"KFold cross-validation setup to evaluate the models' performance. This method ensures that our model generalizes well to new data."
],
"metadata": {
"id": "1727b95a-801d-4c0c-b0ce-69644bf3d96d"
},
"cell_type": "markdown",
"id": "1727b95a-801d-4c0c-b0ce-69644bf3d96d"
},
{
"source": [
"kf = KFold(n_splits=5, shuffle=True, random_state=42)"
],
"metadata": {
"executionCancelledAt": null,
"executionTime": 52,
"lastExecutedAt": 1714185298195,
"lastExecutedByKernel": "12fc850e-d8c3-4a24-abd4-044dae3a685b",
"lastScheduledRunId": null,
"lastSuccessfullyExecutedCode": "kf = KFold(n_splits=5, shuffle=True, random_state=42)",
"id": "0c01dd7e-e0de-41fd-8c89-89203d33da65"
},
"cell_type": "code",
"id": "0c01dd7e-e0de-41fd-8c89-89203d33da65",
"outputs": [],
"execution_count": 7
},
{
"source": [
"## Model Selection and Evaluation"
],
"metadata": {
"id": "daaf0c32-d8e5-4dc8-9bc9-8312e31e5398"
},
"cell_type": "markdown",
"id": "daaf0c32-d8e5-4dc8-9bc9-8312e31e5398"
},
{
"source": [
"### Perform Grid Search\n",
"\n",
"This section involves performing a grid search over the defined parameter space for each model, using cross-validation to determine the most effective model and parameters."
],
"metadata": {
"id": "1c95580f-e53d-40e6-bf2e-39cb91409304"
},
"cell_type": "markdown",
"id": "1c95580f-e53d-40e6-bf2e-39cb91409304"
},
{
"source": [
"best_model_name = None\n",
"best_model_info = None\n",
"best_model_cv_score = -1\n",
"results = {}\n",
"\n",
"for name, model in models.items():\n",
" pipeline = Pipeline([(\"scaler\", StandardScaler()), (\"model\", model)])\n",
" grid_search = GridSearchCV(pipeline, model_params[name], cv=kf, scoring='accuracy')\n",
" grid_search.fit(X_train, y_train)\n",
" results[name] = grid_search.best_score_\n",
"\n",
" if grid_search.best_score_ > best_model_cv_score:\n",
" best_model_cv_score = grid_search.best_score_\n",
" best_model_name = name\n",
" best_model_info = grid_search.best_params_\n",
"\n",
"print(\"Best Model:\", best_model_name)\n",
"print(\"Best CV Score:\", best_model_cv_score)\n",
"print(\"Best Model Parameters:\", best_model_info)"
],
"metadata": {
"executionCancelledAt": null,
"executionTime": 3526,
"lastExecutedAt": 1714185301723,
"lastExecutedByKernel": "12fc850e-d8c3-4a24-abd4-044dae3a685b",
"lastScheduledRunId": null,
"lastSuccessfullyExecutedCode": "best_model_name = None\nbest_model_info = None\nbest_model_cv_score = -1\nresults = {}\n\nfor name, model in models.items():\n pipeline = Pipeline([(\"scaler\", StandardScaler()), (\"model\", model)])\n grid_search = GridSearchCV(pipeline, model_params[name], cv=kf, scoring='accuracy')\n grid_search.fit(X_train, y_train)\n results[name] = grid_search.best_score_\n \n if grid_search.best_score_ > best_model_cv_score:\n best_model_cv_score = grid_search.best_score_\n best_model_name = name\n best_model_info = grid_search.best_params_\n\nprint(\"Best Model:\", best_model_name)\nprint(\"Best CV Score:\", best_model_cv_score)\nprint(\"Best Model Parameters:\", best_model_info)",
"outputsMetadata": {
"0": {
"height": 80,
"type": "stream"
}
},
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "79d953cd-7783-4efd-a2ad-9c39d873b3fa",
"outputId": "173a17b4-76d4-4eeb-d3c7-14e5b295953f"
},
"cell_type": "code",
"id": "79d953cd-7783-4efd-a2ad-9c39d873b3fa",
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Best Model: Logistic Regression\n",
"Best CV Score: 0.8288172043010752\n",
"Best Model Parameters: {'model__C': 1}\n"
]
}
],
"execution_count": 8
},
{
"source": [
"### Evaluate the Best Model\n",
"\n",
"After selecting the best model based on grid search results, we now evaluate its performance on the test set using standard classification metrics."
],
"metadata": {
"id": "10cde752-41ed-4ef8-9d73-acbe63b9c459"
},
"cell_type": "markdown",
"id": "10cde752-41ed-4ef8-9d73-acbe63b9c459"
},
{
"source": [
"best_pipeline = Pipeline([(\"scaler\", StandardScaler()), (\"model\", models[best_model_name])])\n",
"best_pipeline.set_params(**best_model_info)\n",
"best_pipeline.fit(X_train, y_train)\n",
"y_pred = best_pipeline.predict(X_test)\n",
"\n",
"accuracy = accuracy_score(y_test, y_pred)\n",
"precision = precision_score(y_test, y_pred)\n",
"recall = recall_score(y_test, y_pred)\n",
"f1 = f1_score(y_test, y_pred)\n",
"\n",
"print(\"Accuracy:\", accuracy)\n",
"print(\"Precision:\", precision)\n",
"print(\"Recall:\", recall)\n",
"print(\"F1 Score:\", f1)"
],
"metadata": {
"executionCancelledAt": null,
"executionTime": 216,
"lastExecutedAt": 1714185301939,
"lastExecutedByKernel": "12fc850e-d8c3-4a24-abd4-044dae3a685b",
"lastScheduledRunId": null,
"lastSuccessfullyExecutedCode": "best_pipeline = Pipeline([(\"scaler\", StandardScaler()), (\"model\", models[best_model_name])])\nbest_pipeline.set_params(**best_model_info)\nbest_pipeline.fit(X_train, y_train)\ny_pred = best_pipeline.predict(X_test)\n\naccuracy = accuracy_score(y_test, y_pred)\nprecision = precision_score(y_test, y_pred)\nrecall = recall_score(y_test, y_pred)\nf1 = f1_score(y_test, y_pred)\n\nprint(\"Accuracy:\", accuracy)\nprint(\"Precision:\", precision)\nprint(\"Recall:\", recall)\nprint(\"F1 Score:\", f1)",
"outputsMetadata": {
"0": {
"height": 101,
"type": "stream"
}
},
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "65bef284-800b-4eea-9aa5-68ff12a40b8e",
"outputId": "5e22c3d8-daf5-4d53-a418-ace9c56f02be"
},
"cell_type": "code",
"id": "65bef284-800b-4eea-9aa5-68ff12a40b8e",
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Accuracy: 0.8157894736842105\n",
"Precision: 1.0\n",
"Recall: 0.125\n",
"F1 Score: 0.2222222222222222\n"
]
}
],
"execution_count": 9
},
{
"source": [
"### Visualization: Confusion Matrix"
],
"metadata": {
"id": "c45729b0-f564-483a-93ee-a0e7958b8bf7"
},
"cell_type": "markdown",
"id": "c45729b0-f564-483a-93ee-a0e7958b8bf7"
},
{
"source": [
"cm = confusion_matrix(y_test, y_pred)\n",
"plt.figure(figsize=(8, 6))\n",
"sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=['Non-Arnie', 'Arnie'], yticklabels=['Non-Arnie', 'Arnie'])\n",
"plt.xlabel('Predicted')\n",
"plt.ylabel('True')\n",
"plt.title('Confusion Matrix')\n",
"plt.show()"
],
"metadata": {
"executionCancelledAt": null,
"executionTime": 364,
"lastExecutedAt": 1714185302303,
"lastExecutedByKernel": "12fc850e-d8c3-4a24-abd4-044dae3a685b",
"lastScheduledRunId": null,
"lastSuccessfullyExecutedCode": "cm = confusion_matrix(y_test, y_pred)\nplt.figure(figsize=(8, 6))\nsns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=['Non-Arnie', 'Arnie'], yticklabels=['Non-Arnie', 'Arnie'])\nplt.xlabel('Predicted')\nplt.ylabel('True')\nplt.title('Confusion Matrix')\nplt.show()",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 564
},
"id": "39a2dd04-4741-4942-8ddf-4f69d2b5d1e8",
"outputId": "ce108a64-540d-4d4c-db47-3d326c95f195"
},
"cell_type": "code",
"id": "39a2dd04-4741-4942-8ddf-4f69d2b5d1e8",
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 800x600 with 2 Axes>"
],
"image/png": "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MgAAgIEMCwDtbQADAgL+NXJ1OBw6e/bsFaoIAADA/9naAM6ePfuix1atWqVXX31VWVlZV7AiAABgItPWANraALZr1y7b2JYtWzRkyBB9/vnn6tGjh5KSkmyoDAAAwH/5xEMgkrRnzx7df//9ql69us6ePasNGzYoJSVFpUuXtrs0AADg50zbBsb2BvDo0aMaPHiwKlSooB9//FFpaWn6/PPPVa1aNbtLAwAA8Eu2TgGPHj1aL774omJiYjRz5swLTgkDAAB4G2sAr6AhQ4YoJCREFSpUUEpKilJSUi543ieffHKFKwMAAPBftk4B9+rVS507d1Z0dLQiIyMv+gIAAPAmX1kDmJycrLp16yo8PFzFihVT+/bttWXLFo9zTp8+rf79+6tw4cIKCwtTp06dtH///lzdx9YEcOrUqXbeHgAAQJLvTAEvXbpU/fv3V926dXX27Fk99dRTatmypX766SeFhoZKkh5//HHNnTtXH330kSIjIzVgwAB17NhRK1euzPF9fOabQAAAAEz35Zdfevw8depUFStWTOvWrVOjRo109OhRTZ48WTNmzNCtt94qSZoyZYoqV66s1atX66abbsrRfWgAAQCA8bwZALpcLrlcLo8xp9Mpp9P5r+89evSoJCk6OlqStG7dOmVkZKh58+bucypVqqRSpUpp1apVOW4Abd8GBgAAwJ8lJydne74hOTn5X9+XlZWlxx57TA0bNnRvj7dv3z4FBQUpKirK49zixYtr3759Oa6JBBAAABjPm2sAhw4dqoSEBI+xnKR//fv31w8//KAVK1bke000gAAAAF6U0+nefxowYIDmzJmjZcuW6dprr3WPx8TE6MyZMzpy5IhHCrh//37FxMTk+PpMAQMAAOP5yjYwlmVpwIABmj17thYtWqSyZct6HK9du7YKFiyotLQ099iWLVu0e/du1a9fP8f3IQEEAADwEf3799eMGTP06aefKjw83L2uLzIyUiEhIYqMjFSfPn2UkJCg6OhoRURE6OGHH1b9+vVz/ACIRAMIAADgM/sATpw4UZLUpEkTj/EpU6aod+/ekqRx48YpICBAnTp1ksvlUqtWrfTGG2/k6j40gAAAwHg+0v/Jsqx/PSc4OFivv/66Xn/99TzfhzWAAAAAhiEBBAAAxvOVKeArhQQQAADAMCSAAADAeCSAAAAA8GskgAAAwHiGBYAk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\n"
},
"metadata": {}
}
],
"execution_count": 10
},
{
"source": [
"## Conclusion\n",
"\n",
"In this study, we applied machine learning techniques to enhance the security of high-profile individuals through facial recognition, specifically targeting Arnold Schwarzenegger among others. We utilized a dataset processed from the \"Labeled Faces in the Wild\" (LFW) that included both images of Schwarzenegger and non-Schwarzenegger individuals. Our approach involved testing three different classification models: Logistic Regression, Random Forest, and Support Vector Machine (SVM).\n",
"\n",
"### Key Findings:\n",
"- **Model Performance**: The Logistic Regression model outperformed the other models with a cross-validation score of approximately 82.88%. Upon evaluation on the test set, this model achieved an accuracy of 81.58%. This indicates a high level of effectiveness in distinguishing between the two classes.\n",
"- **Precision and Recall**: The precision of 100% indicates that every individual predicted as Arnold Schwarzenegger was indeed Schwarzenegger, highlighting the model's accuracy in identifying true positives. However, the recall of 12.5% suggests that the model identified only a small fraction of actual positives correctly, which points to a high number of false negatives.\n",
"- **F1 Score**: The F1 score of 22.22% is quite low, reflecting the imbalance between precision and recall. This suggests that while the model is highly precise, it is not very sensitive and fails to detect a substantial number of actual positive cases.\n",
"\n",
"### Implications:\n",
"The high precision but lower recall and F1 score imply that the model, while effective in ensuring that identifications of Schwarzenegger are accurate, tends to miss several actual instances. This could be acceptable in scenarios where false positives are a greater concern than false negatives, such as in applications where falsely identifying someone as a high-profile individual could lead to inappropriate security measures or privacy breaches.\n",
"\n",
"### Recommendations:\n",
"1. **Model Improvement**: Further tuning of the Logistic Regression model or exploration of more complex models could help balance precision and recall. Techniques such as adjusting the decision threshold and using advanced ensemble methods may enhance model sensitivity without substantial loss in precision.\n",
"2. **Data Augmentation**: Increasing the dataset size, especially the number of images of Arnold Schwarzenegger, could help improve model training and its ability to generalize. This could potentially increase recall without compromising precision.\n",
"3. **Real-World Testing**: Before deployment, it's crucial to test the model in real-world scenarios to further validate and refine the model's capabilities. This could involve implementing a pilot program in controlled environments.\n",
"\n",
"### Next Steps:\n",
"To advance this project, we will proceed with optimizing our current model, exploring additional feature engineering techniques, and expanding our dataset. Further collaboration with domain experts in security and facial recognition technology will also be essential to enhance the model's practicality and effectiveness in real-world applications.\n",
"\n",
"By continuing to refine our approach, we aim to develop a robust facial recognition system that can significantly contribute to the safety and security of high-profile individuals."
],
"metadata": {
"id": "f04e0130-e6f0-4be4-b94c-74f05b397bac"
},
"cell_type": "markdown",
"id": "f04e0130-e6f0-4be4-b94c-74f05b397bac"
}
],
"metadata": {
"colab": {
"provenance": [],
"include_colab_link": true
},
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.10"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment