From 25256de5c4ba5ac8e089988688b85e0b7245dd42 Mon Sep 17 00:00:00 2001 From: ArdianHilmiPramulintang Date: Tue, 21 May 2024 10:56:40 +0700 Subject: [PATCH] Upload files to "/" --- (Fix)_Telegram_Bot_Voice_Recognition.ipynb | 588 +++ Crop_Backpropagation.ipynb | 3562 +++++++++++++++++ ...carian_kernel,_dan_Confusion_Matrix_.ipynb | 3405 ++++++++++++++++ 3 files changed, 7555 insertions(+) create mode 100644 (Fix)_Telegram_Bot_Voice_Recognition.ipynb create mode 100644 Crop_Backpropagation.ipynb create mode 100644 Klasifikasi,_Pencarian_kernel,_dan_Confusion_Matrix_.ipynb diff --git a/(Fix)_Telegram_Bot_Voice_Recognition.ipynb b/(Fix)_Telegram_Bot_Voice_Recognition.ipynb new file mode 100644 index 0000000..e3cfdd6 --- /dev/null +++ b/(Fix)_Telegram_Bot_Voice_Recognition.ipynb @@ -0,0 +1,588 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "-s-0Go_idJSV", + "outputId": "998d34fd-9d21-4854-da2a-867e14600624" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Collecting python-telegram-bot==13.7\n", + " Downloading python_telegram_bot-13.7-py3-none-any.whl (490 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m490.1/490.1 kB\u001b[0m \u001b[31m3.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: certifi in /usr/local/lib/python3.10/dist-packages (from python-telegram-bot==13.7) (2024.2.2)\n", + "Requirement already satisfied: tornado>=6.1 in /usr/local/lib/python3.10/dist-packages (from python-telegram-bot==13.7) (6.3.3)\n", + "Collecting APScheduler==3.6.3 (from python-telegram-bot==13.7)\n", + " Downloading APScheduler-3.6.3-py2.py3-none-any.whl (58 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m58.9/58.9 kB\u001b[0m \u001b[31m5.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: pytz>=2018.6 in /usr/local/lib/python3.10/dist-packages (from python-telegram-bot==13.7) (2023.4)\n", + "Collecting cachetools==4.2.2 (from python-telegram-bot==13.7)\n", + " Downloading cachetools-4.2.2-py3-none-any.whl (11 kB)\n", + "Requirement already satisfied: setuptools>=0.7 in /usr/local/lib/python3.10/dist-packages (from APScheduler==3.6.3->python-telegram-bot==13.7) (67.7.2)\n", + "Requirement already satisfied: six>=1.4.0 in /usr/local/lib/python3.10/dist-packages (from APScheduler==3.6.3->python-telegram-bot==13.7) (1.16.0)\n", + "Requirement already satisfied: tzlocal>=1.2 in /usr/local/lib/python3.10/dist-packages (from APScheduler==3.6.3->python-telegram-bot==13.7) (5.2)\n", + "Installing collected packages: cachetools, APScheduler, python-telegram-bot\n", + " Attempting uninstall: cachetools\n", + " Found existing installation: cachetools 5.3.3\n", + " Uninstalling cachetools-5.3.3:\n", + " Successfully uninstalled cachetools-5.3.3\n", + "Successfully installed APScheduler-3.6.3 cachetools-4.2.2 python-telegram-bot-13.7\n" + ] + } + ], + "source": [ + "pip install python-telegram-bot==13.7" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "SnIbxiLxpsWI", + "outputId": "336a0a96-4a81-4ed3-ce0a-8018705c85da" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Collecting openai-whisper\n", + " Downloading openai-whisper-20231117.tar.gz (798 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m798.6/798.6 kB\u001b[0m \u001b[31m5.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25h Installing build dependencies ... \u001b[?25l\u001b[?25hdone\n", + " Getting requirements to build wheel ... \u001b[?25l\u001b[?25hdone\n", + " Preparing metadata (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n", + "Requirement already satisfied: triton<3,>=2.0.0 in /usr/local/lib/python3.10/dist-packages (from openai-whisper) (2.2.0)\n", + "Requirement already satisfied: numba in /usr/local/lib/python3.10/dist-packages (from openai-whisper) (0.58.1)\n", + "Requirement already satisfied: numpy in /usr/local/lib/python3.10/dist-packages (from openai-whisper) (1.25.2)\n", + "Requirement already satisfied: torch in /usr/local/lib/python3.10/dist-packages (from openai-whisper) (2.2.1+cu121)\n", + "Requirement already satisfied: tqdm in /usr/local/lib/python3.10/dist-packages (from openai-whisper) (4.66.2)\n", + "Requirement already satisfied: more-itertools in /usr/local/lib/python3.10/dist-packages (from openai-whisper) (10.1.0)\n", + "Collecting tiktoken (from openai-whisper)\n", + " Downloading tiktoken-0.6.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.8 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.8/1.8 MB\u001b[0m \u001b[31m22.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from triton<3,>=2.0.0->openai-whisper) (3.13.4)\n", + "Requirement already satisfied: llvmlite<0.42,>=0.41.0dev0 in /usr/local/lib/python3.10/dist-packages (from numba->openai-whisper) (0.41.1)\n", + "Requirement already satisfied: regex>=2022.1.18 in /usr/local/lib/python3.10/dist-packages (from tiktoken->openai-whisper) (2023.12.25)\n", + "Requirement already satisfied: requests>=2.26.0 in /usr/local/lib/python3.10/dist-packages (from tiktoken->openai-whisper) (2.31.0)\n", + "Requirement already satisfied: typing-extensions>=4.8.0 in /usr/local/lib/python3.10/dist-packages (from torch->openai-whisper) (4.11.0)\n", + "Requirement already satisfied: sympy in /usr/local/lib/python3.10/dist-packages (from torch->openai-whisper) (1.12)\n", + "Requirement already satisfied: networkx in /usr/local/lib/python3.10/dist-packages (from torch->openai-whisper) (3.3)\n", + "Requirement already satisfied: jinja2 in /usr/local/lib/python3.10/dist-packages (from torch->openai-whisper) (3.1.3)\n", + "Requirement already satisfied: fsspec in /usr/local/lib/python3.10/dist-packages (from torch->openai-whisper) (2023.6.0)\n", + "Collecting nvidia-cuda-nvrtc-cu12==12.1.105 (from torch->openai-whisper)\n", + " Using cached nvidia_cuda_nvrtc_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (23.7 MB)\n", + "Collecting nvidia-cuda-runtime-cu12==12.1.105 (from torch->openai-whisper)\n", + " Using cached nvidia_cuda_runtime_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (823 kB)\n", + "Collecting nvidia-cuda-cupti-cu12==12.1.105 (from torch->openai-whisper)\n", + " Using cached nvidia_cuda_cupti_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (14.1 MB)\n", + "Collecting nvidia-cudnn-cu12==8.9.2.26 (from torch->openai-whisper)\n", + " Using cached nvidia_cudnn_cu12-8.9.2.26-py3-none-manylinux1_x86_64.whl (731.7 MB)\n", + "Collecting nvidia-cublas-cu12==12.1.3.1 (from torch->openai-whisper)\n", + " Using cached nvidia_cublas_cu12-12.1.3.1-py3-none-manylinux1_x86_64.whl (410.6 MB)\n", + "Collecting nvidia-cufft-cu12==11.0.2.54 (from torch->openai-whisper)\n", + " Using cached nvidia_cufft_cu12-11.0.2.54-py3-none-manylinux1_x86_64.whl (121.6 MB)\n", + "Collecting nvidia-curand-cu12==10.3.2.106 (from torch->openai-whisper)\n", + " Using cached nvidia_curand_cu12-10.3.2.106-py3-none-manylinux1_x86_64.whl (56.5 MB)\n", + "Collecting nvidia-cusolver-cu12==11.4.5.107 (from torch->openai-whisper)\n", + " Using cached nvidia_cusolver_cu12-11.4.5.107-py3-none-manylinux1_x86_64.whl (124.2 MB)\n", + "Collecting nvidia-cusparse-cu12==12.1.0.106 (from torch->openai-whisper)\n", + " Using cached nvidia_cusparse_cu12-12.1.0.106-py3-none-manylinux1_x86_64.whl (196.0 MB)\n", + "Collecting nvidia-nccl-cu12==2.19.3 (from torch->openai-whisper)\n", + " Using cached nvidia_nccl_cu12-2.19.3-py3-none-manylinux1_x86_64.whl (166.0 MB)\n", + "Collecting nvidia-nvtx-cu12==12.1.105 (from torch->openai-whisper)\n", + " Using cached nvidia_nvtx_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (99 kB)\n", + "Collecting nvidia-nvjitlink-cu12 (from nvidia-cusolver-cu12==11.4.5.107->torch->openai-whisper)\n", + " Using cached nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (21.1 MB)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests>=2.26.0->tiktoken->openai-whisper) (3.3.2)\n", + "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests>=2.26.0->tiktoken->openai-whisper) (3.7)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests>=2.26.0->tiktoken->openai-whisper) (2.0.7)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests>=2.26.0->tiktoken->openai-whisper) (2024.2.2)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2->torch->openai-whisper) (2.1.5)\n", + "Requirement already satisfied: mpmath>=0.19 in /usr/local/lib/python3.10/dist-packages (from sympy->torch->openai-whisper) (1.3.0)\n", + "Building wheels for collected packages: openai-whisper\n", + " Building wheel for openai-whisper (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n", + " Created wheel for openai-whisper: filename=openai_whisper-20231117-py3-none-any.whl size=801358 sha256=e35ec844abfadc2b26e9cb01404f2e6b85a1048b6d8afb437958914d59bd983d\n", + " Stored in directory: /root/.cache/pip/wheels/d0/85/e1/9361b4cbea7dd4b7f6702fa4c3afc94877952eeb2b62f45f56\n", + "Successfully built openai-whisper\n", + "Installing collected packages: nvidia-nvtx-cu12, nvidia-nvjitlink-cu12, nvidia-nccl-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, tiktoken, nvidia-cusparse-cu12, nvidia-cudnn-cu12, nvidia-cusolver-cu12, openai-whisper\n", + "Successfully installed nvidia-cublas-cu12-12.1.3.1 nvidia-cuda-cupti-cu12-12.1.105 nvidia-cuda-nvrtc-cu12-12.1.105 nvidia-cuda-runtime-cu12-12.1.105 nvidia-cudnn-cu12-8.9.2.26 nvidia-cufft-cu12-11.0.2.54 nvidia-curand-cu12-10.3.2.106 nvidia-cusolver-cu12-11.4.5.107 nvidia-cusparse-cu12-12.1.0.106 nvidia-nccl-cu12-2.19.3 nvidia-nvjitlink-cu12-12.4.127 nvidia-nvtx-cu12-12.1.105 openai-whisper-20231117 tiktoken-0.6.0\n" + ] + } + ], + "source": [ + "pip install -U openai-whisper" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "FH9pRMGkps08", + "outputId": "b6487d28-bdac-40ff-e71e-b27502c01cdc" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: torch in /usr/local/lib/python3.10/dist-packages (2.2.1+cu121)\n", + "Collecting torch\n", + " Downloading torch-2.2.2-cp310-cp310-manylinux1_x86_64.whl (755.5 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m755.5/755.5 MB\u001b[0m \u001b[31m1.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from torch) (3.13.4)\n", + "Requirement already satisfied: typing-extensions>=4.8.0 in /usr/local/lib/python3.10/dist-packages (from torch) (4.11.0)\n", + "Requirement already satisfied: sympy in /usr/local/lib/python3.10/dist-packages (from torch) (1.12)\n", + "Requirement already satisfied: networkx in /usr/local/lib/python3.10/dist-packages (from torch) (3.3)\n", + "Requirement already satisfied: jinja2 in /usr/local/lib/python3.10/dist-packages (from torch) (3.1.3)\n", + "Requirement already satisfied: fsspec in /usr/local/lib/python3.10/dist-packages (from torch) (2023.6.0)\n", + "Requirement already satisfied: nvidia-cuda-nvrtc-cu12==12.1.105 in /usr/local/lib/python3.10/dist-packages (from torch) (12.1.105)\n", + "Requirement already satisfied: nvidia-cuda-runtime-cu12==12.1.105 in /usr/local/lib/python3.10/dist-packages (from torch) (12.1.105)\n", + "Requirement already satisfied: nvidia-cuda-cupti-cu12==12.1.105 in /usr/local/lib/python3.10/dist-packages (from torch) (12.1.105)\n", + "Requirement already satisfied: nvidia-cudnn-cu12==8.9.2.26 in /usr/local/lib/python3.10/dist-packages (from torch) (8.9.2.26)\n", + "Requirement already satisfied: nvidia-cublas-cu12==12.1.3.1 in /usr/local/lib/python3.10/dist-packages (from torch) (12.1.3.1)\n", + "Requirement already satisfied: nvidia-cufft-cu12==11.0.2.54 in /usr/local/lib/python3.10/dist-packages (from torch) (11.0.2.54)\n", + "Requirement already satisfied: nvidia-curand-cu12==10.3.2.106 in /usr/local/lib/python3.10/dist-packages (from torch) (10.3.2.106)\n", + "Requirement already satisfied: nvidia-cusolver-cu12==11.4.5.107 in /usr/local/lib/python3.10/dist-packages (from torch) (11.4.5.107)\n", + "Requirement already satisfied: nvidia-cusparse-cu12==12.1.0.106 in /usr/local/lib/python3.10/dist-packages (from torch) (12.1.0.106)\n", + "Requirement already satisfied: nvidia-nccl-cu12==2.19.3 in /usr/local/lib/python3.10/dist-packages (from torch) (2.19.3)\n", + "Requirement already satisfied: nvidia-nvtx-cu12==12.1.105 in /usr/local/lib/python3.10/dist-packages (from torch) (12.1.105)\n", + "Requirement already satisfied: triton==2.2.0 in /usr/local/lib/python3.10/dist-packages (from torch) (2.2.0)\n", + "Requirement already satisfied: nvidia-nvjitlink-cu12 in /usr/local/lib/python3.10/dist-packages (from nvidia-cusolver-cu12==11.4.5.107->torch) (12.4.127)\n", + "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2->torch) (2.1.5)\n", + "Requirement already satisfied: mpmath>=0.19 in /usr/local/lib/python3.10/dist-packages (from sympy->torch) (1.3.0)\n", + "Installing collected packages: torch\n", + " Attempting uninstall: torch\n", + " Found existing installation: torch 2.2.1+cu121\n", + " Uninstalling torch-2.2.1+cu121:\n", + " Successfully uninstalled torch-2.2.1+cu121\n", + "\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n", + "torchaudio 2.2.1+cu121 requires torch==2.2.1, but you have torch 2.2.2 which is incompatible.\n", + "torchtext 0.17.1 requires torch==2.2.1, but you have torch 2.2.2 which is incompatible.\n", + "torchvision 0.17.1+cu121 requires torch==2.2.1, but you have torch 2.2.2 which is incompatible.\u001b[0m\u001b[31m\n", + "\u001b[0mSuccessfully installed torch-2.2.2\n" + ] + } + ], + "source": [ + "pip install --upgrade torch" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "SCUSLgFAc7Z4" + }, + "outputs": [], + "source": [ + "import librosa\n", + "import librosa.display\n", + "import pandas as pd\n", + "import os\n", + "import numpy as np\n", + "import torch\n", + "import whisper\n", + "import requests\n", + "import time\n", + "np.random.seed(0)\n", + "from joblib import load\n", + "from scipy.fftpack import dct\n", + "from telegram.ext import Updater, MessageHandler, Filters" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "jzQaNFgedBmu" + }, + "outputs": [], + "source": [ + "# Load model yang telah dilatih\n", + "model = load('/content/drive/MyDrive/Skripsi/rbf/new_user_linear.pkl')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "sh0-ovkleZS0" + }, + "outputs": [], + "source": [ + "# Fungsi pre-emphasis\n", + "def pre_emphasis(signal, coefficient=0.97):\n", + " return np.append(signal[0], signal[1:] - coefficient * signal[:-1])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "HeISpxGTebIs" + }, + "outputs": [], + "source": [ + "# Fungsi framing\n", + "def framing(signal, sample_rate, frame_length=0.025, frame_step=0.010):\n", + " nsamples_signal = len(signal)\n", + " nsamples_frame = int(round(frame_length * sample_rate))\n", + " nsamples_stride = int(round(frame_step * sample_rate))\n", + " n_frames = int(np.ceil((nsamples_signal - nsamples_frame) / nsamples_stride) + 1)\n", + " nsamples_padding = ((n_frames - 1) * nsamples_stride + nsamples_frame) - nsamples_signal\n", + " z = np.zeros(nsamples_padding)\n", + " signal = np.append(signal, z)\n", + " frames = np.empty((n_frames, nsamples_frame))\n", + " for i in range(n_frames):\n", + " left = i * nsamples_stride\n", + " right = left + nsamples_frame\n", + " frame = signal[left:right]\n", + " frames[i] = frame\n", + " return frames" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "t24vLFANedWf" + }, + "outputs": [], + "source": [ + "# Fungsi untuk mengekstrak fitur MFCC dari file audio\n", + "def extract_mfcc(audio_file, sr=44100, frame_length=0.025, frame_step=0.010, nfilt=40, num_ceps=12):\n", + " y, _ = librosa.load(audio_file, sr=sr)\n", + "\n", + " # Normalize\n", + " y_norm = librosa.util.normalize(y)\n", + "\n", + " # Pre-emphasis\n", + " y_pre_emphasis = pre_emphasis(y_norm)\n", + "\n", + " # Framing\n", + " frames = framing(y_pre_emphasis, sr, frame_length, frame_step)\n", + "\n", + " # Hamming window\n", + " frames *= np.hanning(len(frames[0]))\n", + "\n", + " # FFT\n", + " NFFT = 512\n", + " mag_frames = np.absolute(np.fft.rfft(frames, NFFT))\n", + " pow_frames = ((1.0 / NFFT) * ((mag_frames) ** 2))\n", + "\n", + " # Mel filter bank\n", + " low_freq_mel = 0\n", + " high_freq_mel = (2595 * np.log10(1 + (sr / 2) / 700))\n", + " mel_points = np.linspace(low_freq_mel, high_freq_mel, nfilt + 2)\n", + " hz_points = (700 * (10**(mel_points / 2595) - 1))\n", + " bin = np.floor((NFFT + 1) * hz_points / sr)\n", + "\n", + " fbank = np.zeros((nfilt, int(np.floor(NFFT / 2 + 1))))\n", + " for m in range(1, nfilt + 1):\n", + " f_m_minus = int(bin[m - 1])\n", + " f_m = int(bin[m])\n", + " f_m_plus = int(bin[m + 1])\n", + " for k in range(f_m_minus, f_m):\n", + " fbank[m - 1, k] = (k - bin[m - 1]) / (bin[m] - bin[m - 1])\n", + " for k in range(f_m, f_m_plus):\n", + " fbank[m - 1, k] = (bin[m + 1] - k) / (bin[m + 1] - bin[m])\n", + "\n", + " filter_banks = np.dot(pow_frames, fbank.T)\n", + " filter_banks = np.where(filter_banks == 0, np.finfo(float).eps, filter_banks)\n", + " filter_banks = 20 * np.log10(filter_banks)\n", + "\n", + " # Discrete Cosine Transform (DCT) for MFCC\n", + " mfcc = dct(filter_banks, type=2, axis=1, norm='ortho')[:, 1:(num_ceps + 1)]\n", + "\n", + " return np.mean(mfcc, axis=0)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "3l8j6nW2_gRB" + }, + "outputs": [], + "source": [ + "def send_command_to_firebase(label):\n", + " # Firebase RTDB path untuk setiap lampu\n", + " paths = {\n", + " \"Depan Menyala\": \"/DEPAN\",\n", + " \"Depan Mati\": \"/DEPAN\",\n", + " \"Samping Menyala\": \"/SAMPING\",\n", + " \"Samping Mati\": \"/SAMPING\",\n", + " \"Tengah Menyala\": \"/TENGAH\",\n", + " \"Tengah Mati\": \"/TENGAH\"\n", + " }\n", + "\n", + " # Firebase value untuk setiap label\n", + " values = {\n", + " \"Depan Menyala\": \"1\",\n", + " \"Depan Mati\": \"0\",\n", + " \"Samping Menyala\": \"1\",\n", + " \"Samping Mati\": \"0\",\n", + " \"Tengah Menyala\": \"1\",\n", + " \"Tengah Mati\": \"0\"\n", + " }\n", + "\n", + " # Mengirim perintah ke Firebase\n", + " if label in paths:\n", + " path = paths[label]\n", + " value = values[label]\n", + " firebase_url = f\"https://smart-home-e64ae-default-rtdb.firebaseio.com/{path}.json?auth=AIzaSyCmquF32M-zZDpW_Hswg9ZvREgikmteJMY\"\n", + " headers = {'Content-type': 'application/json'}\n", + " response = requests.put(firebase_url, headers=headers, json=value)\n", + " if response.status_code == 200:\n", + " print(f\"Firebase update successful for {label}\")\n", + " else:\n", + " print(f\"Firebase update failed for {label}\")\n", + " else:\n", + " print(f\"Label {label} tidak valid\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "-E17U5INqFBS" + }, + "outputs": [], + "source": [ + "# Load Whisper model\n", + "model_m = whisper.load_model('medium')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "I4zG7F7-d9Zw" + }, + "outputs": [], + "source": [ + "def voice_message_handler(update, context):\n", + " # Mendapatkan file audio dari pesan suara\n", + " file_id = update.message.voice.file_id\n", + " new_file = context.bot.get_file(file_id)\n", + " file_path = new_file.download()\n", + "\n", + " # Ekstraksi fitur MFCC dari file audio\n", + " mfcc_features = extract_mfcc(file_path)\n", + "\n", + " # Reshape MFCC features for prediction\n", + " X_testing = mfcc_features.reshape(1, -1)\n", + "\n", + " # Predict User for the testing data using the trained model\n", + " start_time = time.time()\n", + " y_pred_user = model.predict(X_testing)\n", + " user_prediction_time = (time.time() - start_time) * 1000\n", + "\n", + " # Speech to text Label\n", + " start_time = time.time()\n", + " translation = model_m.transcribe(file_path, language='id', fp16=False)['text']\n", + " translation_time = (time.time() - start_time) * 1000\n", + "\n", + " # Check if the predicted label is within your expected range of labels\n", + " expected_users = ['HILMI', 'VASYILLA', 'TANTI', 'YUDHA']\n", + " if y_pred_user[0] in expected_users:\n", + " update.message.reply_text(f\"Predicted User: {y_pred_user[0]} (Response Time: {user_prediction_time:.2f} ms)\")\n", + "\n", + " # Jika user dikenali, dilanjutkan dengan memproses suara ke fungsi speech to text dengan whisper\n", + " if 'pan menyala' in translation.lower():\n", + " send_command_to_firebase(\"Depan Menyala\")\n", + " update.message.reply_text(f\"Depan Menyala (Response Time: {translation_time:.2f} ms)\")\n", + " elif 'an manyala' in translation.lower():\n", + " send_command_to_firebase(\"Depan Menyala\")\n", + " update.message.reply_text(f\"Depan Menyala (Response Time: {translation_time:.2f} ms)\")\n", + " elif 'an mati' in translation.lower():\n", + " send_command_to_firebase(\"Depan Mati\")\n", + " update.message.reply_text(f\"Depan Mati (Response Time: {translation_time:.2f} ms)\")\n", + " elif 'samping menyala' in translation.lower():\n", + " send_command_to_firebase(\"Samping Menyala\")\n", + " update.message.reply_text(f\"Samping Menyala (Response Time: {translation_time:.2f} ms)\")\n", + " elif 'ing menyala' in translation.lower():\n", + " send_command_to_firebase(\"Samping Menyala\")\n", + " update.message.reply_text(f\"Samping Menyala (Response Time: {translation_time:.2f} ms)\")\n", + " elif 'samping mati' in translation.lower():\n", + " send_command_to_firebase(\"Samping Mati\")\n", + " update.message.reply_text(f\"Samping Mati (Response Time: {translation_time:.2f} ms)\")\n", + " elif 'ing mati' in translation.lower():\n", + " send_command_to_firebase(\"Samping Mati\")\n", + " update.message.reply_text(f\"Samping Mati (Response Time: {translation_time:.2f} ms)\")\n", + " elif 'tengah menyala' in translation.lower():\n", + " send_command_to_firebase(\"Tengah Menyala\")\n", + " update.message.reply_text(f\"Tengah Menyala (Response Time: {translation_time:.2f} ms)\")\n", + " elif 'ngah, menyala' in translation.lower():\n", + " send_command_to_firebase(\"Tengah Menyala\")\n", + " update.message.reply_text(f\"Tengah Menyala (Response Time: {translation_time:.2f} ms)\")\n", + " elif 'ah, manyalah' in translation.lower():\n", + " send_command_to_firebase(\"Tengah Menyala\")\n", + " elif 'tengah mati' in translation.lower():\n", + " send_command_to_firebase(\"Tengah Mati\")\n", + " update.message.reply_text(f\"Tengah Mati(Response Time: {translation_time:.2f} ms)\")\n", + " else:\n", + " update.message.reply_text(f\"Label tidak dikenali\")\n", + " else:\n", + " update.message.reply_text(\"User tidak dikenali\")\n", + "\n", + " # Hapus file audio yang sudah di-download\n", + " os.remove(file_path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true, + "base_uri": "https://localhost:8080/" + }, + "id": "xrB_fZEWeVn3", + "outputId": "0ba85899-8921-497f-d550-dc2165a2c5d2" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.10/dist-packages/sklearn/base.py:439: UserWarning: X does not have valid feature names, but SVC was fitted with feature names\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Firebase update successful for Depan Menyala\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.10/dist-packages/sklearn/base.py:439: UserWarning: X does not have valid feature names, but SVC was fitted with feature names\n", + " warnings.warn(\n", + "/usr/local/lib/python3.10/dist-packages/sklearn/base.py:439: UserWarning: X does not have valid feature names, but SVC was fitted with feature names\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Firebase update successful for Depan Mati\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.10/dist-packages/sklearn/base.py:439: UserWarning: X does not have valid feature names, but SVC was fitted with feature names\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Firebase update successful for Samping Menyala\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.10/dist-packages/sklearn/base.py:439: UserWarning: X does not have valid feature names, but SVC was fitted with feature names\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Firebase update successful for Samping Mati\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.10/dist-packages/sklearn/base.py:439: UserWarning: X does not have valid feature names, but SVC was fitted with feature names\n", + " warnings.warn(\n", + "/usr/local/lib/python3.10/dist-packages/sklearn/base.py:439: UserWarning: X does not have valid feature names, but SVC was fitted with feature names\n", + " warnings.warn(\n", + "/usr/local/lib/python3.10/dist-packages/sklearn/base.py:439: UserWarning: X does not have valid feature names, but SVC was fitted with feature names\n", + " warnings.warn(\n", + "/usr/local/lib/python3.10/dist-packages/sklearn/base.py:439: UserWarning: X does not have valid feature names, but SVC was fitted with feature names\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Firebase update successful for Tengah Menyala\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.10/dist-packages/sklearn/base.py:439: UserWarning: X does not have valid feature names, but SVC was fitted with feature names\n", + " warnings.warn(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Firebase update successful for Tengah Mati\n" + ] + } + ], + "source": [ + "updater = Updater(\"6727323206:AAHLV35b-yi3bZUU3LPHYe0p2M_sZWWSUWw\", use_context=True)\n", + "dp = updater.dispatcher\n", + "\n", + "# Menambahkan handler untuk pesan suara\n", + "dp.add_handler(MessageHandler(Filters.voice, voice_message_handler))\n", + "\n", + "# Mulai bot\n", + "updater.start_polling()\n", + "updater.idle()" + ] + } + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "gpuType": "T4", + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file diff --git a/Crop_Backpropagation.ipynb b/Crop_Backpropagation.ipynb new file mode 100644 index 0000000..a46d8b0 --- /dev/null +++ b/Crop_Backpropagation.ipynb @@ -0,0 +1,3562 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "Bzr_4rf-KvdO" + }, + "source": [ + "# Data Collection & Data Understanding" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "IA3vunaUkl7h" + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "import seaborn as sns\n", + "import matplotlib.pyplot as plt\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.metrics import accuracy_score, precision_score, recall_score, classification_report, confusion_matrix, f1_score" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true, + "base_uri": "https://localhost:8080/", + "height": 424 + }, + "id": "KKAbPSUGkl7p", + "outputId": "edf69254-6d05-40be-8035-de4bb5c1080f" + }, + "outputs": [ + { + "data": { + "application/vnd.google.colaboratory.intrinsic+json": { + "summary": "{\n \"name\": \"df\",\n \"rows\": 150,\n \"fields\": [\n {\n \"column\": \"mfcc_1\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 36.276014922615474,\n \"min\": -28.16607541028273,\n \"max\": 134.00756340540602,\n \"num_unique_values\": 148,\n \"samples\": [\n 36.08258057714812,\n 58.86680953129214,\n -3.523882247385767\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_2\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 25.55141187112381,\n \"min\": -68.12144268080341,\n \"max\": 34.202640399438096,\n \"num_unique_values\": 148,\n \"samples\": [\n 23.939076705384803,\n 21.946738597467206,\n 13.0356526884146\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_3\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 16.607602505135112,\n \"min\": -35.34655184816533,\n \"max\": 38.62011424617032,\n \"num_unique_values\": 148,\n \"samples\": [\n 13.91699151797878,\n -8.389756054170379,\n -1.8076506613349623\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_4\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 12.248647405224922,\n \"min\": -37.65939195051028,\n \"max\": 16.511813215011305,\n \"num_unique_values\": 148,\n \"samples\": [\n 11.817977912406883,\n -25.196198956208004,\n -1.877552087075581\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_5\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 14.67376981879269,\n \"min\": -25.168957020117585,\n \"max\": 33.86979700528147,\n \"num_unique_values\": 148,\n \"samples\": [\n -9.159842263653752,\n 12.502871968905891,\n -5.269233643564018\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_6\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 10.967088795363342,\n \"min\": -37.11021563514957,\n \"max\": 22.823063964431544,\n \"num_unique_values\": 148,\n \"samples\": [\n -11.37754250437596,\n -21.623600445733462,\n -7.599002274584097\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_7\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 7.156816371373767,\n \"min\": -18.00557350489408,\n \"max\": 26.58538472976201,\n \"num_unique_values\": 148,\n \"samples\": [\n -6.540024131817128,\n -2.978011309692604,\n -3.908204318319117\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_8\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 7.3954280048501255,\n \"min\": -19.42019336425255,\n \"max\": 11.666184384702827,\n \"num_unique_values\": 148,\n \"samples\": [\n -8.77716113407432,\n -9.47772235720944,\n -6.146912684052977\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_9\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 8.925604847630165,\n \"min\": -16.537194540172763,\n \"max\": 16.626586628222096,\n \"num_unique_values\": 148,\n \"samples\": [\n -5.5096426829032765,\n -4.192069878917911,\n 0.0969209496106391\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_10\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 5.736041581214664,\n \"min\": -22.006870967705165,\n \"max\": 5.341944901286143,\n \"num_unique_values\": 148,\n \"samples\": [\n -14.888090524599049,\n -2.679905652845484,\n -4.124536203962681\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_11\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 7.964057207796632,\n \"min\": -15.97644564504034,\n \"max\": 14.539281254023074,\n \"num_unique_values\": 148,\n \"samples\": [\n -8.107532163193822,\n -10.48949586980253,\n -2.566518390687336\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_12\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 6.866482357947159,\n \"min\": -21.68206080071003,\n \"max\": 8.456266425271922,\n \"num_unique_values\": 148,\n \"samples\": [\n -5.797938428082079,\n -2.674145185062222,\n -5.316564560856999\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"target\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 5,\n \"samples\": [\n \"Tanti\",\n \"Random\",\n \"Vasyilla\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}", + "type": "dataframe", + "variable_name": "df" + }, + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
mfcc_1mfcc_2mfcc_3mfcc_4mfcc_5mfcc_6mfcc_7mfcc_8mfcc_9mfcc_10mfcc_11mfcc_12target
0134.007563-10.5976407.266465-3.754714-13.8083332.155736-12.878377-4.9756016.321278-2.777375-6.506576-1.876924Hilmi
150.750191-5.59891632.949004-22.50126014.779131-19.5383017.961897-11.9574397.594936-14.9296855.006317-1.295943Hilmi
2122.293842-12.81445812.493625-10.989077-15.9638401.330859-17.650124-3.0140833.925209-6.664020-1.170681-0.027291Hilmi
3126.803849-0.0539418.270297-6.800313-13.392560-0.899367-14.8745800.2275567.045879-7.464138-5.668817-0.148281Hilmi
410.4686029.117828-8.683499-1.46616824.753077-21.5310512.124193-6.58112111.937312-18.9429545.7637980.569468Hilmi
..........................................
14536.42794325.7072848.21266810.450583-5.248485-11.510404-6.744978-9.246621-3.982937-10.705474-6.795224-6.532252Random
14643.9542716.4560482.131374-9.353882-17.369689-7.557169-15.326618-16.5219121.466365-6.7237671.9310862.092220Random
14755.78210826.974924-5.329280-1.423440-9.777956-8.758294-1.948076-6.980490-0.893085-4.223947-4.055362-5.809257Random
14826.584968-8.043035-4.178721-0.592769-15.964644-9.010896-4.953900-11.460907-0.344327-4.228080-1.677582-2.752977Random
14919.5893339.885163-20.071891-13.235444-15.691194-10.1116712.390462-5.974159-0.621773-2.3115744.188963-0.232814Random
\n", + "

150 rows × 13 columns

\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "
\n", + "
\n" + ], + "text/plain": [ + " mfcc_1 mfcc_2 mfcc_3 mfcc_4 mfcc_5 mfcc_6 \\\n", + "0 134.007563 -10.597640 7.266465 -3.754714 -13.808333 2.155736 \n", + "1 50.750191 -5.598916 32.949004 -22.501260 14.779131 -19.538301 \n", + "2 122.293842 -12.814458 12.493625 -10.989077 -15.963840 1.330859 \n", + "3 126.803849 -0.053941 8.270297 -6.800313 -13.392560 -0.899367 \n", + "4 10.468602 9.117828 -8.683499 -1.466168 24.753077 -21.531051 \n", + ".. ... ... ... ... ... ... \n", + "145 36.427943 25.707284 8.212668 10.450583 -5.248485 -11.510404 \n", + "146 43.954271 6.456048 2.131374 -9.353882 -17.369689 -7.557169 \n", + "147 55.782108 26.974924 -5.329280 -1.423440 -9.777956 -8.758294 \n", + "148 26.584968 -8.043035 -4.178721 -0.592769 -15.964644 -9.010896 \n", + "149 19.589333 9.885163 -20.071891 -13.235444 -15.691194 -10.111671 \n", + "\n", + " mfcc_7 mfcc_8 mfcc_9 mfcc_10 mfcc_11 mfcc_12 target \n", + "0 -12.878377 -4.975601 6.321278 -2.777375 -6.506576 -1.876924 Hilmi \n", + "1 7.961897 -11.957439 7.594936 -14.929685 5.006317 -1.295943 Hilmi \n", + "2 -17.650124 -3.014083 3.925209 -6.664020 -1.170681 -0.027291 Hilmi \n", + "3 -14.874580 0.227556 7.045879 -7.464138 -5.668817 -0.148281 Hilmi \n", + "4 2.124193 -6.581121 11.937312 -18.942954 5.763798 0.569468 Hilmi \n", + ".. ... ... ... ... ... ... ... \n", + "145 -6.744978 -9.246621 -3.982937 -10.705474 -6.795224 -6.532252 Random \n", + "146 -15.326618 -16.521912 1.466365 -6.723767 1.931086 2.092220 Random \n", + "147 -1.948076 -6.980490 -0.893085 -4.223947 -4.055362 -5.809257 Random \n", + "148 -4.953900 -11.460907 -0.344327 -4.228080 -1.677582 -2.752977 Random \n", + "149 2.390462 -5.974159 -0.621773 -2.311574 4.188963 -0.232814 Random \n", + "\n", + "[150 rows x 13 columns]" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = pd.read_csv('/content/drive/MyDrive/REVISI SKRIPSI/dataset_pertama.csv')\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true, + "base_uri": "https://localhost:8080/" + }, + "id": "pEq1S0fvMhNC", + "outputId": "ca0ddc40-512c-4f16-aa7f-90105c4523a9" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "RangeIndex: 150 entries, 0 to 149\n", + "Data columns (total 13 columns):\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 mfcc_1 150 non-null float64\n", + " 1 mfcc_2 150 non-null float64\n", + " 2 mfcc_3 150 non-null float64\n", + " 3 mfcc_4 150 non-null float64\n", + " 4 mfcc_5 150 non-null float64\n", + " 5 mfcc_6 150 non-null float64\n", + " 6 mfcc_7 150 non-null float64\n", + " 7 mfcc_8 150 non-null float64\n", + " 8 mfcc_9 150 non-null float64\n", + " 9 mfcc_10 150 non-null float64\n", + " 10 mfcc_11 150 non-null float64\n", + " 11 mfcc_12 150 non-null float64\n", + " 12 target 150 non-null object \n", + "dtypes: float64(12), object(1)\n", + "memory usage: 15.4+ KB\n" + ] + } + ], + "source": [ + "df.info()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true, + "base_uri": "https://localhost:8080/", + "height": 300 + }, + "id": "sfJWMIBtMpnC", + "outputId": "9c7cd929-0dde-47a7-aaac-a056830ce72e" + }, + "outputs": [ + { + "data": { + "application/vnd.google.colaboratory.intrinsic+json": { + "summary": "{\n \"name\": \"df\",\n \"rows\": 8,\n \"fields\": [\n {\n \"column\": \"mfcc_1\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 57.54294921506547,\n \"min\": -28.16607541028273,\n \"max\": 150.0,\n \"num_unique_values\": 8,\n \"samples\": [\n 52.92849559071616,\n 52.67909415139298,\n 150.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_2\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 63.40642771663973,\n \"min\": -68.12144268080341,\n \"max\": 150.0,\n \"num_unique_values\": 8,\n \"samples\": [\n -6.307195613479998,\n 0.6106925847553657,\n 150.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_3\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 58.28185810277617,\n \"min\": -35.34655184816533,\n \"max\": 150.0,\n \"num_unique_values\": 8,\n \"samples\": [\n -7.113904243435991,\n -8.825214761246645,\n 150.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_4\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 57.62183217405129,\n \"min\": -37.65939195051028,\n \"max\": 150.0,\n \"num_unique_values\": 8,\n \"samples\": [\n -8.56453359187676,\n -6.867867350377988,\n 150.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_5\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 55.07233923831515,\n \"min\": -25.168957020117585,\n \"max\": 150.0,\n \"num_unique_values\": 8,\n \"samples\": [\n -0.9577231590327248,\n -0.1339447985360342,\n 150.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_6\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 58.48142309958314,\n \"min\": -37.11021563514957,\n \"max\": 150.0,\n \"num_unique_values\": 8,\n \"samples\": [\n -10.869185206092027,\n -11.802906445496959,\n 150.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_7\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 54.47579295130784,\n \"min\": -18.00557350489408,\n \"max\": 150.0,\n \"num_unique_values\": 8,\n \"samples\": [\n -3.140169897880235,\n -3.564955884869387,\n 150.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_8\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 54.869632735816396,\n \"min\": -19.42019336425255,\n \"max\": 150.0,\n \"num_unique_values\": 8,\n \"samples\": [\n -4.324533343488815,\n -6.129346251905641,\n 150.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_9\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 53.67205279983795,\n \"min\": -16.537194540172763,\n \"max\": 150.0,\n \"num_unique_values\": 8,\n \"samples\": [\n -0.8533399931483685,\n -0.91361396963881,\n 150.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_10\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 56.25721142309399,\n \"min\": -22.006870967705165,\n \"max\": 150.0,\n \"num_unique_values\": 8,\n \"samples\": [\n -9.213072109360212,\n -10.193841663943422,\n 150.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_11\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 53.80363736760405,\n \"min\": -15.97644564504034,\n \"max\": 150.0,\n \"num_unique_values\": 8,\n \"samples\": [\n -0.8568085259266088,\n -1.679220197784177,\n 150.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_12\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 54.705272151561935,\n \"min\": -21.68206080071003,\n \"max\": 150.0,\n \"num_unique_values\": 8,\n \"samples\": [\n -4.006372983455339,\n -2.0080499610978477,\n 150.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}", + "type": "dataframe" + }, + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
mfcc_1mfcc_2mfcc_3mfcc_4mfcc_5mfcc_6mfcc_7mfcc_8mfcc_9mfcc_10mfcc_11mfcc_12
count150.000000150.000000150.000000150.000000150.000000150.000000150.000000150.000000150.000000150.000000150.000000150.000000
mean52.928496-6.307196-7.113904-8.564534-0.957723-10.869185-3.140170-4.324533-0.853340-9.213072-0.856809-4.006373
std36.27601525.55141216.60760312.24864714.67377010.9670897.1568167.3954288.9256055.7360427.9640576.866482
min-28.166075-68.121443-35.346552-37.659392-25.168957-37.110216-18.005574-19.420193-16.537195-22.006871-15.976446-21.682061
25%27.083477-28.192809-20.513877-16.970205-14.360503-19.147536-8.061160-9.374177-7.514854-13.849136-8.240238-5.374539
50%52.6790940.610693-8.825215-6.867867-0.133945-11.802906-3.564956-6.129346-0.913614-10.193842-1.679220-2.008050
75%70.32834513.6077701.9997361.16844912.395716-5.5538771.2965880.9781487.045267-4.2249805.8148570.083519
max134.00756334.20264038.62011416.51181333.86979722.82306426.58538511.66618416.6265875.34194514.5392818.456266
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "
\n", + "
\n" + ], + "text/plain": [ + " mfcc_1 mfcc_2 mfcc_3 mfcc_4 mfcc_5 mfcc_6 \\\n", + "count 150.000000 150.000000 150.000000 150.000000 150.000000 150.000000 \n", + "mean 52.928496 -6.307196 -7.113904 -8.564534 -0.957723 -10.869185 \n", + "std 36.276015 25.551412 16.607603 12.248647 14.673770 10.967089 \n", + "min -28.166075 -68.121443 -35.346552 -37.659392 -25.168957 -37.110216 \n", + "25% 27.083477 -28.192809 -20.513877 -16.970205 -14.360503 -19.147536 \n", + "50% 52.679094 0.610693 -8.825215 -6.867867 -0.133945 -11.802906 \n", + "75% 70.328345 13.607770 1.999736 1.168449 12.395716 -5.553877 \n", + "max 134.007563 34.202640 38.620114 16.511813 33.869797 22.823064 \n", + "\n", + " mfcc_7 mfcc_8 mfcc_9 mfcc_10 mfcc_11 mfcc_12 \n", + "count 150.000000 150.000000 150.000000 150.000000 150.000000 150.000000 \n", + "mean -3.140170 -4.324533 -0.853340 -9.213072 -0.856809 -4.006373 \n", + "std 7.156816 7.395428 8.925605 5.736042 7.964057 6.866482 \n", + "min -18.005574 -19.420193 -16.537195 -22.006871 -15.976446 -21.682061 \n", + "25% -8.061160 -9.374177 -7.514854 -13.849136 -8.240238 -5.374539 \n", + "50% -3.564956 -6.129346 -0.913614 -10.193842 -1.679220 -2.008050 \n", + "75% 1.296588 0.978148 7.045267 -4.224980 5.814857 0.083519 \n", + "max 26.585385 11.666184 16.626587 5.341945 14.539281 8.456266 " + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.describe()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true, + "base_uri": "https://localhost:8080/" + }, + "id": "jJdKYUOUNDx9", + "outputId": "4cce76eb-d6b4-421d-e260-f08f436e770c" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "mfcc_1 0\n", + "mfcc_2 0\n", + "mfcc_3 0\n", + "mfcc_4 0\n", + "mfcc_5 0\n", + "mfcc_6 0\n", + "mfcc_7 0\n", + "mfcc_8 0\n", + "mfcc_9 0\n", + "mfcc_10 0\n", + "mfcc_11 0\n", + "mfcc_12 0\n", + "target 0\n", + "dtype: int64" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.isnull().sum()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true, + "base_uri": "https://localhost:8080/", + "height": 465 + }, + "id": "_djz4EoQNVXF", + "outputId": "546a0924-c80b-4b20-8aed-ddbf7691b0e4" + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXgAAAHACAYAAACoBHO+AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAoBElEQVR4nO3de3yMd97/8fdEJEJOBDlUEIoGcSiqqlWHVHDXUtqqbTUhDt1Fb7Jad+4qZVtWz9qmrG7F3UOqq8Vuu1t5EIR1yJIKzd6p04ONIilKIimhyfX7oz9zm0qQZGImX6/n4zGPh7mua658rkzyMrkymbFZlmUJAGAcD1cPAACoGQQeAAxF4AHAUAQeAAxF4AHAUAQeAAxF4AHAUAQeAAzl6eoBalpZWZmOHz8uPz8/2Ww2V48DANVmWZbOnTunsLAweXhU/Djd+MAfP35c4eHhrh4DAJzu6NGjatasWYXrjQ+8n5+fpJ8/Ef7+/i6eBgCqr7CwUOHh4fa+VcT4wF8+LePv70/gARjleqed+SUrABiKwAOAoQg8ABiKwAOAoQg8ABiKwAOAoQg8ABiKwAOAoQg8ABiKwAOAoQg8ABjKpYFfvHixOnXqZH+dmF69eumrr76yr79w4YImT56soKAg+fr6auTIkcrPz3fhxABQe7g08M2aNdMf/vAHZWZmateuXerfv7+GDRumf/3rX5Kk6dOn64svvtDKlSuVnp6u48ePa8SIEa4cGQBqDZtlWZarh7hSo0aN9Morr+jhhx9WkyZNlJKSoocffliS9O233yoyMlLbt2/X3XfffUP7KywsVEBAgAoKCng1SQBGuNGuuc3LBZeWlmrlypUqLi5Wr169lJmZqUuXLik6Otq+zR133KHmzZtfM/AlJSUqKSmxXy8sLKzyTLm5uTp16lSVb+/uSkpK5O3t7eoxapTpx8jx1X6NGzdW8+bNa2TfLg/8N998o169eunChQvy9fXV6tWr1b59e2VlZcnLy0uBgYEO2wcHBysvL6/C/S1YsEBz586t9ly5ubm6IzJS53/8sdr7clc2m4csq8zVY9Qo04+R46v9fOrX17c5OTUSeZcHvl27dsrKylJBQYE+++wzxcbGKj09vcr7S0xMVEJCgv365Xc+qaxTp07p/I8/6revLlVY67ZVnsdd7Ulfp5VvvqSxv39LrTt2cvU4NcL0Y+T4ar/jh/br3RkTderUKTMD7+Xlpdtvv12S1K1bN+3cuVOLFi3SqFGjdPHiRZ09e9bhUXx+fr5CQkIq3J+3t7dTf6QLa91WER26OG1/7uL4of2SpNCI2408Psn8Y+T4cD1u9zz4srIylZSUqFu3bqpbt67S0tLs6/bt26fc3Fz16tXLhRMCQO3g0kfwiYmJGjx4sJo3b65z584pJSVFmzZtUmpqqgICAhQfH6+EhAQ1atRI/v7+mjp1qnr16nXDz6ABgFuZSwP//fff68knn9SJEycUEBCgTp06KTU1VQ888IAk6Y033pCHh4dGjhypkpISxcTE6N1333XlyABQa7g08O+///4119erV09JSUlKSkq6SRMBgDnc7hw8AMA5CDwAGIrAA4ChCDwAGIrAA4ChCDwAGIrAA4ChCDwAGIrAA4ChCDwAGIrAA4ChCDwAGIrAA4ChCDwAGIrAA4ChCDwAGIrAA4ChCDwAGIrAA4ChCDwAGIrAA4ChCDwAGIrAA4ChCDwAGIrAA4ChCDwAGIrAA4ChCDwAGIrAA4ChCDwAGIrAA4ChCDwAGIrAA4ChCDwAGIrAA4ChCDwAGIrAA4ChCDwAGIrAA4ChCDwAGIrAA4ChCDwAGIrAA4ChCDwAGIrAA4ChCDwAGIrAA4ChCDwAGIrAA4ChCDwAGMqlgV+wYIF69OghPz8/NW3aVMOHD9e+ffsctunbt69sNpvD5amnnnLRxABQe7g08Onp6Zo8ebJ27NihdevW6dKlSxo4cKCKi4sdtpswYYJOnDhhv7z88ssumhgAag9PV37wtWvXOlxfvny5mjZtqszMTPXp08e+vH79+goJCbnZ4wFAreZW5+ALCgokSY0aNXJY/vHHH6tx48bq2LGjEhMT9eOPP1a4j5KSEhUWFjpcAOBW5NJH8FcqKyvTtGnT1Lt3b3Xs2NG+/Ne//rVatGihsLAw7d27VzNnztS+ffu0atWqcvezYMECzZ0792aNDQBuy20CP3nyZGVnZ+sf//iHw/KJEyfa/x0VFaXQ0FANGDBAhw4dUuvWra/aT2JiohISEuzXCwsLFR4eXnODA4CbcovAT5kyRV9++aU2b96sZs2aXXPbnj17SpIOHjxYbuC9vb3l7e1dI3MCQG3i0sBblqWpU6dq9erV2rRpkyIiIq57m6ysLElSaGhoDU8HALWbSwM/efJkpaSk6C9/+Yv8/PyUl5cnSQoICJCPj48OHTqklJQUDRkyREFBQdq7d6+mT5+uPn36qFOnTq4cHQDcnksDv3jxYkk//zHTlZKTkxUXFycvLy+tX79eb775poqLixUeHq6RI0dq1qxZLpgWAGoXl5+iuZbw8HClp6ffpGkAwCxu9Tx4AIDzEHgAMBSBBwBDEXgAMBSBBwBDEXgAMBSBBwBDEXgAMBSBBwBDEXgAMBSBBwBDEXgAMBSBBwBDEXgAMBSBBwBDEXgAMBSBBwBDEXgAMBSBBwBDEXgAMBSBBwBDEXgAMBSBBwBDEXgAMBSBBwBDEXgAMBSBBwBDEXgAMBSBBwBDEXgAMBSBBwBDEXgAMBSBBwBDEXgAMBSBBwBDEXgAMBSBBwBDEXgAMBSBBwBDEXgAMBSBBwBDEXgAMBSBBwBDEXgAMBSBBwBDEXgAMBSBBwBDEXgAMBSBBwBDEXgAMJRLA79gwQL16NFDfn5+atq0qYYPH659+/Y5bHPhwgVNnjxZQUFB8vX11ciRI5Wfn++iiQGg9nBp4NPT0zV58mTt2LFD69at06VLlzRw4EAVFxfbt5k+fbq++OILrVy5Uunp6Tp+/LhGjBjhwqkBoHbwdOUHX7t2rcP15cuXq2nTpsrMzFSfPn1UUFCg999/XykpKerfv78kKTk5WZGRkdqxY4fuvvtuV4wNALWCW52DLygokCQ1atRIkpSZmalLly4pOjravs0dd9yh5s2ba/v27eXuo6SkRIWFhQ4XALgVuU3gy8rKNG3aNPXu3VsdO3aUJOXl5cnLy0uBgYEO2wYHBysvL6/c/SxYsEABAQH2S3h4eE2PDgBuyW0CP3nyZGVnZ2vFihXV2k9iYqIKCgrsl6NHjzppQgCoXVx6Dv6yKVOm6Msvv9TmzZvVrFkz+/KQkBBdvHhRZ8+edXgUn5+fr5CQkHL35e3tLW9v75oeGQDcnksfwVuWpSlTpmj16tXasGGDIiIiHNZ369ZNdevWVVpamn3Zvn37lJubq169et3scQGgVnHpI/jJkycrJSVFf/nLX+Tn52c/rx4QECAfHx8FBAQoPj5eCQkJatSokfz9/TV16lT16tWLZ9AAwHW4NPCLFy+WJPXt29dheXJysuLi4iRJb7zxhjw8PDRy5EiVlJQoJiZG77777k2eFABqH5cG3rKs625Tr149JSUlKSkp6SZMBADmcJtn0QAAnIvAA4ChCDwAGIrAA4ChCDwAGIrAA4ChCDwAGIrAA4ChCDwAGIrAA4ChCDwAGIrAA4ChCDwAGIrAA4ChCDwAGIrAA4ChCDwAGIrAA4ChCDwAGIrAA4ChCDwAGIrAA4ChCDwAGIrAA4ChCDwAGIrAA4ChCDwAGKpKgW/VqpVOnz591fKzZ8+qVatW1R4KAFB9VQr8kSNHVFpaetXykpISHTt2rNpDAQCqz7MyG//1r3+1/zs1NVUBAQH266WlpUpLS1PLli2dNhwAoOoqFfjhw4dLkmw2m2JjYx3W1a1bVy1bttRrr73mtOEAAFVXqcCXlZVJkiIiIrRz5041bty4RoYCAFRfpQJ/2eHDh509BwDAyaoUeElKS0tTWlqavv/+e/sj+8uWLVtW7cEAANVTpcDPnTtX8+bNU/fu3RUaGiqbzebsuQAA1VSlwC9ZskTLly/XmDFjnD0PAMBJqvQ8+IsXL+qee+5x9iwAACeqUuDHjx+vlJQUZ88CAHCiKp2iuXDhgpYuXar169erU6dOqlu3rsP6119/3SnDAQCqrkqB37t3r7p06SJJys7OdljHL1wBwD1UKfAbN2509hwAACfj5YIBwFBVegTfr1+/a56K2bBhQ5UHAgA4R5UCf/n8+2WXLl1SVlaWsrOzr3oRMgCAa1Qp8G+88Ua5y1944QUVFRVVayAAgHM49Rz8E088wevQAICbcGrgt2/frnr16jlzlwCAKqrSKZoRI0Y4XLcsSydOnNCuXbv0/PPPO2UwAED1VCnwV75VnyR5eHioXbt2mjdvngYOHOiUwQAA1VOlwCcnJzt7DgCAk1XrHHxmZqY++ugjffTRR9q9e3elb79582YNHTpUYWFhstlsWrNmjcP6uLg42Ww2h8ugQYOqMzIA3DKq9Aj++++/12OPPaZNmzYpMDBQknT27Fn169dPK1asUJMmTW5oP8XFxercubPGjRt31Xn9ywYNGuTwE4O3t3dVRgaAW06VAj916lSdO3dO//rXvxQZGSlJ+t///V/Fxsbq6aef1ieffHJD+xk8eLAGDx58zW28vb0VEhJSlTEB4JZWpcCvXbtW69evt8ddktq3b6+kpCSn/5J106ZNatq0qRo2bKj+/fvrxRdfVFBQUIXbl5SUqKSkxH69sLDQqfMAQG1RpXPwZWVlV70GvCTVrVv3qjfgro5Bgwbpgw8+UFpamhYuXKj09HQNHjxYpaWlFd5mwYIFCggIsF/Cw8OdNg8A1CZVCnz//v31n//5nzp+/Lh92bFjxzR9+nQNGDDAacM99thj+tWvfqWoqCgNHz5cX375pXbu3KlNmzZVeJvExEQVFBTYL0ePHnXaPABQm1Qp8O+8844KCwvVsmVLtW7dWq1bt1ZERIQKCwv19ttvO3tGu1atWqlx48Y6ePBghdt4e3vL39/f4QIAt6IqnYMPDw/X119/rfXr1+vbb7+VJEVGRio6Otqpw/3Sd999p9OnTys0NLRGPw4AmKBSj+A3bNig9u3bq7CwUDabTQ888ICmTp2qqVOnqkePHurQoYO2bNlyw/srKipSVlaWsrKyJEmHDx9WVlaWcnNzVVRUpGeeeUY7duzQkSNHlJaWpmHDhun2229XTExMpQ4SAG5FlQr8m2++qQkTJpR72iMgIECTJk2q1Btu79q1S127dlXXrl0lSQkJCeratatmz56tOnXqaO/evfrVr36ltm3bKj4+Xt26ddOWLVt4LjwA3IBKnaLZs2ePFi5cWOH6gQMH6tVXX73h/fXt21eWZVW4PjU1tTLjAQCuUKlH8Pn5+eU+PfIyT09PnTx5stpDAQCqr1KBv+2225SdnV3h+r179/ILUABwE5UK/JAhQ/T888/rwoULV607f/685syZowcffNBpwwEAqq5S5+BnzZqlVatWqW3btpoyZYratWsnSfr222+VlJSk0tJSPffcczUyKACgcioV+ODgYG3btk2/+c1vlJiYaP8Fqc1mU0xMjJKSkhQcHFwjgwIAKqfSf+jUokUL/f3vf9eZM2d08OBBWZalNm3aqGHDhjUxHwCgiqr0l6yS1LBhQ/Xo0cOZswAAnKha7+gEAHBfBB4ADEXgAcBQBB4ADEXgAcBQBB4ADEXgAcBQBB4ADEXgAcBQBB4ADEXgAcBQBB4ADEXgAcBQBB4ADEXgAcBQBB4ADEXgAcBQBB4ADEXgAcBQBB4ADEXgAcBQBB4ADEXgAcBQBB4ADEXgAcBQBB4ADEXgAcBQBB4ADEXgAcBQBB4ADEXgAcBQBB4ADEXgAcBQBB4ADEXgAcBQBB4ADEXgAcBQBB4ADEXgAcBQBB4ADEXgAcBQBB4ADEXgAcBQLg385s2bNXToUIWFhclms2nNmjUO6y3L0uzZsxUaGiofHx9FR0frwIEDrhkWAGoZlwa+uLhYnTt3VlJSUrnrX375Zb311ltasmSJMjIy1KBBA8XExOjChQs3eVIAqH08XfnBBw8erMGDB5e7zrIsvfnmm5o1a5aGDRsmSfrggw8UHBysNWvW6LHHHruZowJAreO25+APHz6svLw8RUdH25cFBASoZ8+e2r59uwsnA4DawaWP4K8lLy9PkhQcHOywPDg42L6uPCUlJSopKbFfLywsrJkBAcDNue0j+KpasGCBAgIC7Jfw8HBXjwQALuG2gQ8JCZEk5efnOyzPz8+3rytPYmKiCgoK7JejR4/W6JwA4K7cNvAREREKCQlRWlqafVlhYaEyMjLUq1evCm/n7e0tf39/hwsA3Ipceg6+qKhIBw8etF8/fPiwsrKy1KhRIzVv3lzTpk3Tiy++qDZt2igiIkLPP/+8wsLCNHz4cNcNDQC1hEsDv2vXLvXr189+PSEhQZIUGxur5cuX69lnn1VxcbEmTpyos2fP6t5779XatWtVr149V40MALWGSwPft29fWZZV4XqbzaZ58+Zp3rx5N3EqADCD256DBwBUD4EHAEMReAAwFIEHAEMReAAwFIEHAEMReAAwFIEHAEMReAAwFIEHAEMReAAwFIEHAEMReAAwFIEHAEMReAAwFIEHAEMReAAwFIEHAEMReAAwFIEHAEMReAAwFIEHAEMReAAwFIEHAEMReAAwFIEHAEMReAAwFIEHAEMReAAwFIEHAEMReAAwFIEHAEMReAAwFIEHAEMReAAwFIEHAEMReAAwFIEHAEMReAAwFIEHAEMReAAwFIEHAEMReAAwFIEHAEMReAAwFIEHAEMReAAwFIEHAEMReAAwFIEHAEO5deBfeOEF2Ww2h8sdd9zh6rEAoFbwdPUA19OhQwetX7/eft3T0+1HBgC34Pa19PT0VEhIiKvHAIBax61P0UjSgQMHFBYWplatWunxxx9Xbm6uq0cCgFrBrR/B9+zZU8uXL1e7du104sQJzZ07V/fdd5+ys7Pl5+dX7m1KSkpUUlJiv15YWHizxgUAt+LWgR88eLD93506dVLPnj3VokUL/fnPf1Z8fHy5t1mwYIHmzp17s0YEALfl9qdorhQYGKi2bdvq4MGDFW6TmJiogoIC++Xo0aM3cUIAcB+1KvBFRUU6dOiQQkNDK9zG29tb/v7+DhcAuBW5deBnzJih9PR0HTlyRNu2bdNDDz2kOnXqaPTo0a4eDQDcnlufg//uu+80evRonT59Wk2aNNG9996rHTt2qEmTJq4eDQDcnlsHfsWKFa4eAQBqLbc+RQMAqDoCDwCGIvAAYCgCDwCGIvAAYCgCDwCGIvAAYCgCDwCGIvAAYCgCDwCGIvAAYCgCDwCGIvAAYCgCDwCGIvAAYCgCDwCGIvAAYCgCDwCGIvAAYCgCDwCGIvAAYCgCDwCGIvAAYCgCDwCGIvAAYCgCDwCGIvAAYCgCDwCGIvAAYCgCDwCGIvAAYCgCDwCGIvAAYCgCDwCGIvAAYCgCDwCGIvAAYCgCDwCGIvAAYCgCDwCGIvAAYCgCDwCGIvAAYCgCDwCGIvAAYCgCDwCGIvAAYCgCDwCGIvAAYCgCDwCGqhWBT0pKUsuWLVWvXj317NlT//znP109EgC4PbcP/KeffqqEhATNmTNHX3/9tTp37qyYmBh9//33rh4NANya2wf+9ddf14QJEzR27Fi1b99eS5YsUf369bVs2TJXjwYAbs2tA3/x4kVlZmYqOjravszDw0PR0dHavn27CycDAPfn6eoBruXUqVMqLS1VcHCww/Lg4GB9++235d6mpKREJSUl9usFBQWSpMLCwkp97KKiIknSkX/t0YUfiyt129rg+KH9kqR/53wjD5vl4mlqhunHyPHVfnmHD0r6uTeVadTlbS3rOp8Xy40dO3bMkmRt27bNYfkzzzxj3XXXXeXeZs6cOZYkLly4cDH+cvTo0Ws21K0fwTdu3Fh16tRRfn6+w/L8/HyFhISUe5vExEQlJCTYr5eVlemHH35QUFCQbDZbjc5bHYWFhQoPD9fRo0fl7+/v6nFqhOnHyPHVfrXlGC3L0rlz5xQWFnbN7dw68F5eXurWrZvS0tI0fPhwST8HOy0tTVOmTCn3Nt7e3vL29nZYFhgYWMOTOo+/v79bf2E5g+nHyPHVfrXhGAMCAq67jVsHXpISEhIUGxur7t2766677tKbb76p4uJijR071tWjAYBbc/vAjxo1SidPntTs2bOVl5enLl26aO3atVf94hUA4MjtAy9JU6ZMqfCUjCm8vb01Z86cq04vmcT0Y+T4aj/TjtFmWdd7ng0AoDZy6z90AgBUHYEHAEMReAAwFIG/yZYvX+7wvPwXXnhBXbp0qdY+jxw5IpvNpqysrGrtx13FxcXZ/w6itrre/V5bjnHTpk2y2Ww6e/aspKuPyzQ2m01r1qxx9RhVRuCdqKJv0iu/KUaNGqX9+/c79eOGh4frxIkT6tixo1P3+0s2m+2alxdeeKFa+6/oP6pFixZp+fLl1dr30KFDNWjQoHLXbdmyRTabTXv37q3Wx7iWmrjfr8eyLEVHRysmJuaqde+++64CAwP13Xff3dSZqiIuLs7+NVa3bl1FRETo2Wef1YULF1w9mturFU+TNImPj498fHycus86depU+NINznTixAn7vz/99FPNnj1b+/btsy/z9fWtkY97I3+xdz3x8fEaOXKkvvvuOzVr1sxhXXJysrp3765OnTpV++NUpCbu9+ux2WxKTk5WVFSU/vjHP2rSpEmSpMOHD+vZZ5/V4sWLr/pcuKtBgwYpOTlZly5dUmZmpmJjY2Wz2bRw4UJXj+bWeAR/k13vR9rLPwXMnz9fwcHBCgwM1Lx58/TTTz/pmWeeUaNGjdSsWTMlJyfbb3OzTtGEhITYLwEBAbLZbPbrxcXFevzxxxUcHCxfX1/16NFD69evd7h9y5YtNX/+fI0bN05+fn5q3ry5li5dal8fEREhSeratatsNpv69u3r8DmpjgcffFBNmjS56ieBoqIirVy5UsOHD9fo0aN12223qX79+oqKitInn3zisO1nn32mqKgo+fj4KCgoSNHR0SouLtbmzZtVt25d5eXlOWw/bdo03XfffZIqfypj7dq1uvfeexUYGKigoCA9+OCDOnToUKWPOzw8XIsWLdKMGTN0+PBhWZal+Ph4DRw4UE8++aTD18zZs2dls9m0adMm+7K///3vatu2rXx8fNSvXz8dOXKk3I+TmpqqyMhI+fr6atCgQQ4PBnbu3KkHHnhAjRs3VkBAgO6//359/fXXlToOb29vhYSEKDw8XMOHD1d0dLTWrVsnSTp9+vR177u+ffvq6aef1rPPPqtGjRopJCTkqp84Dxw4oD59+qhevXpq3769ff9X+uabb9S/f3/718DEiRPtrzwrVe37tyYReDe0YcMGHT9+XJs3b9brr7+uOXPm6MEHH1TDhg2VkZGhp556SpMmTXKrH6+Lioo0ZMgQpaWlaffu3Ro0aJCGDh2q3Nxch+1ee+01de/eXbt379Zvf/tb/eY3v7H/FHD5rRjXr1+vEydOaNWqVU6bz9PTU08++aSWL1/u8BKrK1euVGlpqZ544gl169ZNf/vb35Sdna2JEydqzJgx9plOnDih0aNHa9y4ccrJydGmTZs0YsQIWZalPn36qFWrVvrwww/t+7106ZI+/vhjjRs3rkrzFhcXKyEhQbt27VJaWpo8PDz00EMPqaysrNL7io2N1YABAzRu3Di98847ys7OVmJi4nVvd/ToUY0YMUJDhw5VVlaWxo8fr//6r/+6arsff/xRr776qj788ENt3rxZubm5mjFjhn39uXPnFBsbq3/84x/asWOH2rRpoyFDhujcuXOVPhZJys7O1rZt2+Tl5SVJunDhwjXvu8v+53/+Rw0aNFBGRoZefvllzZs3zx7xsrIyjRgxQl5eXsrIyNCSJUs0c+ZMh9sXFxcrJiZGDRs21M6dO7Vy5UqtX7/+qj/CdKvv3+q/qC8ui42NterUqWM1aNDA4VKvXj1LknXmzBkrOTnZCggIsN9mzpw5VufOnR320aJFC6u0tNS+rF27dtZ9991nv/7TTz9ZDRo0sD755BPLsizr8OHDliRr9+7dNX2Idr88jvJ06NDBevvtt+3XW7RoYT3xxBP262VlZVbTpk2txYsXW5ZV8XHExsZaw4YNq/bMOTk5liRr48aN9mX33Xefw0xX+o//+A/rd7/7nWVZlpWZmWlJso4cOVLutgsXLrQiIyPt1z///HPL19fXKioqsizr6s9Xeff7tY7x5MmTliTrm2++uc5Rli8/P99q3Lix5eHhYa1evbrcz/WZM2ccPj+JiYlW+/btHfYzc+ZM+9fy5eOSZB08eNC+TVJSkhUcHFzhLKWlpZafn5/1xRdf3NDsV35feXt7W5IsDw8P67PPPqvwNlfed5ZlWffff7917733OmzTo0cPa+bMmZZlWVZqaqrl6elpHTt2zL7+q6++siRZq1evtizLspYuXWo1bNjQfp9almX97W9/szw8PKy8vDz7rJX9/q1JPIJ3sn79+ikrK8vh8qc//alS++jQoYM8PP7vrgkODlZUVJT9ep06dRQUFORW70tbVFSkGTNmKDIyUoGBgfL19VVOTs5Vj+CvPM99+RTPzTqOO+64Q/fcc4/97R4PHjyoLVu2KD4+XqWlpfr973+vqKgoNWrUSL6+vkpNTbXP37lzZw0YMEBRUVF65JFH9N577+nMmTP2fcfFxengwYPasWOHpJ9PyTz66KNq0KBBlWY9cOCARo8erVatWsnf318tW7aUpKs+nzeqadOmmjRpkiIjI2/4dFdOTo569uzpsKxXr15XbVe/fn21bt3afj00NNThPs3Pz9eECRPUpk0bBQQEyN/fX0VFRZU6lsvfVxkZGYqNjdXYsWM1cuRISbrufXfZL3/HcuWcOTk5Cg8Pd3j53V8ea05Ojjp37uxwn/bu3VtlZWUOv4typ+9fAu9kDRo00O233+5wue222yq1j7p16zpcv/zsgV8uq8qP6zVlxowZWr16tebPn68tW7YoKytLUVFRunjxosN2rj6O+Ph4ff755zp37pySk5PVunVr3X///XrllVe0aNEizZw5Uxs3blRWVpZiYmLs89epU0fr1q3TV199pfbt2+vtt99Wu3btdPjwYUk/B3To0KFKTk5Wfn6+vvrqqyqfnpF+ftbPDz/8oPfee08ZGRnKyMiQpKs+n5Xh6ekpT8+fn1dxOUDWFaerLl26VKX9lnefXrnf2NhYZWVladGiRdq2bZuysrIUFBRUqWO5/H3VuXNnLVu2TBkZGXr//fcl6br33bXmrImvPXf6/iXwcIqtW7cqLi5ODz30kKKiohQSElLhL+QqcvmcamlpaQ1M+LNHH31UHh4eSklJ0QcffKBx48bJZrNp69atGjZsmJ544gl17txZrVq1uuppjTabTb1799bcuXO1e/dueXl5afXq1fb148eP16effqqlS5eqdevW6t27d5VmPH36tPbt26dZs2ZpwIABioyMdPhpwRmaNGkiyfGZUb/8JX1kZORV57Ev/4RSGVu3btXTTz+tIUOGqEOHDvL29tapU6cqP/T/5+Hhof/+7//WrFmzdP78+Ru6764nMjJSR48edfh8/PJYIyMjtWfPHhUX/99beG7dulUeHh5q165dlY+nJhF4OEWbNm20atUqZWVlac+ePfr1r39d6UcoTZs2lY+Pj9auXav8/Hz7++k6k6+vr0aNGqXExESdOHFCcXFx9vnXrVunbdu2KScnR5MmTXJ4J7GMjAzNnz9fu3btUm5urlatWqWTJ08qMjLSvk1MTIz8/f314osvVuv9Cho2bKigoCAtXbpUBw8e1IYNGxzepcwZfHx8dPfdd+sPf/iDcnJylJ6erlmzZjls89RTT+nAgQN65plntG/fPqWkpFTp7xHatGmjDz/8UDk5OcrIyNDjjz9e7aeMPvLII6pTp46SkpKue9/diOjoaLVt21axsbHas2ePtmzZoueee85hm8cff1z16tVTbGyssrOztXHjRk2dOlVjxoxx25cvJ/Bwitdff10NGzbUPffco6FDhyomJkZ33nlnpfbh6empt956S3/84x8VFhamYcOG1cis8fHxOnPmjGJiYuznXGfNmqU777xTMTEx6tu3r0JCQhzOVfv7+2vz5s0aMmSI2rZtq1mzZum1117T4MGD7dt4eHgoLi5OpaWlevLJJ6s8n4eHh1asWKHMzEx17NhR06dP1yuvvFLl/VVk2bJl+umnn9StWzdNmzZNL774osP65s2b6/PPP9eaNWvUuXNnLVmyRPPnz6/0x3n//fd15swZ3XnnnRozZoyefvppNW3atFqze3p6asqUKXr55Zf1u9/97pr33Y3w8PDQ6tWrdf78ed11110aP368XnrpJYdt6tevr9TUVP3www/q0aOHHn74YQ0YMEDvvPNOtY6lJvFywYATxcfH6+TJk/rrX//q6lEA/pIVcIaCggJ98803SklJIe5wGwQecIJhw4bpn//8p5566ik98MADrh4HkMQpGgAwFr9kBQBDEXgAMBSBBwBDEXgAMBSBBwBDEXjc0vr27atp06a5egw7d5sHtRuBB6qpOq/wCNQkAo9bVlxcnNLT07Vo0SL7mzofOnRI8fHxioiIkI+Pj9q1a6dFixZddbvhw4frpZdeUlhYmP2VBLdt26YuXbqoXr166t69u9asWXPVWylmZ2dr8ODB8vX1VXBwsMaMGWN/ZcXy5qnsK3ICV+IvWXHLWrRokfbv36+OHTtq3rx5kn5+JcdmzZpp5cqVCgoK0rZt2zRx4kSFhobq0Ucftd82LS1N/v7+9rd8Kyws1NChQzVkyBClpKTo3//+91WnWs6ePav+/ftr/PjxeuONN3T+/HnNnDlTjz76qDZs2FDuPJdf1heoCgKPW1ZAQIC8vLxUv359hYSE2JfPnTvX/u+IiAht375df/7znx0C36BBA/3pT3+yv4b9kiVLZLPZ9N5779nftPnYsWOaMGGC/TbvvPOOunbt6vCKjMuWLVN4eLj279+vtm3bljsPUFUEHviFpKQkLVu2TLm5uTp//rwuXryoLl26OGwTFRVlj7sk7du3T506dVK9evXsy+666y6H2+zZs0cbN26Ur6/vVR/z0KFDatu2rXMPBLc8Ag9cYcWKFZoxY4Zee+019erVS35+fnrllVfsb5l3WVXea7WoqEhDhw7VwoULr1oXGhpa5ZmBihB43NK8vLwc3iJw69atuueee/Tb3/7WvuzQoUPX3U+7du300UcfqaSkRN7e3pKknTt3Omxz55136vPPP1fLli3t7416vXmA6uBZNLiltWzZUhkZGTpy5IhOnTqlNm3aaNeuXUpNTdX+/fv1/PPPXxXq8lx+i8KJEycqJydHqampevXVVyX9/F6ukjR58mT98MMPGj16tHbu3KlDhw4pNTVVY8eOtUf9l/O40xuro/Yh8LilzZgxQ3Xq1FH79u3VpEkTxcTEaMSIERo1apR69uyp06dPOzyar4i/v7+++OILZWVlqUuXLnruuec0e/ZsSbKflw8LC9PWrVtVWlqqgQMHKioqStOmTVNgYKA8PDzKnSc3N7fmDh7G4/XggRry8ccfa+zYsSooKKj2m0wDVcE5eMBJPvjgA7Vq1Uq33Xab9uzZY3+OO3GHqxB4wEny8vI0e/Zs5eXlKTQ0VI888oheeuklV4+FWxinaADAUPySFQAMReABwFAEHgAMReABwFAEHgAMReABwFAEHgAMReABwFAEHgAM9f8AKLWODihrfJoAAAAASUVORK5CYII=\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, axes = plt.subplots(1, 1, figsize=(4, 5))\n", + "sns.histplot(data=df, x='target', ax=axes, color='skyblue')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Oz4HrFkvK5HX" + }, + "source": [ + "# Data Preparation" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Vbm0Iyx1LZDL" + }, + "source": [ + "Pengambilan 5 kelas dari dataframe" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true, + "base_uri": "https://localhost:8080/", + "height": 424 + }, + "id": "W-NoSdhxsUsH", + "outputId": "c1670698-b0f3-4175-867d-f5c39806d759" + }, + "outputs": [ + { + "data": { + "application/vnd.google.colaboratory.intrinsic+json": { + "summary": "{\n \"name\": \"df\",\n \"rows\": 150,\n \"fields\": [\n {\n \"column\": \"mfcc_1\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 36.276014922615474,\n \"min\": -28.16607541028273,\n \"max\": 134.00756340540602,\n \"num_unique_values\": 148,\n \"samples\": [\n 36.08258057714812,\n 58.86680953129214,\n -3.523882247385767\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_2\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 25.55141187112381,\n \"min\": -68.12144268080341,\n \"max\": 34.202640399438096,\n \"num_unique_values\": 148,\n \"samples\": [\n 23.939076705384803,\n 21.946738597467206,\n 13.0356526884146\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_3\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 16.607602505135112,\n \"min\": -35.34655184816533,\n \"max\": 38.62011424617032,\n \"num_unique_values\": 148,\n \"samples\": [\n 13.91699151797878,\n -8.389756054170379,\n -1.8076506613349623\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_4\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 12.248647405224922,\n \"min\": -37.65939195051028,\n \"max\": 16.511813215011305,\n \"num_unique_values\": 148,\n \"samples\": [\n 11.817977912406883,\n -25.196198956208004,\n -1.877552087075581\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_5\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 14.67376981879269,\n \"min\": -25.168957020117585,\n \"max\": 33.86979700528147,\n \"num_unique_values\": 148,\n \"samples\": [\n -9.159842263653752,\n 12.502871968905891,\n -5.269233643564018\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_6\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 10.967088795363342,\n \"min\": -37.11021563514957,\n \"max\": 22.823063964431544,\n \"num_unique_values\": 148,\n \"samples\": [\n -11.37754250437596,\n -21.623600445733462,\n -7.599002274584097\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_7\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 7.156816371373767,\n \"min\": -18.00557350489408,\n \"max\": 26.58538472976201,\n \"num_unique_values\": 148,\n \"samples\": [\n -6.540024131817128,\n -2.978011309692604,\n -3.908204318319117\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_8\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 7.3954280048501255,\n \"min\": -19.42019336425255,\n \"max\": 11.666184384702827,\n \"num_unique_values\": 148,\n \"samples\": [\n -8.77716113407432,\n -9.47772235720944,\n -6.146912684052977\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_9\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 8.925604847630165,\n \"min\": -16.537194540172763,\n \"max\": 16.626586628222096,\n \"num_unique_values\": 148,\n \"samples\": [\n -5.5096426829032765,\n -4.192069878917911,\n 0.0969209496106391\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_10\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 5.736041581214664,\n \"min\": -22.006870967705165,\n \"max\": 5.341944901286143,\n \"num_unique_values\": 148,\n \"samples\": [\n -14.888090524599049,\n -2.679905652845484,\n -4.124536203962681\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_11\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 7.964057207796632,\n \"min\": -15.97644564504034,\n \"max\": 14.539281254023074,\n \"num_unique_values\": 148,\n \"samples\": [\n -8.107532163193822,\n -10.48949586980253,\n -2.566518390687336\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_12\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 6.866482357947159,\n \"min\": -21.68206080071003,\n \"max\": 8.456266425271922,\n \"num_unique_values\": 148,\n \"samples\": [\n -5.797938428082079,\n -2.674145185062222,\n -5.316564560856999\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"target\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 5,\n \"samples\": [\n \"Tanti\",\n \"Random\",\n \"Vasyilla\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}", + "type": "dataframe", + "variable_name": "df" + }, + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
mfcc_1mfcc_2mfcc_3mfcc_4mfcc_5mfcc_6mfcc_7mfcc_8mfcc_9mfcc_10mfcc_11mfcc_12target
0134.007563-10.5976407.266465-3.754714-13.8083332.155736-12.878377-4.9756016.321278-2.777375-6.506576-1.876924Hilmi
150.750191-5.59891632.949004-22.50126014.779131-19.5383017.961897-11.9574397.594936-14.9296855.006317-1.295943Hilmi
2122.293842-12.81445812.493625-10.989077-15.9638401.330859-17.650124-3.0140833.925209-6.664020-1.170681-0.027291Hilmi
3126.803849-0.0539418.270297-6.800313-13.392560-0.899367-14.8745800.2275567.045879-7.464138-5.668817-0.148281Hilmi
410.4686029.117828-8.683499-1.46616824.753077-21.5310512.124193-6.58112111.937312-18.9429545.7637980.569468Hilmi
..........................................
14536.42794325.7072848.21266810.450583-5.248485-11.510404-6.744978-9.246621-3.982937-10.705474-6.795224-6.532252Random
14643.9542716.4560482.131374-9.353882-17.369689-7.557169-15.326618-16.5219121.466365-6.7237671.9310862.092220Random
14755.78210826.974924-5.329280-1.423440-9.777956-8.758294-1.948076-6.980490-0.893085-4.223947-4.055362-5.809257Random
14826.584968-8.043035-4.178721-0.592769-15.964644-9.010896-4.953900-11.460907-0.344327-4.228080-1.677582-2.752977Random
14919.5893339.885163-20.071891-13.235444-15.691194-10.1116712.390462-5.974159-0.621773-2.3115744.188963-0.232814Random
\n", + "

150 rows × 13 columns

\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "
\n", + "
\n" + ], + "text/plain": [ + " mfcc_1 mfcc_2 mfcc_3 mfcc_4 mfcc_5 mfcc_6 \\\n", + "0 134.007563 -10.597640 7.266465 -3.754714 -13.808333 2.155736 \n", + "1 50.750191 -5.598916 32.949004 -22.501260 14.779131 -19.538301 \n", + "2 122.293842 -12.814458 12.493625 -10.989077 -15.963840 1.330859 \n", + "3 126.803849 -0.053941 8.270297 -6.800313 -13.392560 -0.899367 \n", + "4 10.468602 9.117828 -8.683499 -1.466168 24.753077 -21.531051 \n", + ".. ... ... ... ... ... ... \n", + "145 36.427943 25.707284 8.212668 10.450583 -5.248485 -11.510404 \n", + "146 43.954271 6.456048 2.131374 -9.353882 -17.369689 -7.557169 \n", + "147 55.782108 26.974924 -5.329280 -1.423440 -9.777956 -8.758294 \n", + "148 26.584968 -8.043035 -4.178721 -0.592769 -15.964644 -9.010896 \n", + "149 19.589333 9.885163 -20.071891 -13.235444 -15.691194 -10.111671 \n", + "\n", + " mfcc_7 mfcc_8 mfcc_9 mfcc_10 mfcc_11 mfcc_12 target \n", + "0 -12.878377 -4.975601 6.321278 -2.777375 -6.506576 -1.876924 Hilmi \n", + "1 7.961897 -11.957439 7.594936 -14.929685 5.006317 -1.295943 Hilmi \n", + "2 -17.650124 -3.014083 3.925209 -6.664020 -1.170681 -0.027291 Hilmi \n", + "3 -14.874580 0.227556 7.045879 -7.464138 -5.668817 -0.148281 Hilmi \n", + "4 2.124193 -6.581121 11.937312 -18.942954 5.763798 0.569468 Hilmi \n", + ".. ... ... ... ... ... ... ... \n", + "145 -6.744978 -9.246621 -3.982937 -10.705474 -6.795224 -6.532252 Random \n", + "146 -15.326618 -16.521912 1.466365 -6.723767 1.931086 2.092220 Random \n", + "147 -1.948076 -6.980490 -0.893085 -4.223947 -4.055362 -5.809257 Random \n", + "148 -4.953900 -11.460907 -0.344327 -4.228080 -1.677582 -2.752977 Random \n", + "149 2.390462 -5.974159 -0.621773 -2.311574 4.188963 -0.232814 Random \n", + "\n", + "[150 rows x 13 columns]" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = df = df = df = df[df['target'].isin(['Hilmi', 'Tanti', 'Vasyilla', 'Yudha', 'Random'])]\n", + "df" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "wpBWFvGaLiny" + }, + "source": [ + "Normalisasi MinMax" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true + }, + "id": "xzmFgA9xtKEP" + }, + "outputs": [], + "source": [ + "def minmax(df_input):\n", + " list_fitur = df_input.columns[:-1]\n", + " for fitur in list_fitur:\n", + " max = df_input[fitur].max()\n", + " min = df_input[fitur].min()\n", + " df_input[fitur] = (df_input[fitur]-min)/(max-min)\n", + " return df_input" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true, + "base_uri": "https://localhost:8080/", + "height": 424 + }, + "id": "IWlYLLujtKpR", + "outputId": "1d3f38e3-2e69-4bd2-a30c-a0039491a5a8" + }, + "outputs": [ + { + "data": { + "application/vnd.google.colaboratory.intrinsic+json": { + "summary": "{\n \"name\": \"df\",\n \"rows\": 150,\n \"fields\": [\n {\n \"column\": \"mfcc_1\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.22368626114286905,\n \"min\": 0.0,\n \"max\": 1.0,\n \"num_unique_values\": 148,\n \"samples\": [\n 0.39617200709450573,\n 0.5366648092572446,\n 0.151949437299751\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_2\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.24971063606879967,\n \"min\": 0.0,\n \"max\": 1.0,\n \"num_unique_values\": 148,\n \"samples\": [\n 0.8996955224509101,\n 0.8802246603826399,\n 0.7931377729089978\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_3\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.22452820144623117,\n \"min\": 0.0,\n \"max\": 1.0,\n \"num_unique_values\": 148,\n \"samples\": [\n 0.6660235747723758,\n 0.364445191562572,\n 0.4534326468635954\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_4\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.22610992994892484,\n \"min\": 0.0,\n \"max\": 1.0,\n \"num_unique_values\": 148,\n \"samples\": [\n 0.9133518390764562,\n 0.2300704397515369,\n 0.6605324683861532\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_5\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.2485447069645116,\n \"min\": 0.0,\n \"max\": 1.0,\n \"num_unique_values\": 148,\n \"samples\": [\n 0.2711628153530569,\n 0.638086450347795,\n 0.33706204856546446\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_6\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.18298829746403522,\n \"min\": 0.0,\n \"max\": 1.0,\n \"num_unique_values\": 148,\n \"samples\": [\n 0.4293553315068956,\n 0.25839759300481113,\n 0.4924011093291103\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_7\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.16049927282817375,\n \"min\": 0.0,\n \"max\": 1.0,\n \"num_unique_values\": 148,\n \"samples\": [\n 0.25712722549581657,\n 0.33700917832086547,\n 0.3161486037682521\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_8\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.23789931604683792,\n \"min\": 0.0,\n \"max\": 1.0,\n \"num_unique_values\": 148,\n \"samples\": [\n 0.342369648729366,\n 0.3198336933088711,\n 0.42698061470496046\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_9\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.26913712891509134,\n \"min\": 0.0,\n \"max\": 1.0,\n \"num_unique_values\": 148,\n \"samples\": [\n 0.3325179297642562,\n 0.3722471993941323,\n 0.5015747572727244\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_10\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.20973637793650562,\n \"min\": 0.0,\n \"max\": 1.0,\n \"num_unique_values\": 148,\n \"samples\": [\n 0.2602957465217917,\n 0.7066838069860648,\n 0.6538613901751362\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_11\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.2609820580102604,\n \"min\": 0.0,\n \"max\": 1.0,\n \"num_unique_values\": 148,\n \"samples\": [\n 0.2578641992659867,\n 0.17980727751912784,\n 0.4394431533192342\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_12\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.22783223191058968,\n \"min\": 0.0,\n \"max\": 1.0,\n \"num_unique_values\": 148,\n \"samples\": [\n 0.5270406102344792,\n 0.630689137891544,\n 0.5430127597043442\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"target\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 5,\n \"samples\": [\n \"Tanti\",\n \"Random\",\n \"Vasyilla\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}", + "type": "dataframe", + "variable_name": "df" + }, + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
mfcc_1mfcc_2mfcc_3mfcc_4mfcc_5mfcc_6mfcc_7mfcc_8mfcc_9mfcc_10mfcc_11mfcc_12target
01.0000000.5621730.5761110.6258800.1924270.6551610.1149830.4646600.6892600.7031200.3103280.657141Hilmi
10.4866160.6110250.9233290.2798190.6766420.2931910.5823480.2400650.7276650.2587750.6876050.676418Hilmi
20.9277700.5405080.6467800.4923340.1559170.6413980.0079710.5277590.6170110.5610060.4851850.718513Hilmi
30.9555800.6652150.5896830.5696580.1994690.6041860.0702160.6320370.7111090.5317500.3377810.714498Hilmi
40.2382300.7548490.3604740.6681270.8455810.2599420.4514320.4130130.8586030.1120310.7124280.738313Hilmi
..........................................
1450.3983020.9169760.5889030.8881100.3374130.4271390.2525310.3272680.3785530.4132320.3008690.502676Random
1460.4447110.7288360.5066870.5225190.1321040.4930990.0600780.0932330.5428680.5588210.5868300.788839Random
1470.5176440.9293640.4058220.6689150.2606930.4730580.3601070.4001660.4717230.6502260.3906540.526665Random
1480.3376080.5871380.4213770.6842500.1559030.4688430.2926980.2560380.4882700.6500750.4685740.628073Random
1490.2944710.7623480.2065070.4508660.1605350.4504770.4574030.4325380.4799040.7201520.6608200.711693Random
\n", + "

150 rows × 13 columns

\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "
\n", + "
\n" + ], + "text/plain": [ + " mfcc_1 mfcc_2 mfcc_3 mfcc_4 mfcc_5 mfcc_6 mfcc_7 \\\n", + "0 1.000000 0.562173 0.576111 0.625880 0.192427 0.655161 0.114983 \n", + "1 0.486616 0.611025 0.923329 0.279819 0.676642 0.293191 0.582348 \n", + "2 0.927770 0.540508 0.646780 0.492334 0.155917 0.641398 0.007971 \n", + "3 0.955580 0.665215 0.589683 0.569658 0.199469 0.604186 0.070216 \n", + "4 0.238230 0.754849 0.360474 0.668127 0.845581 0.259942 0.451432 \n", + ".. ... ... ... ... ... ... ... \n", + "145 0.398302 0.916976 0.588903 0.888110 0.337413 0.427139 0.252531 \n", + "146 0.444711 0.728836 0.506687 0.522519 0.132104 0.493099 0.060078 \n", + "147 0.517644 0.929364 0.405822 0.668915 0.260693 0.473058 0.360107 \n", + "148 0.337608 0.587138 0.421377 0.684250 0.155903 0.468843 0.292698 \n", + "149 0.294471 0.762348 0.206507 0.450866 0.160535 0.450477 0.457403 \n", + "\n", + " mfcc_8 mfcc_9 mfcc_10 mfcc_11 mfcc_12 target \n", + "0 0.464660 0.689260 0.703120 0.310328 0.657141 Hilmi \n", + "1 0.240065 0.727665 0.258775 0.687605 0.676418 Hilmi \n", + "2 0.527759 0.617011 0.561006 0.485185 0.718513 Hilmi \n", + "3 0.632037 0.711109 0.531750 0.337781 0.714498 Hilmi \n", + "4 0.413013 0.858603 0.112031 0.712428 0.738313 Hilmi \n", + ".. ... ... ... ... ... ... \n", + "145 0.327268 0.378553 0.413232 0.300869 0.502676 Random \n", + "146 0.093233 0.542868 0.558821 0.586830 0.788839 Random \n", + "147 0.400166 0.471723 0.650226 0.390654 0.526665 Random \n", + "148 0.256038 0.488270 0.650075 0.468574 0.628073 Random \n", + "149 0.432538 0.479904 0.720152 0.660820 0.711693 Random \n", + "\n", + "[150 rows x 13 columns]" + ] + }, + "execution_count": 56, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_scaled = minmax(df)\n", + "df_scaled" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true, + "base_uri": "https://localhost:8080/", + "height": 300 + }, + "id": "EF7XAYFSMvBs", + "outputId": "f5fdd9fb-d824-4fb9-89b7-3f6580b8805a" + }, + "outputs": [ + { + "data": { + "application/vnd.google.colaboratory.intrinsic+json": { + "summary": "{\n \"name\": \"df_scaled\",\n \"rows\": 8,\n \"fields\": [\n {\n \"column\": \"mfcc_1\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 52.87369352743623,\n \"min\": 0.0,\n \"max\": 150.0,\n \"num_unique_values\": 8,\n \"samples\": [\n 0.5000477981083185,\n 0.4985099314047994,\n 150.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_2\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 52.846342550332686,\n \"min\": 0.0,\n \"max\": 150.0,\n \"num_unique_values\": 8,\n \"samples\": [\n 0.6041026238060625,\n 0.6717102484237238,\n 150.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_3\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 52.89895398708089,\n \"min\": 0.0,\n \"max\": 150.0,\n \"num_unique_values\": 8,\n \"samples\": [\n 0.38169420220619343,\n 0.35855796248939886,\n 150.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_4\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 52.86061906054653,\n \"min\": 0.0,\n \"max\": 150.0,\n \"num_unique_values\": 8,\n \"samples\": [\n 0.5370908450298161,\n 0.5684112898365092,\n 150.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_5\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 52.88730537785032,\n \"min\": 0.0,\n \"max\": 150.0,\n \"num_unique_values\": 8,\n \"samples\": [\n 0.410090528852776,\n 0.4240437088291402,\n 150.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_6\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 52.8888888393393,\n \"min\": 0.0,\n \"max\": 150.0,\n \"num_unique_values\": 8,\n \"samples\": [\n 0.43783738524532445,\n 0.4222580402529731,\n 150.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_7\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 52.90888920487374,\n \"min\": 0.0,\n \"max\": 150.0,\n \"num_unique_values\": 8,\n \"samples\": [\n 0.33337259829192134,\n 0.3238463175433949,\n 150.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_8\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 52.87572416739311,\n \"min\": 0.0,\n \"max\": 150.0,\n \"num_unique_values\": 8,\n \"samples\": [\n 0.485603698915066,\n 0.42754569926673214,\n 150.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_9\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 52.87243291238593,\n \"min\": 0.0,\n \"max\": 150.0,\n \"num_unique_values\": 8,\n \"samples\": [\n 0.47292118071178,\n 0.4711037167686793,\n 150.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_10\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 52.879403376782854,\n \"min\": 0.0,\n \"max\": 150.0,\n \"num_unique_values\": 8,\n \"samples\": [\n 0.46780083348511053,\n 0.43193933369362497,\n 150.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_11\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 52.87263831838093,\n \"min\": 0.0,\n \"max\": 150.0,\n \"num_unique_values\": 8,\n \"samples\": [\n 0.4954703248303675,\n 0.46851990432824897,\n 150.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_12\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 52.845471999528556,\n \"min\": 0.0,\n \"max\": 150.0,\n \"num_unique_values\": 8,\n \"samples\": [\n 0.5864853641252078,\n 0.6527904051241242,\n 150.0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}", + "type": "dataframe" + }, + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
mfcc_1mfcc_2mfcc_3mfcc_4mfcc_5mfcc_6mfcc_7mfcc_8mfcc_9mfcc_10mfcc_11mfcc_12
count150.000000150.000000150.000000150.000000150.000000150.000000150.000000150.000000150.000000150.000000150.000000150.000000
mean0.5000480.6041030.3816940.5370910.4100910.4378370.3333730.4856040.4729210.4678010.4954700.586485
std0.2236860.2497110.2245280.2261100.2485450.1829880.1604990.2378990.2691370.2097360.2609820.227832
min0.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.0000000.000000
25%0.3406810.3902170.2005320.3819220.1830740.2997110.2230140.3231650.2720540.2982850.2535150.541089
50%0.4985100.6717100.3585580.5684110.4240440.4222580.3238460.4275460.4711040.4319390.4685200.652790
75%0.6073390.7987290.5049070.7167620.6362710.5265240.4328720.6561830.7110910.6501890.7141010.722189
max1.0000001.0000001.0000001.0000001.0000001.0000001.0000001.0000001.0000001.0000001.0000001.000000
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "
\n", + "
\n" + ], + "text/plain": [ + " mfcc_1 mfcc_2 mfcc_3 mfcc_4 mfcc_5 mfcc_6 \\\n", + "count 150.000000 150.000000 150.000000 150.000000 150.000000 150.000000 \n", + "mean 0.500048 0.604103 0.381694 0.537091 0.410091 0.437837 \n", + "std 0.223686 0.249711 0.224528 0.226110 0.248545 0.182988 \n", + "min 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 \n", + "25% 0.340681 0.390217 0.200532 0.381922 0.183074 0.299711 \n", + "50% 0.498510 0.671710 0.358558 0.568411 0.424044 0.422258 \n", + "75% 0.607339 0.798729 0.504907 0.716762 0.636271 0.526524 \n", + "max 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 \n", + "\n", + " mfcc_7 mfcc_8 mfcc_9 mfcc_10 mfcc_11 mfcc_12 \n", + "count 150.000000 150.000000 150.000000 150.000000 150.000000 150.000000 \n", + "mean 0.333373 0.485604 0.472921 0.467801 0.495470 0.586485 \n", + "std 0.160499 0.237899 0.269137 0.209736 0.260982 0.227832 \n", + "min 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 \n", + "25% 0.223014 0.323165 0.272054 0.298285 0.253515 0.541089 \n", + "50% 0.323846 0.427546 0.471104 0.431939 0.468520 0.652790 \n", + "75% 0.432872 0.656183 0.711091 0.650189 0.714101 0.722189 \n", + "max 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 " + ] + }, + "execution_count": 57, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_scaled.describe()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6hB7WF5bLr5B" + }, + "source": [ + "Mengacak baris dalam dataframe" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true + }, + "id": "ZYzVYIwplBDw" + }, + "outputs": [], + "source": [ + "df_scaled = df_scaled.sample(frac=1).reset_index(drop=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "LljaqH4ykl7r" + }, + "source": [ + "Mengambil kolom yang bukan target, dan mengubahnya dalam bentuk array agar bisa diproses ke langkah selanjutnya" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true, + "base_uri": "https://localhost:8080/" + }, + "id": "Yn-bfLBbkl7t", + "outputId": "d53364a9-ed29-48ab-c047-1611c9e8357f" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[0.29121659, 0.84588868, 0.12388285, 0.71149628, 0.13523701,\n", + " 0.51554656, 0.29915299, 0.63665473, 0.74734425, 0.23148366,\n", + " 0.44838036, 0.72694892],\n", + " [0.83619592, 0.31438551, 0.58094409, 0.66021311, 0.09954104,\n", + " 0.84357682, 0.22297908, 0.14641018, 0.58019394, 0.27560393,\n", + " 0.09594089, 0.82759198],\n", + " [0.49518097, 0.66935134, 0.59251915, 0.74893544, 0.14104965,\n", + " 0.49621374, 0.21525878, 0.22361814, 0.62380065, 0.57862401,\n", + " 0.42216781, 0.8169304 ],\n", + " [0.52529014, 0.74516424, 0.39434066, 0.67422405, 0.16254567,\n", + " 0.4754561 , 0.41733271, 0.29990747, 0.43985614, 0.63028369,\n", + " 0.44933817, 0.57891455],\n", + " [0.47336725, 0.72736701, 0.29602544, 0.43782187, 0.10415111,\n", + " 0.51156742, 0.3924323 , 0.33880198, 0.45233126, 0.52496245,\n", + " 0.46761847, 0.63632228],\n", + " [0.46549479, 0.68830612, 0.46321952, 0.63378994, 0.13768277,\n", + " 0.5177148 , 0.34761035, 0.33241868, 0.47781942, 0.43611844,\n", + " 0.53457644, 0.85542425],\n", + " [0.58151584, 0.78039673, 0.26726235, 0.15763886, 0.64530875,\n", + " 0.2129583 , 0.32646394, 0.34507955, 0.31369449, 0.8072768 ,\n", + " 0.12466667, 0.75164049],\n", + " [0.90634916, 0.68215495, 0.57196028, 0.63612229, 0.14953645,\n", + " 0.59652429, 0.16449957, 0.62814211, 0.77226034, 0.66965948,\n", + " 0.32163293, 0.64889549],\n", + " [0.16593316, 0.67184425, 0.02639212, 0.74555434, 0.56651819,\n", + " 0.73011609, 0.21427763, 0.57631273, 0.69006371, 0.70191246,\n", + " 0.23066824, 0.65091788],\n", + " [0.45141925, 0.88116315, 0.32234545, 0.24041898, 0.66228758,\n", + " 0.24554089, 0.39900941, 0.45281556, 0.37851654, 0.65094633,\n", + " 0.1740261 , 0.72254218],\n", + " [0.83943984, 0.32146997, 0.59196573, 0.6836961 , 0.03665406,\n", + " 0.75820591, 0.29457384, 0.27667737, 0.61236251, 0.29902099,\n", + " 0.17876748, 0.88709761],\n", + " [0.48377523, 0.38527968, 0.12618517, 0.42833944, 0.50914349,\n", + " 0.41111474, 0.44888022, 0.74018461, 0.04999605, 0.37316789,\n", + " 0.8514738 , 0.26695911],\n", + " [0.85219505, 0.28867415, 0.6164554 , 0.69177126, 0. ,\n", + " 0.78519746, 0.36838812, 0.38211587, 0.62055586, 0.3013742 ,\n", + " 0.22989701, 0.88030156]])" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "X = df_scaled[['mfcc_1', 'mfcc_2', 'mfcc_3', 'mfcc_4', 'mfcc_5', 'mfcc_6', 'mfcc_7', 'mfcc_8', 'mfcc_9', 'mfcc_10', 'mfcc_11', 'mfcc_12']]\n", + "X = np.array(X)\n", + "X[:13]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Yy7-vajIkl70" + }, + "source": [ + "# One-Hot Encoding\n", + "\n", + "One-hot encoding adalah suatu metode yang digunakan untuk menggambarkan data kategorikal atau nilai kelas dalam bentuk vektor biner. Tujuannya adalah untuk memberikan representasi numerik yang sesuai dengan nilai kelas atau kategori tanpa memberikan arti atau urutan numerik yang salah." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true, + "base_uri": "https://localhost:8080/" + }, + "id": "GGGs7-w4kl72", + "outputId": "df1267a4-831d-4d6d-f6ca-22147dd9d309" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.10/dist-packages/sklearn/preprocessing/_encoders.py:868: FutureWarning: `sparse` was renamed to `sparse_output` in version 1.2 and will be removed in 1.4. `sparse_output` is ignored unless you leave `sparse` to its default value.\n", + " warnings.warn(\n" + ] + }, + { + "data": { + "text/plain": [ + "array([[0., 0., 0., 0., 1.],\n", + " [0., 0., 0., 0., 1.],\n", + " [0., 1., 0., 0., 0.],\n", + " [0., 1., 0., 0., 0.],\n", + " [0., 1., 0., 0., 0.]])" + ] + }, + "execution_count": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from sklearn.preprocessing import OneHotEncoder\n", + "one_hot_encoder = OneHotEncoder(sparse=False)\n", + "\n", + "Y = df_scaled.target\n", + "Y = one_hot_encoder.fit_transform(np.array(Y).reshape(-1, 1))\n", + "Y[:5]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "-KmMV_oSkl75" + }, + "source": [ + "# Menentukan Data Latih, Data Uji dan Data Validasi\n", + "\n", + "Dataframe yang awalnya memiliki 150 data, dipecah menjadi data latih dan data sisa dengan perbandingan 60:40, 70:30, 80:20. Data yang tersisa dipecah kembali menjadi data uji dan data validasi dengan perbandingan 60:40, 70:30, 80:20" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true + }, + "id": "ZYA1UShMkl77" + }, + "outputs": [], + "source": [ + "from sklearn.model_selection import train_test_split\n", + "X_train, X_temp, Y_train, Y_temp = train_test_split(X, Y, test_size=0.2, random_state=42)\n", + "X_val, X_test, Y_val, Y_test = train_test_split(X_temp, Y_temp, test_size=0.8, random_state=42)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true, + "base_uri": "https://localhost:8080/" + }, + "id": "Zv6QbhfO721L", + "outputId": "8c738641-4327-454a-eb39-3c9f14d538b6" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "120\n", + "24\n", + "6\n", + "120\n", + "24\n", + "6\n" + ] + } + ], + "source": [ + "print(len(X_train))\n", + "print(len(X_test))\n", + "print(len(X_val))\n", + "print(len(Y_train))\n", + "print(len(Y_test))\n", + "print(len(Y_val))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "xGflcOX8kl7-" + }, + "source": [ + "# Implementasi Backpropagation\n", + "\n", + "Fungsi utama `NeuralNetwork` akan melatih jaringan untuk jumlah epoch yang ditentukan. Pada awalnya, bobot jaringan akan diinisialisasi secara acak dengan `InitializeWeights`. Kemudian, di setiap epoch, bobot akan diperbarui dengan `Train` dan setiap 20 epoch nilai loss baik untuk set pelatihan maupun validasi akan dicetak oleh fungsi `Loss`. Di akhir pelatihan, akan dicetak grafik kurva pembelajaran model oleh fungsi ` PlotLearningCurve` Sebagai input, fungsi menerima yang berikut:\n", + "\n", + "* `X_train`, `Y_train`: Data pelatihan dan nilai target.\n", + "* `X_val`, `Y_val`: Data validasi dan nilai target\n", + "* `epochs`: Jumlah epoch. Defaultnya di 10.\n", + "* `node`: Daftar neuron pada setiap layers. Setiap bilangan bulat menunjukkan jumlah neuron di setiap lapisan. Panjang daftar ini menunjukkan jumlah lapisan. Artinya, setiap bilangan bulat dalam daftar ini sesuai dengan jumlah node di setiap lapisan.\n", + "* `lr`: Kecepatan pembelajaran algoritma pelatihan backpropagation. Defaultnya adalah 0,15." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true + }, + "id": "cMErf613kl7_" + }, + "outputs": [], + "source": [ + "def NeuralNetwork(X_train, Y_train, X_val=None, Y_val=None, epochs=10, nodes=[], lr=0.15):\n", + " hidden_layers = len(nodes) - 1\n", + " weights = InitializeWeights(nodes)\n", + "\n", + " train_losses, val_losses = [], []\n", + "\n", + " for epoch in range(1, epochs+1):\n", + " weights = Train(X_train, Y_train, lr, weights)\n", + "\n", + " if epoch % 20 == 0:\n", + " print(\"Epoch {}\".format(epoch))\n", + " train_loss = Loss(X_train, Y_train, weights)\n", + " train_losses.append(train_loss)\n", + " print(\"Training Loss: {}\".format(train_loss))\n", + "\n", + " if X_val is not None:\n", + " val_loss = Loss(X_val, Y_val, weights)\n", + " val_losses.append(val_loss)\n", + " print(\"Validation Loss: {}\".format(val_loss))\n", + "\n", + " PlotLearningCurve(train_losses, val_losses)\n", + " return weights\n", + "\n", + "def PlotLearningCurve(train_losses, val_losses):\n", + " epochs = range(20, len(train_losses)*20 + 1, 20)\n", + "\n", + " plt.plot(epochs, train_losses, label='Training Loss')\n", + " plt.plot(epochs, val_losses, label='Validation Loss')\n", + " plt.title('Learning Curve')\n", + " plt.xlabel('Epochs')\n", + " plt.ylabel('Loss')\n", + " plt.legend()\n", + " plt.show()\n", + "\n", + "def Loss(X, Y, weights):\n", + " loss = 0\n", + " for i in range(len(X)):\n", + " x, y = X[i], Y[i]\n", + " x = np.append(1, x) # Augment feature vector\n", + " activations = ForwardPropagation(x, weights, len(weights))\n", + " output = activations[-1].A1\n", + " loss += np.sum((y - output) ** 2) / 2\n", + "\n", + " return loss / len(X)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "x_hdYTW7lMWl" + }, + "source": [ + "# Inisialisasi Bobot\n", + "\n", + "Inisialisasi bobot adalah langkah awal di mana nilai-nilai bobot antara neuron-neuron dalam jaringan saraf diatur dengan nilai awal tertentu sebelum proses pelatihan dimulai. Inisialisasi bobot yang baik dapat mempengaruhi kinerja jaringan secara keseluruhan." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true + }, + "id": "hAd1Vn5skl8D" + }, + "outputs": [], + "source": [ + "def InitializeWeights(nodes):\n", + " \"\"\"Initialize weights with random values in [-1, 1] (including bias)\"\"\"\n", + " layers, weights = len(nodes), []\n", + "\n", + " for i in range(1, layers):\n", + " w = [[np.random.uniform(-1, 1) for k in range(nodes[i-1] + 1)]\n", + " for j in range(nodes[i])]\n", + " weights.append(np.matrix(w))\n", + "\n", + " return weights" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "wGG76tswlTU-" + }, + "source": [ + "# Fungsi Aktivasi (Sigmoid dan turunannya)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true + }, + "id": "Wt5SYx11iVda" + }, + "outputs": [], + "source": [ + "def Sigmoid(x):\n", + " return 1 / (1 + np.exp(-x))\n", + "\n", + "def SigmoidDerivative(x):\n", + " return np.multiply(x, 1-x)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "R07julrUkl8E" + }, + "source": [ + "# Feed Forward\n", + "\n", + "* Setiap lapisan menerima input dan menghitung output. Keluarannya dihitung dengan perkalian dot antara data input dan bobot pada hidden layer, lalu meneruskan perkalian dot ini melalui fungsi aktivasi (dalam hal ini, fungsi sigmoid).\n", + "* Output dari setiap lapisan adalah input pada lapisan berikutnya.\n", + "* Masukan input pertama adalah vektor fitur. Pada dataset Crop ada 7 fitur yang digunakan" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true + }, + "id": "Kwlht6NSkl8F" + }, + "outputs": [], + "source": [ + "def ForwardPropagation(x, weights, layers):\n", + " activations, layer_input = [x], x\n", + " for j in range(layers):\n", + " activation = Sigmoid(np.dot(layer_input, weights[j].T))\n", + " activations.append(activation)\n", + " layer_input = np.append(1, activation)\n", + "\n", + " return activations" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "xa-Usfp7kl8G" + }, + "source": [ + "# Backward Propagation:\n", + "\n", + "* Hitung error yang dihasilkan dari Feed Forward\n", + "* Hitung error per layer dengan cara:\n", + " * Menghitung Delta menggunakan turunan fungsi Sigmoid yang dikalikan dengan error yang telah dihitung\n", + " * Update bobot pada layer sekarang dengan mengkalikan delta dengan input dari layer sebelumnya (hasil dari fungsi aktivasi) dan learning rate\n", + " * Update error pada layer yang sekarang dengan delta dan bobot yang baru." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true + }, + "id": "ZuhN8mJAkl8H" + }, + "outputs": [], + "source": [ + "def BackPropagation(y, activations, weights, layers):\n", + " outputFinal = activations[-1]\n", + " error = np.matrix(y - outputFinal) # Error at output\n", + "\n", + " for j in range(layers, 0, -1):\n", + " currActivation = activations[j]\n", + "\n", + " if(j > 1):\n", + " # Augment previous activation\n", + " prevActivation = np.append(1, activations[j-1])\n", + " else:\n", + " # First hidden layer, prevActivation is input (without bias)\n", + " prevActivation = activations[0]\n", + "\n", + " delta = np.multiply(error, SigmoidDerivative(currActivation))\n", + " weights[j-1] += lr * np.multiply(delta.T, prevActivation)\n", + "\n", + " w = np.delete(weights[j-1], [0], axis=1)\n", + " error = np.dot(delta, w) # Calculate error for current layer\n", + "\n", + " return weights" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "VJiiblGbn1MH" + }, + "source": [ + "# Fungsi Pelatihan, Prediksi dan Perhitungan Akurasi" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true + }, + "id": "1WqMoGM9kl8J" + }, + "outputs": [], + "source": [ + "def Train(X, Y, lr, weights):\n", + " layers = len(weights)\n", + " for i in range(len(X)):\n", + " x, y = X[i], Y[i]\n", + " x = np.matrix(np.append(1, x)) # Augment feature vector\n", + "\n", + " activations = ForwardPropagation(x, weights, layers)\n", + " weights = BackPropagation(y, activations, weights, layers)\n", + "\n", + " return weights" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true + }, + "id": "Zgg5m9xMkl8O" + }, + "outputs": [], + "source": [ + "def Predict(item, weights):\n", + " layers = len(weights)\n", + " item = np.append(1, item) # Augment feature vector\n", + "\n", + " ##_Forward Propagation_##\n", + " activations = ForwardPropagation(item, weights, layers)\n", + "\n", + " outputFinal = activations[-1].A1\n", + " index = np.argmax(outputFinal)\n", + "\n", + " # Initialize prediction vector to zeros\n", + " y = [0 for i in range(len(outputFinal))]\n", + " y[index] = 1 # Set guessed class to 1\n", + "\n", + " return y # Return prediction vector" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true + }, + "id": "2r-cFvFmkl8R" + }, + "outputs": [], + "source": [ + "def Accuracy(X, Y, weights):\n", + " \"\"\"Run set through network, find overall accuracy\"\"\"\n", + " correct = 0\n", + "\n", + " for i in range(len(X)):\n", + " x, y = X[i], np.array(Y[i]) # Convert y to numpy array\n", + " guess = Predict(x, weights)\n", + "\n", + " # Find the index with the maximum probability\n", + " predicted_class = np.argmax(guess)\n", + " true_class = np.argmax(y)\n", + "\n", + " if predicted_class == true_class:\n", + " # Guessed correctly\n", + " correct += 1\n", + "\n", + " return correct / len(X)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "EJzI3NMkU3z7" + }, + "source": [ + "# Proses Pelatihan" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true, + "base_uri": "https://localhost:8080/", + "height": 732 + }, + "id": "EcjPREEjkl8X", + "outputId": "89111fbe-857d-43d9-f9d1-dee66ec6beae" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 20\n", + "Training Loss: 0.2743344314418524\n", + "Validation Loss: 0.2107634927801524\n", + "Epoch 40\n", + "Training Loss: 0.10002890201240483\n", + "Validation Loss: 0.057043416301975756\n", + "Epoch 60\n", + "Training Loss: 0.05027575749186288\n", + "Validation Loss: 0.024504097397193978\n", + "Epoch 80\n", + "Training Loss: 0.032250441547394454\n", + "Validation Loss: 0.01798263111575391\n", + "Epoch 100\n", + "Training Loss: 0.022498480908666536\n", + "Validation Loss: 0.015101545170579982\n" + ] + }, + { + "data": { + "image/png": "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o0t0KT169GDChAl89tlnRQpAYWFh/Pnnnxesz+9EFVXPnj3529/+5hgG27VrF6NHj3bapm7duqSlpV32dyUiugxeRC7BarXSu3dv/vOf/7Bt27YLPi94eXl+56Vgt+PXX39lzZo1pV9oMXTp0gVPT0+mTZvmtL7gpeSX0q5dO7p168bHH3/M/PnzL/g8KyuLUaNGOd7XrVuXP/74w+lntXnzZlavXl2sukNDQ4mPj2fOnDnMmjULb29vevbs6bRNnz59WLNmDYsWLbrg+0lJSeTk5BTrmCKuTB0gEeGTTz5h4cKFF6x/4oknmDhxIsuXLyc2NpaHH36YJk2acOrUKTZs2MDSpUs5deoUALfffjtff/01vXr14rbbbmPfvn1Mnz6dJk2akJaWVtandFHh4eE88cQTvPnmm9xxxx1069aNzZs38/3331OlShWn7tXFfPrpp3Tt2pW77rqLHj160KVLFwICAti9ezezZs0iISHBcS+gBx54gLfeeov4+HgefPBBjh8/zvTp02natGmRJnUX1LdvX/7v//6P999/n/j4+AvmID311FMsWLCA22+/nUGDBtG6dWvOnDnD1q1b+eqrr9i/f7/TkJmIO1MAEpELuiH5Bg0aRI0aNVi7di0vv/wyX3/9Ne+//z6VK1emadOmTvflGTRoEImJiXzwwQcsWrSIJk2a8NlnnzF37lxWrFhRRmdSNJMmTcLf35+PPvqIpUuX0q5dOxYvXswNN9yAr6/vZb9ftWpVfv75Z95//31mz57NmDFjyMrKolatWtxxxx088cQTjm0bN27Mp59+ytixYxk5ciRNmjTh3//+N1988UWxfy533HEHfn5+pKamOl39lc/f35+VK1fy2muvMXfuXD799FOCg4Np0KABL730EiEhIcU6nogrsxglNTNQRKQCS0pKIiwsjFdeeaXEHmUhIuWX5gCJiNs5e/bsBevy75Jc2GMrRMT1aAhMRNzO7NmzmTlzJrfeeiuBgYGsWrWKL7/8kq5du9KhQwezyxORMqAAJCJup3nz5nh6evL666+TkpLimBj9yiuvmF2aiJQRzQESERERt6M5QCIiIuJ2FIBERETE7WgOUCFsNhtHjx4lKCioSDdFExEREfMZhkFqaipRUVF4eFy6x6MAVIijR48SHR1tdhkiIiJyBQ4dOkSNGjUuuY0CUCGCgoIA+w8w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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "f = len(X[0]) # Number of features\n", + "o = len(Y[0]) # Number of outputs / classes\n", + "\n", + "layers = [f, 8, o] # Number of nodes in layers\n", + "lr, epochs = 0.15, 100\n", + "\n", + "weights = NeuralNetwork(X_train, Y_train, X_val, Y_val, epochs=epochs, nodes=layers, lr=lr);" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true + }, + "id": "EuR5PMOvU_0r", + "outputId": "970d5ea5-f7ee-4887-e37d-40e5562f7dbd" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Testing Accuracy in Train Data: 0.9916666666666667\n" + ] + } + ], + "source": [ + "print(\"Testing Accuracy in Train Data: {}\".format(Accuracy(X_train, Y_train, weights)))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true, + "base_uri": "https://localhost:8080/", + "height": 263 + }, + "id": "VNgszmVDkl8a", + "outputId": "5fef1a6e-6357-4832-9489-65a5e29b3ae6" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Testing Accuracy in Testing Data: 0.9583333333333334\n" + ] + } + ], + "source": [ + "print(\"Testing Accuracy in Testing Data: {}\".format(Accuracy(X_test, Y_test, weights)))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "oNoUt45XVEH4" + }, + "source": [ + "# Laporan Klasifikasi" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true + }, + "id": "Og9UUMobR7H3" + }, + "outputs": [], + "source": [ + "from sklearn.metrics import classification_report, confusion_matrix\n", + "target_names = 'Hilmi', 'Tanti', 'Vasyilla', 'Yudha', 'Random'" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true + }, + "id": "jGmuimic_FqL" + }, + "outputs": [], + "source": [ + "predictions = [Predict(x, weights) for x in X_test]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true, + "base_uri": "https://localhost:8080/" + }, + "id": "F-FLPqEzUuxH", + "outputId": "464c4df5-9e1c-429a-8653-06e8fadc325b" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " precision recall f1-score support\n", + "\n", + " Hilmi 1.00 0.75 0.86 4\n", + " Tanti 0.67 1.00 0.80 2\n", + " Vasyilla 1.00 1.00 1.00 4\n", + " Yudha 1.00 1.00 1.00 6\n", + " Random 1.00 1.00 1.00 8\n", + "\n", + " micro avg 0.96 0.96 0.96 24\n", + " macro avg 0.93 0.95 0.93 24\n", + "weighted avg 0.97 0.96 0.96 24\n", + " samples avg 0.96 0.96 0.96 24\n", + "\n" + ] + } + ], + "source": [ + "print(classification_report(Y_test, predictions, target_names=target_names))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true, + "base_uri": "https://localhost:8080/" + }, + "id": "cUbJcTvhso7g", + "outputId": "837a981b-5e65-4980-d840-08f7d61601e3" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Total True Positives (TP): 23\n", + "Total True Negatives (TN): 95\n", + "Total False Positives (FP): 1\n", + "Total False Negatives (FN): 1\n" + ] + } + ], + "source": [ + "from sklearn.metrics import confusion_matrix\n", + "\n", + "# Menghitung confusion matrix\n", + "cm = confusion_matrix(Y_test.argmax(axis=1), np.array(predictions).argmax(axis=1))\n", + "\n", + "# Hitung True Positives (TP) untuk setiap kelas\n", + "TP = np.diag(cm)\n", + "\n", + "TN = []\n", + "FP = []\n", + "FN = []\n", + "for i in range(len(cm)):\n", + " temp = np.delete(cm, i, 0) # hapus baris ke-i\n", + " temp = np.delete(temp, i, 1) # hapus kolom ke-i\n", + " TN.append(np.sum(np.delete(np.delete(cm, i, 0), i, 1)))\n", + " FP.append(np.sum(cm[:, i]) - cm[i, i])\n", + " FN.append(np.sum(cm[i, :]) - cm[i, i])\n", + "\n", + "# Hitung total TP, TN, FP, FN\n", + "total_TP = np.sum(TP)\n", + "total_TN = np.sum(TN)\n", + "total_FP = np.sum(FP)\n", + "total_FN = np.sum(FN)\n", + "\n", + "# Cetak total\n", + "print(f\"Total True Positives (TP): {total_TP}\")\n", + "print(f\"Total True Negatives (TN): {total_TN}\")\n", + "print(f\"Total False Positives (FP): {total_FP}\")\n", + "print(f\"Total False Negatives (FN): {total_FN}\")\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "FsiT6R4wVby-" + }, + "source": [ + "# Kesimpulan\n", + "\n", + "Pembuatan *artificial neural network* menggunakan metode Backpropagation menggunakan dataset Crop Recommendation memerlukan beberapa langkah, seperti Data Understanding, Data Preparation, Implementasi Neural Network menggunakan Feedforward dan Backpropagation, serta Training dengan menggunakan 150 data.\n", + "\n", + "Hasil dari training menunjukkan bahwa tidak adanya underfitting maupun overfitting dengan kurva pembelajaran yang normal. Akurasi prediksi data mencapai 1.0 dengan menggunakan data test sebanyak 48 data" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "MICH6eE4rzbM" + }, + "source": [ + "# adada" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true + }, + "id": "k1lcyhnJ5-ZJ" + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "import h5py" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true + }, + "id": "qApq_Oqh5Uf_" + }, + "outputs": [], + "source": [ + "# Load the model\n", + "def load_model(filepath):\n", + " weights = []\n", + " with h5py.File(filepath, 'r') as f:\n", + " for i in range(len(f.keys())):\n", + " weights.append(f['weight_{}'.format(i)][:])\n", + " return weights" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true + }, + "id": "AV50Ldtv5cit" + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.preprocessing import StandardScaler, LabelEncoder\n", + "from keras.models import Sequential\n", + "from keras.layers import Dense\n", + "from keras.optimizers import Adam\n", + "from keras.utils import to_categorical\n", + "import librosa\n", + "import librosa.display\n", + "import os\n", + "from scipy.fftpack import dct\n", + "from keras.models import load_model\n", + "import matplotlib.pyplot as plt\n", + "from keras.callbacks import History" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true + }, + "id": "eQNJ2Djc5cx4" + }, + "outputs": [], + "source": [ + "# Fungsi pre-emphasis\n", + "def pre_emphasis(signal, coefficient=0.97):\n", + " return np.append(signal[0], signal[1:] - coefficient * signal[:-1])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true + }, + "id": "k_ExiPrd5geI" + }, + "outputs": [], + "source": [ + "# Fungsi framing\n", + "def framing(signal, sample_rate, frame_length=0.025, frame_step=0.010):\n", + " nsamples_signal = len(signal)\n", + " nsamples_frame = int(round(frame_length * sample_rate))\n", + " nsamples_stride = int(round(frame_step * sample_rate))\n", + " n_frames = int(np.ceil((nsamples_signal - nsamples_frame) / nsamples_stride) + 1)\n", + " nsamples_padding = ((n_frames - 1) * nsamples_stride + nsamples_frame) - nsamples_signal\n", + " z = np.zeros(nsamples_padding)\n", + " signal = np.append(signal, z)\n", + " frames = np.empty((n_frames, nsamples_frame))\n", + " for i in range(n_frames):\n", + " left = i * nsamples_stride\n", + " right = left + nsamples_frame\n", + " frame = signal[left:right]\n", + " frames[i] = frame\n", + " return frames" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true + }, + "id": "vH9dRugm5h1v" + }, + "outputs": [], + "source": [ + "# Fungsi untuk mengekstrak fitur MFCC dari file audio\n", + "def extract_mfcc(audio_file, sr=44100, frame_length=0.025, frame_step=0.010, nfilt=40, num_ceps=12):\n", + " y, _ = librosa.load(audio_file, sr=sr)\n", + "\n", + " # Normalize\n", + " y_norm = librosa.util.normalize(y)\n", + "\n", + " # Pre-emphasis\n", + " y_pre_emphasis = pre_emphasis(y_norm)\n", + "\n", + " # Framing\n", + " frames = framing(y_pre_emphasis, sr, frame_length, frame_step)\n", + "\n", + " # Hamming window\n", + " frames *= np.hanning(len(frames[0]))\n", + "\n", + " # FFT\n", + " NFFT = 512\n", + " mag_frames = np.absolute(np.fft.rfft(frames, NFFT))\n", + " pow_frames = ((1.0 / NFFT) * ((mag_frames) ** 2))\n", + "\n", + " # Mel filter bank\n", + " low_freq_mel = 0\n", + " high_freq_mel = (2595 * np.log10(1 + (sr / 2) / 700))\n", + " mel_points = np.linspace(low_freq_mel, high_freq_mel, nfilt + 2)\n", + " hz_points = (700 * (10**(mel_points / 2595) - 1))\n", + " bin = np.floor((NFFT + 1) * hz_points / sr)\n", + "\n", + " fbank = np.zeros((nfilt, int(np.floor(NFFT / 2 + 1))))\n", + " for m in range(1, nfilt + 1):\n", + " f_m_minus = int(bin[m - 1])\n", + " f_m = int(bin[m])\n", + " f_m_plus = int(bin[m + 1])\n", + " for k in range(f_m_minus, f_m):\n", + " fbank[m - 1, k] = (k - bin[m - 1]) / (bin[m] - bin[m - 1])\n", + " for k in range(f_m, f_m_plus):\n", + " fbank[m - 1, k] = (bin[m + 1] - k) / (bin[m + 1] - bin[m])\n", + "\n", + " filter_banks = np.dot(pow_frames, fbank.T)\n", + " filter_banks = np.where(filter_banks == 0, np.finfo(float).eps, filter_banks)\n", + " filter_banks = 20 * np.log10(filter_banks)\n", + "\n", + " # Discrete Cosine Transform (DCT) for MFCC\n", + " mfcc = dct(filter_banks, type=2, axis=1, norm='ortho')[:, 1:(num_ceps + 1)]\n", + "\n", + " return np.mean(mfcc, axis=0)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true + }, + "id": "HAqWfz1D5k3i" + }, + "outputs": [], + "source": [ + "def Predict(item, weights, target_names):\n", + " layers = len(weights)\n", + " item = np.append(1, item) # Augment feature vector\n", + "\n", + " activations = ForwardPropagation(item, weights, layers)\n", + "\n", + " outputFinal = activations[-1].flatten()\n", + " index = np.argmax(outputFinal)\n", + "\n", + " predicted_class = target_names[index]\n", + " return predicted_class\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true + }, + "id": "AOWrW0tp5jWd" + }, + "outputs": [], + "source": [ + "# Read the WAV file and extract MFCC features\n", + "wav_file = \"/content/drive/MyDrive/Skripsi/Test/label-2-depan-mati_siVeWW7T.wav\"\n", + "mfcc_features = extract_mfcc(wav_file)\n", + "testing = mfcc_features.reshape(1, -1)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true, + "base_uri": "https://localhost:8080/", + "height": 193 + }, + "id": "Glg25YVv5uHZ", + "outputId": "5713a048-c2df-436b-80a0-f9486fff52cc" + }, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'model_user' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;31m# Predict the class of the sound sample\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m \u001b[0mprediction\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mPredict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtesting\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmodel_user\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtarget_names\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 6\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\"Predicted class: {prediction}\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mNameError\u001b[0m: name 'model_user' is not defined" + ] + } + ], + "source": [ + "# Define the target names\n", + "target_names = ['Hilmi', 'Tanti', 'Vasyilla', 'Yudha', 'Random']\n", + "\n", + "# Predict the class of the sound sample\n", + "prediction = Predict(testing, model_user, target_names)\n", + "print(f\"Predicted class: {prediction}\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true + }, + "id": "7JaOTyLH5uUk" + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kaggle": { + "accelerator": "none", + "dataSources": [ + { + "datasetId": 1046158, + "sourceId": 1760012, + "sourceType": "datasetVersion" + } + ], + "dockerImageVersionId": 30635, + "isGpuEnabled": false, + "isInternetEnabled": true, + "language": "python", + "sourceType": "notebook" + }, + "kernelspec": { + "display_name": "Python 3", + "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.6.6" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file diff --git a/Klasifikasi,_Pencarian_kernel,_dan_Confusion_Matrix_.ipynb b/Klasifikasi,_Pencarian_kernel,_dan_Confusion_Matrix_.ipynb new file mode 100644 index 0000000..fb6db36 --- /dev/null +++ b/Klasifikasi,_Pencarian_kernel,_dan_Confusion_Matrix_.ipynb @@ -0,0 +1,3405 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "Z8R69UJ6cvTF" + }, + "source": [ + "# **INPUT LIBRARY**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "fni2ZayEHNBL" + }, + "outputs": [], + "source": [ + "import librosa\n", + "import librosa.display\n", + "import pandas as pd\n", + "import os\n", + "import numpy as np\n", + "from scipy.fftpack import dct\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.multiclass import OneVsOneClassifier, OneVsRestClassifier\n", + "from sklearn.svm import SVC\n", + "from sklearn.model_selection import GridSearchCV\n", + "from sklearn.svm import LinearSVC\n", + "from sklearn import metrics\n", + "from joblib import dump, load\n", + "from sklearn.preprocessing import StandardScaler, LabelEncoder\n", + "from sklearn.metrics import accuracy_score, precision_score, recall_score, classification_report, confusion_matrix, f1_score\n", + "# from google.colab import drive\n", + "import ctypes\n", + "from ctypes import util\n", + "import matplotlib.pyplot as plt\n", + "from openpyxl import Workbook\n", + "from openpyxl.utils.dataframe import dataframe_to_rows\n", + "from openpyxl.styles import Border, Side" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "QyDOnMcJgZ48" + }, + "source": [ + "# **PROSES MFCC**" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ebw2dT3acNyx" + }, + "source": [ + "**Fungis Pre-Emphasis**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "SigcZQ-5Hdz_" + }, + "outputs": [], + "source": [ + "# Fungsi pre-emphasis\n", + "def pre_emphasis(signal, coefficient=0.97):\n", + " return np.append(signal[0], signal[1:] - coefficient * signal[:-1])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "vWao7svucTno" + }, + "source": [ + "**Fungsi Frame-Blocking**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "PhqB8zmrHhQw" + }, + "outputs": [], + "source": [ + "# Fungsi framing\n", + "def framing(signal, sample_rate, frame_length=0.025,\n", + " frame_step=0.010):\n", + " nsamples_signal = len(signal)\n", + " nsamples_frame = int(round(frame_length * sample_rate))\n", + " nsamples_stride = int(round(frame_step * sample_rate))\n", + " n_frames = int(np.ceil((nsamples_signal - nsamples_frame) / nsamples_stride) + 1)\n", + " nsamples_padding = ((n_frames - 1) * nsamples_stride + nsamples_frame) - nsamples_signal\n", + " z = np.zeros(nsamples_padding)\n", + " signal = np.append(signal, z)\n", + " frames = np.empty((n_frames, nsamples_frame))\n", + " for i in range(n_frames):\n", + " left = i * nsamples_stride\n", + " right = left + nsamples_frame\n", + " frame = signal[left:right]\n", + " frames[i] = frame\n", + " return frames" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "TSzNwvIdcaY8" + }, + "source": [ + "**Fungsi MFCC**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "urkPLMLFHklQ" + }, + "outputs": [], + "source": [ + "# Fungsi untuk mengekstrak fitur MFCC dari file audio\n", + "def extract_mfcc(audio_file, sr=44100, frame_length=0.025, frame_step=0.010, nfilt=40, num_ceps=12):\n", + " y, _ = librosa.load(audio_file, sr=sr)\n", + "\n", + " # Normalize\n", + " y_norm = librosa.util.normalize(y)\n", + "\n", + " # Pre-emphasis\n", + " y_pre_emphasis = pre_emphasis(y_norm)\n", + "\n", + " # Framing\n", + " frames = framing(y_pre_emphasis, sr, frame_length, frame_step)\n", + "\n", + " # Hamming window\n", + " frames *= np.hanning(len(frames[0]))\n", + "\n", + " # FFT\n", + " NFFT = 512\n", + " mag_frames = np.absolute(np.fft.rfft(frames, NFFT))\n", + " pow_frames = ((1.0 / NFFT) * ((mag_frames) ** 2))\n", + "\n", + " # Mel filter bank\n", + " low_freq_mel = 0\n", + " high_freq_mel = (2595 * np.log10(1 + (sr / 2) / 700))\n", + " mel_points = np.linspace(low_freq_mel, high_freq_mel, nfilt + 2)\n", + " hz_points = (700 * (10**(mel_points / 2595) - 1))\n", + " bin = np.floor((NFFT + 1) * hz_points / sr)\n", + "\n", + " fbank = np.zeros((nfilt, int(np.floor(NFFT / 2 + 1))))\n", + " for m in range(1, nfilt + 1):\n", + " f_m_minus = int(bin[m - 1])\n", + " f_m = int(bin[m])\n", + " f_m_plus = int(bin[m + 1])\n", + " for k in range(f_m_minus, f_m):\n", + " fbank[m - 1, k] = (k - bin[m - 1]) / (bin[m] - bin[m - 1])\n", + " for k in range(f_m, f_m_plus):\n", + " fbank[m - 1, k] = (bin[m + 1] - k) / (bin[m + 1] - bin[m])\n", + "\n", + " filter_banks = np.dot(pow_frames, fbank.T)\n", + " filter_banks = np.where(filter_banks == 0, np.finfo(float).eps, filter_banks)\n", + " filter_banks = 20 * np.log10(filter_banks)\n", + "\n", + " # Discrete Cosine Transform (DCT) for MFCC\n", + " mfcc = dct(filter_banks, type=2, axis=1, norm='ortho')[:, 1:(num_ceps + 1)]\n", + "\n", + " return np.mean(mfcc, axis=0)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "17rFJaT_gGwo" + }, + "source": [ + "**Dataset**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "CKcTFlrEHq0T" + }, + "outputs": [], + "source": [ + "# Directory tempat file audio Anda disimpan\n", + "dataset = '/content/drive/MyDrive/REVISI SKRIPSI/Dataset Pertama'" + ] + }, + { + "cell_type": "code", + "source": [ + "dataset_kedua = '/content/drive/MyDrive/REVISI SKRIPSI/Dataset Kedua'" + ], + "metadata": { + "id": "rXuoZlCgI73-" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "urbp24shuk3s" + }, + "source": [ + "**Inisialisasi Dataset**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "M5kcsHfqHvL2" + }, + "outputs": [], + "source": [ + "data = []\n", + "\n", + "# Loop melalui setiap direktori label\n", + "for label_folder in os.listdir(dataset):\n", + " label_dir = os.path.join(dataset, label_folder)\n", + " if os.path.isdir(label_dir):\n", + " # Loop melalui file-file audio di dalam setiap label\n", + " for file in os.listdir(label_dir):\n", + " if file.endswith(\".wav\"):\n", + " audio_file = os.path.join(label_dir, file)\n", + " mfcc_features = extract_mfcc(audio_file)\n", + " # Menambahkan ID ke data\n", + " features_list = list(mfcc_features) + [label_folder]\n", + " data.append(features_list)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "GKuXVqAyXGa1" + }, + "outputs": [], + "source": [ + "# Inisialisasi data\n", + "data = []\n", + "\n", + "# Loop melalui setiap direktori ID\n", + "for id_folder in os.listdir(dataset):\n", + " id_dir = os.path.join(dataset, id_folder)\n", + " if os.path.isdir(id_dir):\n", + " # Loop melalui setiap label di dalam direktori ID\n", + " for label in os.listdir(id_dir):\n", + " label_dir = os.path.join(id_dir, label)\n", + " if os.path.isdir(label_dir):\n", + " # Loop melalui file-file audio di dalam setiap label\n", + " for file in os.listdir(label_dir):\n", + " if file.endswith(\".wav\"):\n", + " audio_file = os.path.join(label_dir, file)\n", + " mfcc_features = extract_mfcc(audio_file)\n", + " # Menambahkan ID ke data\n", + " data.append(list(mfcc_features) + [id_folder] + [label])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "FVsE69BGgSZi" + }, + "source": [ + "**Menyimpan Hasil MFCC ke CSV**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "RYqBjtOxXXon" + }, + "outputs": [], + "source": [ + "# Mengubah data ke dalam DataFrame\n", + "df = pd.DataFrame(data, columns=[f'mfcc_{i}' for i in range(1, 13)] + ['id', 'label'])\n", + "\n", + "# Menggabungkan kolom ID dan label menjadi satu kolom id_label\n", + "df['id_label'] = df['id'] + '_' + df['label']\n", + "\n", + "# Menyimpan DataFrame yang sudah diubah ke dalam file CSV\n", + "df.to_csv('/content/drive/MyDrive/Skripsi/mfcc/backup_4_label.csv', index=False)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Lgn-kmfFCajq" + }, + "outputs": [], + "source": [ + " # Mengubah data ke dalam DataFrame\n", + "df = pd.DataFrame(data, columns=[f'mfcc_{i}' for i in range(1, 13)] + ['target'])\n", + "\n", + "# Menyimpan DataFrame yang sudah diubah ke dalam file CSV\n", + "df.to_csv('/content/drive/MyDrive/REVISI SKRIPSI/dataset_pertama.csv', index=False)" + ] + }, + { + "cell_type": "code", + "source": [ + "# Menyimpan DataFrame ke dalam file Excel\n", + "wb = Workbook()\n", + "ws = wb.active\n", + "\n", + "# Menulis data ke dalam worksheet\n", + "for r in dataframe_to_rows(df, index=True, header=True):\n", + " ws.append(r)\n", + "\n", + "# Menambahkan border di antara setiap sel\n", + "for row in ws.iter_rows():\n", + " for cell in row:\n", + " cell.border = Border(left=Side(style='thin'),\n", + " right=Side(style='thin'),\n", + " top=Side(style='thin'),\n", + " bottom=Side(style='thin'))\n", + "\n", + "# Menyimpan file Excel\n", + "wb.save('/content/drive/MyDrive/Persiapan Sidang/inisialisasi data label.xlsx')" + ], + "metadata": { + "id": "a2W2-nG4rZOu" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "C4VSfME2v0F9" + }, + "source": [ + "# **KLASIFIKASI SVM**" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "9MO1GqtaCxX_" + }, + "source": [ + "## **A. Split Data**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "M9FGECAbxYbg" + }, + "outputs": [], + "source": [ + "read_csv = pd.read_csv('/content/drive/MyDrive/REVISI SKRIPSI/dataset_pertama.csv')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 443 + }, + "id": "yVh_JnDdozez", + "outputId": "850babf2-eda9-4f7b-cbcf-9c1c4d81ffe8" + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " mfcc_1 mfcc_2 mfcc_3 mfcc_4 mfcc_5 mfcc_6 \\\n", + "0 134.007563 -10.597640 7.266465 -3.754714 -13.808333 2.155736 \n", + "1 50.750191 -5.598916 32.949004 -22.501260 14.779131 -19.538301 \n", + "2 122.293842 -12.814458 12.493625 -10.989077 -15.963840 1.330859 \n", + "3 126.803849 -0.053941 8.270297 -6.800313 -13.392560 -0.899367 \n", + "4 10.468602 9.117828 -8.683499 -1.466168 24.753077 -21.531051 \n", + ".. ... ... ... ... ... ... \n", + "145 36.427943 25.707284 8.212668 10.450583 -5.248485 -11.510404 \n", + "146 43.954271 6.456048 2.131374 -9.353882 -17.369689 -7.557169 \n", + "147 55.782108 26.974924 -5.329280 -1.423440 -9.777956 -8.758294 \n", + "148 26.584968 -8.043035 -4.178721 -0.592769 -15.964644 -9.010896 \n", + "149 19.589333 9.885163 -20.071891 -13.235444 -15.691194 -10.111671 \n", + "\n", + " mfcc_7 mfcc_8 mfcc_9 mfcc_10 mfcc_11 mfcc_12 target \n", + "0 -12.878377 -4.975601 6.321278 -2.777375 -6.506576 -1.876924 Hilmi \n", + "1 7.961897 -11.957439 7.594936 -14.929685 5.006317 -1.295943 Hilmi \n", + "2 -17.650124 -3.014083 3.925209 -6.664020 -1.170681 -0.027291 Hilmi \n", + "3 -14.874580 0.227556 7.045879 -7.464138 -5.668817 -0.148281 Hilmi \n", + "4 2.124193 -6.581121 11.937312 -18.942954 5.763798 0.569468 Hilmi \n", + ".. ... ... ... ... ... ... ... \n", + "145 -6.744978 -9.246621 -3.982937 -10.705474 -6.795224 -6.532252 Random \n", + "146 -15.326618 -16.521912 1.466365 -6.723767 1.931086 2.092220 Random \n", + "147 -1.948076 -6.980490 -0.893085 -4.223947 -4.055362 -5.809257 Random \n", + "148 -4.953900 -11.460907 -0.344327 -4.228080 -1.677582 -2.752977 Random \n", + "149 2.390462 -5.974159 -0.621773 -2.311574 4.188963 -0.232814 Random \n", + "\n", + "[150 rows x 13 columns]" + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
mfcc_1mfcc_2mfcc_3mfcc_4mfcc_5mfcc_6mfcc_7mfcc_8mfcc_9mfcc_10mfcc_11mfcc_12target
0134.007563-10.5976407.266465-3.754714-13.8083332.155736-12.878377-4.9756016.321278-2.777375-6.506576-1.876924Hilmi
150.750191-5.59891632.949004-22.50126014.779131-19.5383017.961897-11.9574397.594936-14.9296855.006317-1.295943Hilmi
2122.293842-12.81445812.493625-10.989077-15.9638401.330859-17.650124-3.0140833.925209-6.664020-1.170681-0.027291Hilmi
3126.803849-0.0539418.270297-6.800313-13.392560-0.899367-14.8745800.2275567.045879-7.464138-5.668817-0.148281Hilmi
410.4686029.117828-8.683499-1.46616824.753077-21.5310512.124193-6.58112111.937312-18.9429545.7637980.569468Hilmi
..........................................
14536.42794325.7072848.21266810.450583-5.248485-11.510404-6.744978-9.246621-3.982937-10.705474-6.795224-6.532252Random
14643.9542716.4560482.131374-9.353882-17.369689-7.557169-15.326618-16.5219121.466365-6.7237671.9310862.092220Random
14755.78210826.974924-5.329280-1.423440-9.777956-8.758294-1.948076-6.980490-0.893085-4.223947-4.055362-5.809257Random
14826.584968-8.043035-4.178721-0.592769-15.964644-9.010896-4.953900-11.460907-0.344327-4.228080-1.677582-2.752977Random
14919.5893339.885163-20.071891-13.235444-15.691194-10.1116712.390462-5.974159-0.621773-2.3115744.188963-0.232814Random
\n", + "

150 rows × 13 columns

\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "variable_name": "read_csv", + "summary": "{\n \"name\": \"read_csv\",\n \"rows\": 150,\n \"fields\": [\n {\n \"column\": \"mfcc_1\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 36.276014922615474,\n \"min\": -28.16607541028273,\n \"max\": 134.00756340540602,\n \"num_unique_values\": 148,\n \"samples\": [\n 36.08258057714812,\n 58.86680953129214,\n -3.523882247385767\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_2\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 25.55141187112381,\n \"min\": -68.12144268080341,\n \"max\": 34.202640399438096,\n \"num_unique_values\": 148,\n \"samples\": [\n 23.939076705384803,\n 21.946738597467206,\n 13.0356526884146\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_3\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 16.607602505135112,\n \"min\": -35.34655184816533,\n \"max\": 38.62011424617032,\n \"num_unique_values\": 148,\n \"samples\": [\n 13.91699151797878,\n -8.389756054170379,\n -1.8076506613349623\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_4\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 12.248647405224922,\n \"min\": -37.65939195051028,\n \"max\": 16.511813215011305,\n \"num_unique_values\": 148,\n \"samples\": [\n 11.817977912406883,\n -25.196198956208004,\n -1.877552087075581\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_5\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 14.67376981879269,\n \"min\": -25.168957020117585,\n \"max\": 33.86979700528147,\n \"num_unique_values\": 148,\n \"samples\": [\n -9.159842263653752,\n 12.502871968905891,\n -5.269233643564018\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_6\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 10.967088795363342,\n \"min\": -37.11021563514957,\n \"max\": 22.823063964431544,\n \"num_unique_values\": 148,\n \"samples\": [\n -11.37754250437596,\n -21.623600445733462,\n -7.599002274584097\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_7\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 7.156816371373767,\n \"min\": -18.00557350489408,\n \"max\": 26.58538472976201,\n \"num_unique_values\": 148,\n \"samples\": [\n -6.540024131817128,\n -2.978011309692604,\n -3.908204318319117\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_8\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 7.3954280048501255,\n \"min\": -19.42019336425255,\n \"max\": 11.666184384702827,\n \"num_unique_values\": 148,\n \"samples\": [\n -8.77716113407432,\n -9.47772235720944,\n -6.146912684052977\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_9\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 8.925604847630165,\n \"min\": -16.537194540172763,\n \"max\": 16.626586628222096,\n \"num_unique_values\": 148,\n \"samples\": [\n -5.5096426829032765,\n -4.192069878917911,\n 0.0969209496106391\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_10\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 5.736041581214664,\n \"min\": -22.006870967705165,\n \"max\": 5.341944901286143,\n \"num_unique_values\": 148,\n \"samples\": [\n -14.888090524599049,\n -2.679905652845484,\n -4.124536203962681\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_11\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 7.964057207796632,\n \"min\": -15.97644564504034,\n \"max\": 14.539281254023074,\n \"num_unique_values\": 148,\n \"samples\": [\n -8.107532163193822,\n -10.48949586980253,\n -2.566518390687336\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"mfcc_12\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 6.866482357947159,\n \"min\": -21.68206080071003,\n \"max\": 8.456266425271922,\n \"num_unique_values\": 148,\n \"samples\": [\n -5.797938428082079,\n -2.674145185062222,\n -5.316564560856999\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"target\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 5,\n \"samples\": [\n \"Tanti\",\n \"Random\",\n \"Vasyilla\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {}, + "execution_count": 154 + } + ], + "source": [ + "read_csv" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "HXR1l9aOq9ji" + }, + "outputs": [], + "source": [ + "# Separate features (MFCC) and labels\n", + "X = read_csv.iloc[:, :-1]\n", + "y = read_csv['target']" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "hFLINEfi12EJ" + }, + "source": [ + "## **B. Data Standartlization**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "o4Enm5nm1ejn" + }, + "outputs": [], + "source": [ + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)" + ] + }, + { + "cell_type": "code", + "source": [ + "model = SVC(kernel='rbf', C=8, gamma=0.001)\n", + "# model = SVC(kernel='linear', C=0.1)" + ], + "metadata": { + "id": "bBAFR2v2tOej" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# Wrap model SVM dengan OneVsOneClassifier\n", + "ovo_model = OneVsOneClassifier(model)\n", + "\n", + "# Latih model pada data latih\n", + "ovo_model.fit(X_train, y_train)\n", + "\n", + "# Prediksi pada data uji\n", + "y_pred_ovo = ovo_model.predict(X_test)\n", + "\n", + "print(\"Accuracy:\", metrics.accuracy_score(y_pred_ovo, y_test))\n", + "print(\"\\nClassification Report:\\n\", classification_report(y_pred_ovo, y_test))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "A1GxW3ANoyLq", + "outputId": "e7dc06bd-f5d2-4581-9f82-0ad627f7b143" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Accuracy: 0.9666666666666667\n", + "\n", + "Classification Report:\n", + " precision recall f1-score support\n", + "\n", + " Hilmi 1.00 0.86 0.92 7\n", + " Random 1.00 1.00 1.00 7\n", + " Tanti 0.83 1.00 0.91 5\n", + " Vasyilla 1.00 1.00 1.00 7\n", + " Yudha 1.00 1.00 1.00 4\n", + "\n", + " accuracy 0.97 30\n", + " macro avg 0.97 0.97 0.97 30\n", + "weighted avg 0.97 0.97 0.97 30\n", + "\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# Wrap model SVM dengan OneVsOneClassifier\n", + "ovr_model =OneVsRestClassifier(model)\n", + "\n", + "# Latih model pada data latih\n", + "ovr_model.fit(X_train, y_train)\n", + "\n", + "# Prediksi pada data uji\n", + "y_pred_ovr = ovr_model.predict(X_test)\n", + "\n", + "print(\"Accuracy:\", metrics.accuracy_score(y_pred_ovr, y_test))\n", + "print(\"\\nClassification Report:\\n\", classification_report(y_test, y_pred_ovr))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "0RJWyMC0uMkw", + "outputId": "e2a1f8fd-5e9a-4667-b3f6-efae745555e7" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Accuracy: 0.9666666666666667\n", + "\n", + "Classification Report:\n", + " precision recall f1-score support\n", + "\n", + " Hilmi 0.86 1.00 0.92 6\n", + " Random 1.00 1.00 1.00 7\n", + " Tanti 1.00 0.83 0.91 6\n", + " Vasyilla 1.00 1.00 1.00 7\n", + " Yudha 1.00 1.00 1.00 4\n", + "\n", + " accuracy 0.97 30\n", + " macro avg 0.97 0.97 0.97 30\n", + "weighted avg 0.97 0.97 0.97 30\n", + "\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "cm = confusion_matrix(y_test, y_pred_ovo)\n", + "\n", + "# Hitung True Positives (TP) untuk setiap kelas\n", + "TP = np.diag(cm)\n", + "\n", + "TN = []\n", + "FP = []\n", + "FN = []\n", + "for i in range(len(cm)):\n", + " temp = np.delete(cm, i, 0) # hapus baris ke-i\n", + " temp = np.delete(temp, i, 1) # hapus kolom ke-i\n", + " TN.append(np.sum(np.delete(np.delete(cm, i, 0), i, 1)))\n", + " FP.append(np.sum(cm[:, i]) - cm[i, i])\n", + " FN.append(np.sum(cm[i, :]) - cm[i, i])\n", + "\n", + "# Hitung total TP, TN, FP, FN\n", + "total_TP = np.sum(TP)\n", + "total_TN = np.sum(TN)\n", + "total_FP = np.sum(FP)\n", + "total_FN = np.sum(FN)\n", + "\n", + "# Cetak total\n", + "print(f\"Total True Positives (TP): {total_TP}\")\n", + "print(f\"Total True Negatives (TN): {total_TN}\")\n", + "print(f\"Total False Positives (FP): {total_FP}\")\n", + "print(f\"Total False Negatives (FN): {total_FN}\")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "ho499J8zjT30", + "outputId": "e307f777-bac9-4b78-b5c1-1468bc9da5dd" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Total True Positives (TP): 29\n", + "Total True Negatives (TN): 119\n", + "Total False Positives (FP): 1\n", + "Total False Negatives (FN): 1\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "o_vQ0aqkrZVY" + }, + "source": [ + "## **C. Mencari kernel yang terbaik**\n", + "\n", + "a. Default kernel\n", + "\n", + "b. Melakukan validasi silang K-Fold dengan kernel yang berbeda\n", + "\n", + "c. Membandingkan kernel yang terbaik\n", + "\n", + "d. Kernel Paling Akurat (kernel='poly', C=0.1, degree=3, gamma=8)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bIpz46aODKV4" + }, + "source": [ + "### ***a. Default kernel***" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "vfIftRBoxgo8", + "outputId": "77a76665-92a9-444c-d3e9-4a83cf4bed58" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "--------------------------------- Linear ---------------------------------\n", + "Accuracy: 0.5787037037037037\n", + "\n", + "Classification Report:\n", + " precision recall f1-score support\n", + "\n", + " Depan Mati 0.62 0.70 0.66 37\n", + " Depan Menyala 0.68 0.63 0.65 43\n", + " Samping Mati 0.55 0.47 0.51 34\n", + "Samping Menyala 0.51 0.54 0.53 39\n", + " Tengah Mati 0.55 0.55 0.55 31\n", + " Tengah Menyala 0.55 0.56 0.55 32\n", + "\n", + " accuracy 0.58 216\n", + " macro avg 0.58 0.58 0.57 216\n", + " weighted avg 0.58 0.58 0.58 216\n", + "\n", + "--------------------------------- RBF ---------------------------------\n", + "Accuracy: 0.4398148148148148\n", + "\n", + "Classification Report:\n", + " precision recall f1-score support\n", + "\n", + " Depan Mati 0.51 0.57 0.54 37\n", + " Depan Menyala 0.51 0.49 0.50 43\n", + " Samping Mati 0.41 0.53 0.46 34\n", + "Samping Menyala 0.33 0.36 0.35 39\n", + " Tengah Mati 0.41 0.23 0.29 31\n", + " Tengah Menyala 0.45 0.44 0.44 32\n", + "\n", + " accuracy 0.44 216\n", + " macro avg 0.44 0.43 0.43 216\n", + " weighted avg 0.44 0.44 0.43 216\n", + "\n", + "--------------------------------- Polynomial ---------------------------------\n", + "Accuracy: 0.4027777777777778\n", + "\n", + "Classification Report:\n", + " precision recall f1-score support\n", + "\n", + " Depan Mati 0.44 0.22 0.29 37\n", + " Depan Menyala 0.54 0.44 0.49 43\n", + " Samping Mati 0.24 0.76 0.37 34\n", + "Samping Menyala 0.50 0.28 0.36 39\n", + " Tengah Mati 0.67 0.26 0.37 31\n", + " Tengah Menyala 0.71 0.47 0.57 32\n", + "\n", + " accuracy 0.40 216\n", + " macro avg 0.52 0.41 0.41 216\n", + " weighted avg 0.51 0.40 0.41 216\n", + "\n" + ] + } + ], + "source": [ + "# Default Linear\n", + "svm_default_linear = SVC(kernel='linear')\n", + "svm_default_linear.fit(X_train, y_train)\n", + "default_linear = svm_default_linear.predict(X_test)\n", + "# dump(svm_default_linear, '/content/drive/MyDrive/Skripsi/linear/3.pkl')\n", + "\n", + "# # Default RBF\n", + "svm_default_rbf = SVC(kernel='rbf')\n", + "svm_default_rbf.fit(X_train, y_train)\n", + "default_rbf = svm_default_rbf.predict(X_test)\n", + "# dump(svm_default_linear, '/content/drive/MyDrive/Skripsi/rbf/4.pkl')\n", + "\n", + "# Default Poly\n", + "svm_default_poly = SVC(kernel='poly')\n", + "svm_default_poly.fit(X_train, y_train)\n", + "default_poly = svm_default_poly.predict(X_test)\n", + "# dump(svm_default_linear, '/content/drive/MyDrive/Skripsi/poly/poly_hilmi_3.pkl')\n", + "\n", + "# # Evaluasi model\n", + "print('--------------------------------- Linear ---------------------------------')\n", + "print(\"Accuracy:\", accuracy_score(y_test, default_linear))\n", + "print(\"\\nClassification Report:\\n\", classification_report(y_test, default_linear))\n", + "\n", + "print('--------------------------------- RBF ---------------------------------')\n", + "\n", + "print(\"Accuracy:\", accuracy_score(y_test, default_rbf))\n", + "print(\"\\nClassification Report:\\n\", classification_report(y_test, default_rbf))\n", + "\n", + "print('--------------------------------- Polynomial ---------------------------------')\n", + "\n", + "print(\"Accuracy:\", accuracy_score(y_test, default_poly))\n", + "print(\"\\nClassification Report:\\n\", classification_report(y_test, default_poly))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "TkKYogWSKC7m" + }, + "source": [ + "### ***b. Melakukan validasi silang K-fold dengan kernel yang berbeda***" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "z33TWr6_jza2" + }, + "source": [ + "Dalam K-fold cross validation, dataset dibagi menjadi K subset yang sama besar. Setiap subset digunakan satu kali sebagai data uji sementara subset lainnya digunakan sebagai data pelatihan. Ini dilakukan K kali dengan setiap subset digunakan sebagai data uji sekali. Ini memastikan bahwa semua data digunakan untuk pelatihan dan pengujian, dan hasil akhir adalah rata-rata dari kinerja model pada semua iterasi." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "CIZftb1ujXcj" + }, + "source": [ + "#### 1. CV on Kernel" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ByDnGhjgK1dN" + }, + "source": [ + "##### *CV on Linear kernel*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "apSkmWJ0I3iV" + }, + "outputs": [], + "source": [ + "from sklearn.model_selection import cross_val_score" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "AxNRgjWlAgTn", + "outputId": "b607efc1-21f6-419c-fd29-f834e7cd1acd" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0.31481481 0.27777778 0.5 0.47222222 0.4537037 0.25\n", + " 0.31481481 0.27777778 0.44444444 0.39814815]\n", + "\n", + "Rata-rata Akurasi: 0.37037037037037035\n" + ] + } + ], + "source": [ + "svc=SVC(kernel='linear')\n", + "scores = cross_val_score(svc, X, y, cv=10, scoring='accuracy') #cv is cross validation\n", + "print(scores)\n", + "print()\n", + "print(\"Rata-rata Akurasi:\", scores.mean())" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "53eHmjLgLK6L" + }, + "source": [ + "##### *CV on Linear RBF*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "iYPULGRdLL_d", + "outputId": "f6f4f50d-a92a-49db-ec01-848b066b721c" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0.14814815 0.36111111 0.34259259 0.39814815 0.39814815 0.26851852\n", + " 0.49074074 0.33333333 0.48148148 0.46296296]\n", + "\n", + "Rata-rata Akurasi: 0.3685185185185185\n" + ] + } + ], + "source": [ + "svc=SVC(kernel='rbf')\n", + "scores = cross_val_score(svc, X, y, cv=10, scoring='accuracy') #cv is cross validation\n", + "print(scores)\n", + "print()\n", + "print(\"Rata-rata Akurasi:\", scores.mean())" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "9z2TeRgOLmcE" + }, + "source": [ + "##### CV on Kernel Polynomial" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "PEqeJfBbOpZw", + "outputId": "0132e132-114e-428e-f384-ce19cfdd548f" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0.12962963 0.38888889 0.38888889 0.58333333 0.39814815 0.16666667\n", + " 0.33333333 0.21296296 0.46296296 0.30555556]\n", + "\n", + "Rata-rata Akurasi: 0.337037037037037\n" + ] + } + ], + "source": [ + "svc=SVC(kernel='poly')\n", + "scores = cross_val_score(svc, X, y, cv=10, scoring='accuracy') #cv is cross validation\n", + "print(scores)\n", + "print()\n", + "print(\"Rata-rata Akurasi:\", scores.mean())" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6dOzBBDti-lP" + }, + "source": [ + "##### **Note :** CV (Cross Validation) adalah yang merupakan teknik yang digunakan untuk mengevaluasi kinerja model machine learning. Cross-validation melibatkan pembagian dataset menjadi subset yang saling eksklusif, di mana beberapa subset digunakan untuk melatih model dan subset lainnya digunakan untuk menguji model. Ini membantu menghindari overfitting dan memberikan estimasi yang lebih baik tentang kinerja model pada data yang tidak terlihat." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "BuOJaSexlifl" + }, + "source": [ + "#### 2. Mencari Kernel, degree, C dan gamma" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "lglj8qk0PEy5" + }, + "source": [ + "##### Mengambil kernel sebagai linear dan mengambil nilai C" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "IGbkcH93PVI-" + }, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 389 + }, + "id": "0Kaz_KbwPuZs", + "outputId": "aacc1e63-22bc-4e0f-ee5e-dd9c917e91fd" + }, + "outputs": [ + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mc\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mC_range\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0msvc\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mSVC\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkernel\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'linear'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mC\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mc\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m \u001b[0mscores\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcross_val_score\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msvc\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcv\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m10\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mscoring\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'accuracy'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 6\u001b[0m \u001b[0macc_score\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mscores\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmean\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0macc_score\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/sklearn/model_selection/_validation.py\u001b[0m in \u001b[0;36mcross_val_score\u001b[0;34m(estimator, X, y, groups, scoring, cv, n_jobs, verbose, fit_params, pre_dispatch, error_score)\u001b[0m\n\u001b[1;32m 513\u001b[0m \u001b[0mscorer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcheck_scoring\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mestimator\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mscoring\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mscoring\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 514\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 515\u001b[0;31m cv_results = cross_validate(\n\u001b[0m\u001b[1;32m 516\u001b[0m \u001b[0mestimator\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mestimator\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 517\u001b[0m \u001b[0mX\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/sklearn/model_selection/_validation.py\u001b[0m in \u001b[0;36mcross_validate\u001b[0;34m(estimator, X, y, groups, scoring, cv, n_jobs, verbose, fit_params, pre_dispatch, return_train_score, return_estimator, error_score)\u001b[0m\n\u001b[1;32m 264\u001b[0m \u001b[0;31m# independent, and that it is pickle-able.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 265\u001b[0m \u001b[0mparallel\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mParallel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mn_jobs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mn_jobs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mverbose\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mverbose\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpre_dispatch\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mpre_dispatch\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 266\u001b[0;31m results = parallel(\n\u001b[0m\u001b[1;32m 267\u001b[0m delayed(_fit_and_score)(\n\u001b[1;32m 268\u001b[0m \u001b[0mclone\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mestimator\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/sklearn/utils/parallel.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, iterable)\u001b[0m\n\u001b[1;32m 61\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mdelayed_func\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwargs\u001b[0m \u001b[0;32min\u001b[0m \u001b[0miterable\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 62\u001b[0m )\n\u001b[0;32m---> 63\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0msuper\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__call__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0miterable_with_config\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 64\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 65\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/joblib/parallel.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, iterable)\u001b[0m\n\u001b[1;32m 1861\u001b[0m \u001b[0moutput\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_get_sequential_output\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0miterable\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1862\u001b[0m \u001b[0mnext\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0moutput\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1863\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0moutput\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreturn_generator\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0mlist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0moutput\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1864\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1865\u001b[0m \u001b[0;31m# Let's create an ID that uniquely identifies the current call. If the\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/joblib/parallel.py\u001b[0m in \u001b[0;36m_get_sequential_output\u001b[0;34m(self, iterable)\u001b[0m\n\u001b[1;32m 1787\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1788\u001b[0m \u001b[0;31m# Sequentially call the tasks and yield the results.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1789\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwargs\u001b[0m \u001b[0;32min\u001b[0m \u001b[0miterable\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1790\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mn_dispatched_batches\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1791\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mn_dispatched_tasks\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/sklearn/utils/parallel.py\u001b[0m in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 57\u001b[0m \u001b[0;31m# pre_dispatch and n_jobs.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 58\u001b[0m \u001b[0mconfig\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mget_config\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 59\u001b[0;31m iterable_with_config = (\n\u001b[0m\u001b[1;32m 60\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0m_with_config\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdelayed_func\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mconfig\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 61\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mdelayed_func\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwargs\u001b[0m \u001b[0;32min\u001b[0m \u001b[0miterable\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/sklearn/model_selection/_validation.py\u001b[0m in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 266\u001b[0m results = parallel(\n\u001b[1;32m 267\u001b[0m delayed(_fit_and_score)(\n\u001b[0;32m--> 268\u001b[0;31m \u001b[0mclone\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mestimator\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 269\u001b[0m \u001b[0mX\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 270\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/sklearn/base.py\u001b[0m in \u001b[0;36mclone\u001b[0;34m(estimator, safe)\u001b[0m\n\u001b[1;32m 88\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mparam\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mnew_object_params\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 89\u001b[0m \u001b[0mnew_object_params\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mclone\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mparam\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msafe\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 90\u001b[0;31m \u001b[0mnew_object\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mklass\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0mnew_object_params\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 91\u001b[0m \u001b[0mparams_set\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnew_object\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_params\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdeep\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 92\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/sklearn/svm/_classes.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, C, kernel, degree, gamma, coef0, shrinking, probability, tol, cache_size, class_weight, verbose, max_iter, decision_function_shape, break_ties, random_state)\u001b[0m\n\u001b[1;32m 798\u001b[0m ):\n\u001b[1;32m 799\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 800\u001b[0;31m super().__init__(\n\u001b[0m\u001b[1;32m 801\u001b[0m \u001b[0mkernel\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mkernel\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 802\u001b[0m \u001b[0mdegree\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdegree\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python3.10/dist-packages/sklearn/svm/_base.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, kernel, degree, gamma, coef0, tol, C, nu, shrinking, probability, cache_size, class_weight, verbose, max_iter, decision_function_shape, random_state, break_ties)\u001b[0m\n\u001b[1;32m 701\u001b[0m \u001b[0m_parameter_constraints\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0munused_param\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 702\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 703\u001b[0;31m \u001b[0;34m@\u001b[0m\u001b[0mabstractmethod\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 704\u001b[0m def __init__(\n\u001b[1;32m 705\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + ] + } + ], + "source": [ + "C_range=list(range(1,5))\n", + "acc_score=[]\n", + "for c in C_range:\n", + " svc = SVC(kernel='linear', C=c)\n", + " scores = cross_val_score(svc, X, y, cv=10, scoring='accuracy')\n", + " acc_score.append(scores.mean())\n", + "print(acc_score)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "6SOP5EF2QCuC" + }, + "outputs": [], + "source": [ + "C_values=list(range(1,5))\n", + "# plot the value of C for SVM (x-axis) versus the cross-validated accuracy (y-axis)\n", + "plt.plot(C_values,acc_score)\n", + "plt.xticks(np.arange(0,5,1))\n", + "plt.xlabel('Value of C for SVC')\n", + "plt.ylabel('Cross-Validated Accuracy')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "wG0_1_Vnjnx9" + }, + "source": [ + "**Penjelasan :** Dari plot di atas kita dapat melihat bahwa akurasinya mendekati 86% untuk C=1.2,kemudian turun sekitar 90%." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "I9CMwDX_k1vQ" + }, + "outputs": [], + "source": [ + "C_range=list(np.arange(0.1,5))\n", + "acc_score=[]\n", + "for c in C_range:\n", + " svc = SVC(kernel='linear', C=c)\n", + " scores = cross_val_score(svc, X, y, cv=10, scoring='accuracy')\n", + " acc_score.append(scores.mean())\n", + "print(acc_score)\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "ocVhPSRilHwi" + }, + "outputs": [], + "source": [ + "C_values=list(np.arange(0.1,5))\n", + "# plot the value of C for SVM (x-axis) versus the cross-validated accuracy (y-axis)\n", + "plt.plot(C_values,acc_score)\n", + "plt.xticks(np.arange(0.0,5,0.4))\n", + "plt.xlabel('Value of C for SVC ')\n", + "plt.ylabel('Cross-Validated Accuracy')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "p6on4ZEJlqnT" + }, + "source": [ + "**Jadi:** Akurasi tertinggi terdapat pada 1.1" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "DV3MdEU6Q-Hq" + }, + "source": [ + "##### Mengambil kernel sebagai rbf dan mengambil nilai gamma yang berbeda" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "8k6eQ1adROYE" + }, + "source": [ + "**Note:** Secara teknis, parameter gamma merupakan kebalikan dari standar deviasi kernel RBF (fungsi Gaussian), yang digunakan sebagai ukuran kemiripan antara dua titik. Secara intuitif, nilai gamma yang kecil menentukan fungsi Gaussian dengan varian yang besar. Dalam hal ini, dua titik dapat dianggap serupa meskipun letaknya berjauhan. Sebaliknya, nilai gamma yang besar berarti mendefinisikan fungsi Gaussian dengan varians yang kecil dan dalam hal ini, dua titik dianggap serupa hanya jika keduanya berdekatan." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "zi4lL-mPRaV3" + }, + "outputs": [], + "source": [ + "gamma_range=[0.0001,0.001,0.01,0.1,1,10,100]\n", + "acc_score=[]\n", + "for g in gamma_range:\n", + " svc = SVC(kernel='rbf', gamma=g)\n", + " scores = cross_val_score(svc, X, y, cv=10, scoring='accuracy')\n", + " acc_score.append(scores.mean())\n", + "print(acc_score)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "OmvFietuRgyZ" + }, + "outputs": [], + "source": [ + "gamma_range=[0.0001,0.001,0.01,0.1,1,10,100]\n", + "\n", + "# plot the value of C for SVM (x-axis) versus the cross-validated accuracy (y-axis)\n", + "plt.plot(gamma_range,acc_score)\n", + "plt.xlabel('Value of gamma for SVC ')\n", + "plt.xticks(np.arange(0.0001,100,5))\n", + "plt.ylabel('Cross-Validated Accuracy')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "BWNG6ZB4SS8h" + }, + "source": [ + "**Penjelasan :** Kita dapat melihat bahwa untuk gamma=0.0001,0.001,0.01, dan 10, kinerja kernel buruk. Kita juga dapat melihat sedikit penurunan dalam skor akurasi ketika gamma adalah 10. Mari kita lihat lebih detail untuk rentang 0,1 hingga 1." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "7LS8V8eKSSTz" + }, + "outputs": [], + "source": [ + "gamma_range=[0.0001,0.001]\n", + "acc_score=[]\n", + "for g in gamma_range:\n", + " svc = SVC(kernel='rbf', gamma=g)\n", + " scores = cross_val_score(svc, X, y, cv=10, scoring='accuracy')\n", + " acc_score.append(scores.mean())\n", + "print(acc_score)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "9KFgTAWIZvwp" + }, + "outputs": [], + "source": [ + "gamma_range=[0.0001,0.001]\n", + "\n", + "# plot the value of C for SVM (x-axis) versus the cross-validated accuracy (y-axis)\n", + "plt.plot(gamma_range,acc_score)\n", + "plt.xlabel('Value of gamma for SVC ')\n", + "plt.ylabel('Cross-Validated Accuracy')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "zsB13ybnalLj" + }, + "source": [ + "**Penjelasan :** Skornya terus menurun mulai dari gamma 0.0001" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "fSmV8uCAezmJ" + }, + "outputs": [], + "source": [ + "# gamma_range=[0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1]\n", + "# acc_score=[]\n", + "# for g in gamma_range:\n", + "# svc = SVC(kernel='rbf', gamma=g)\n", + "# scores = cross_val_score(svc, X, y, cv=10, scoring='accuracy')\n", + "# acc_score.append(scores.mean())\n", + "# print(acc_score)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "z8-g053Ke8vX" + }, + "outputs": [], + "source": [ + "# gamma_range=[0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1]\n", + "\n", + "# # plot the value of C for SVM (x-axis) versus the cross-validated accuracy (y-axis)\n", + "# plt.plot(gamma_range,acc_score)\n", + "# plt.xlabel('Value of gamma for SVC ')\n", + "# plt.ylabel('Cross-Validated Accuracy')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ZLr3F2k9npsH" + }, + "source": [ + "**Penjelasan :** Kita dapat melihat adanya kenaikan skor akurasi yang konstan mulai 0,7 hingga 0,8. Dan penurunan skor terlihat dari gamma ke 0,81 hingga gamma ke 1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "9mrqmvJZoMc9" + }, + "outputs": [], + "source": [ + "# gamma_range=[0.7, 0.8]\n", + "# acc_score=[]\n", + "# for g in gamma_range:\n", + "# svc = SVC(kernel='rbf', gamma=g)\n", + "# scores = cross_val_score(svc, X, y, cv=10, scoring='accuracy')\n", + "# acc_score.append(scores.mean())\n", + "# print(acc_score)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "iJdBt_OModmC" + }, + "outputs": [], + "source": [ + "# gamma_range=[0.7, 0.81]\n", + "\n", + "# # plot the value of C for SVM (x-axis) versus the cross-validated accuracy (y-axis)\n", + "# plt.plot(gamma_range,acc_score)\n", + "# plt.xlabel('Value of gamma for SVC ')\n", + "# plt.ylabel('Cross-Validated Accuracy')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "re-W-Bi1o8lD" + }, + "source": [ + "**Hasilnya :** Jadi akurasi paling tinggi di kernel rbf yaitu pada gamma 0,70" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "xzN7Ml7yfL6I" + }, + "source": [ + "##### Mengambil kernel polinomial dengan derajat berbeda" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "D2oEWYbEfN36" + }, + "outputs": [], + "source": [ + "degree=[2,3,4,5,6]\n", + "acc_score=[]\n", + "for d in degree:\n", + " svc = SVC(kernel='poly', degree=d)\n", + " scores = cross_val_score(svc, X, y, cv=10, scoring='accuracy')\n", + " acc_score.append(scores.mean())\n", + "print(acc_score)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "sNLaiJavfRcz" + }, + "outputs": [], + "source": [ + "degree=[2,3,4,5,6]\n", + "\n", + "# plot the value of C for SVM (x-axis) versus the cross-validated accuracy (y-axis)\n", + "plt.plot(degree,acc_score,color='r')\n", + "plt.xlabel('degrees for SVC ')\n", + "plt.ylabel('Cross-Validated Accuracy')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "oSWy_QjIhHQp" + }, + "source": [ + "**Penjelasan :** Skor yang tinggi untuk polinomial derajat ketiga dan kemudian terjadi penurunan skor akurasi hingga ke degrees 6.0" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "aP7X0AiAl8s9" + }, + "source": [ + "#### 3. Menjalankan SVM sesuai parameter yang terbaik dari masing-masing kernel" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "d0IyrybqiT8U" + }, + "source": [ + "##### Sekarang jalankan SVM dengan mengambil hyperparameter C=1.1 dan kernel sebagai linier" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "askkOgBppyX7" + }, + "outputs": [], + "source": [ + "from sklearn import metrics" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "vHkJgr_IjLPS", + "outputId": "6b278626-76b0-45c6-853d-f36b030b4057" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.8555555555555555\n" + ] + } + ], + "source": [ + "svc= SVC(kernel='linear',C=5)\n", + "svc.fit(X_train,y_train)\n", + "y_predict=svc.predict(X_test)\n", + "accuracy_score= metrics.accuracy_score(y_test,y_predict)\n", + "print(accuracy_score)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bso5az0PigSq" + }, + "source": [ + "With K-fold cross validation(where K=10)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "nd1uaSXpp-yU", + "outputId": "de4e6fb2-8ff1-4ed1-ee16-5c2bf5738ea9" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0.87037037 0.91666667 0.89814815 0.89814815 0.9537037 0.87962963\n", + " 0.90740741 0.91666667 0.92592593 0.85185185]\n" + ] + } + ], + "source": [ + "svc=SVC(kernel='linear',C=5)\n", + "scores = cross_val_score(svc, X, y, cv=10, scoring='accuracy')\n", + "print(scores)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "0V6UTMK9qENC", + "outputId": "cb111ba7-7585-4b70-f926-af15e377bcbe" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.9018518518518517\n" + ] + } + ], + "source": [ + "print(scores.mean())" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "AIDSY-Y6ijUy" + }, + "source": [ + "##### Sekarang jalankan SVM dengan mengambil hyperparameter gamma=0.70 dan kernel sebagai rbf" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "tANamosIqPbY", + "outputId": "8b036d36-1c7a-40d4-c7c9-61e34c686ae3" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.42407407407407405" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "svc= SVC(kernel='rbf', gamma=0.0001)\n", + "svc.fit(X_train,y_train)\n", + "y_predict=svc.predict(X_test)\n", + "# dump(svc, '/content/drive/MyDrive/Skripsi/rbf/rbf_hp_g3.pkl')\n", + "metrics.accuracy_score(y_test,y_predict)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "MacT54CpimFA" + }, + "source": [ + "With K-fold cross validation(where K=10)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "ntkTwMi5qYOv", + "outputId": "0b917e17-a5d6-46c4-ed5d-7132c1f4abb8" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0.77777778 0.92592593 0.83333333 0.81481481 0.91666667 0.81481481\n", + " 0.82407407 0.74074074 0.77777778 0.65740741]\n" + ] + } + ], + "source": [ + "svc=SVC(kernel='rbf',gamma=0.001)\n", + "scores = cross_val_score(svc, X, y, cv=10, scoring='accuracy')\n", + "print(scores)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "RExu0sorricU", + "outputId": "e478bbf3-2025-49be-f768-53a7644f753a" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.8083333333333333\n" + ] + } + ], + "source": [ + "print(scores.mean())" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "NY_C0C_Di9oQ" + }, + "source": [ + "##### Sekarang jalankan SVM dengan mengambil hyperparameter degree=2 dan kernel sebagai poly" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "71pTZUJ5qyll", + "outputId": "a6639192-c098-4f11-877b-5ce6aaf4f7a8" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.15925925925925927\n" + ] + } + ], + "source": [ + "svc= SVC(kernel='poly',degree=6)\n", + "svc.fit(X_train,y_train)\n", + "y_predict=svc.predict(X_test)\n", + "accuracy_score= metrics.accuracy_score(y_test,y_predict)\n", + "print(accuracy_score)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "11994jzsjDFY" + }, + "source": [ + "With K-fold cross validation(where K=10)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "YNClZNedq3la", + "outputId": "aa40b018-bac2-443c-e553-53d8d695c809" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0.21296296 0.27777778 0.26851852 0.30555556 0.38888889 0.32407407\n", + " 0.37962963 0.32407407 0.35185185 0.28703704]\n" + ] + } + ], + "source": [ + "svc=SVC(kernel='poly',degree=6)\n", + "scores = cross_val_score(svc, X, y, cv=10, scoring='accuracy')\n", + "print(scores)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "2_21UHOqrp_Q", + "outputId": "210dc429-9b3f-4b97-d2cc-9aeca0c3e147" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.3120370370370371\n" + ] + } + ], + "source": [ + "print(scores.mean())" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "BaQieKcwrPaj" + }, + "source": [ + "### ***c. Membandingkan Kernel mana yang terbaik***" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "1OmCznEnsK-V" + }, + "outputs": [], + "source": [ + "from sklearn.model_selection import GridSearchCV\n", + "from sklearn import metrics" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "vTSuCuiTrU-F" + }, + "outputs": [], + "source": [ + "svm_model= SVC()\n", + "tuned_parameters = {\n", + " 'C': [0.1,1,8,9,10,12,13,15,20,30,40,50,60,70,80,90,100,110,120,130,140],\n", + " 'gamma':[1, 0.1, 0.001, 0.001, 0.0001, 0.00001, 0.00009],\n", + " 'kernel': ['rbf']\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "xWLwV0CnraU9" + }, + "outputs": [], + "source": [ + "# model_svm = GridSearchCV(svm_model, tuned_parameters,cv=10,scoring='accuracy')\n", + "model_svm = GridSearchCV(svm_model, tuned_parameters, refit=True, verbose=2)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "ENUX6xhQreRU", + "outputId": "80767437-2f89-4c39-c23e-b904eb00f572" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Fitting 5 folds for each of 147 candidates, totalling 735 fits\n", + "[CV] END .........................C=0.1, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END .........................C=0.1, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END .........................C=0.1, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END .........................C=0.1, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END .........................C=0.1, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=0.1, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=0.1, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=0.1, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=0.1, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=0.1, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=0.1, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=0.1, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=0.1, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=0.1, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=0.1, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=0.1, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=0.1, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=0.1, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=0.1, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=0.1, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ....................C=0.1, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END ....................C=0.1, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END ....................C=0.1, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END ....................C=0.1, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END ....................C=0.1, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=0.1, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=0.1, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=0.1, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=0.1, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=0.1, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=0.1, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=0.1, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=0.1, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=0.1, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=0.1, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ...........................C=1, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ...........................C=1, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ...........................C=1, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ...........................C=1, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ...........................C=1, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END .........................C=1, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END .........................C=1, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END .........................C=1, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END .........................C=1, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END .........................C=1, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=1, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=1, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=1, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=1, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=1, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=1, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=1, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=1, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=1, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=1, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=1, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=1, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=1, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=1, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=1, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=1, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=1, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=1, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=1, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=1, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=1, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=1, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=1, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=1, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=1, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ...........................C=8, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ...........................C=8, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ...........................C=8, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ...........................C=8, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ...........................C=8, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END .........................C=8, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END .........................C=8, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END .........................C=8, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END .........................C=8, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END .........................C=8, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=8, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=8, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=8, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=8, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=8, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=8, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=8, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=8, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=8, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=8, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=8, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=8, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=8, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=8, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=8, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=8, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=8, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=8, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=8, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=8, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=8, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=8, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=8, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=8, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=8, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ...........................C=9, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ...........................C=9, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ...........................C=9, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ...........................C=9, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ...........................C=9, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END .........................C=9, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END .........................C=9, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END .........................C=9, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END .........................C=9, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END .........................C=9, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=9, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=9, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=9, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=9, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=9, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=9, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=9, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=9, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=9, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=9, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=9, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=9, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=9, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=9, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=9, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=9, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=9, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=9, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=9, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=9, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=9, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=9, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=9, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=9, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=9, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=10, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=10, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=10, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=10, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=10, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ........................C=10, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END ........................C=10, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END ........................C=10, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END ........................C=10, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END ........................C=10, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=10, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=10, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=10, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=10, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=10, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=10, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=10, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=10, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=10, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=10, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=10, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=10, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=10, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=10, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=10, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=10, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=10, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=10, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=10, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=10, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=10, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=10, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=10, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=10, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=10, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=12, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=12, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=12, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=12, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=12, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ........................C=12, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END ........................C=12, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END ........................C=12, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END ........................C=12, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END ........................C=12, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=12, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=12, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=12, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=12, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=12, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=12, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=12, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=12, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=12, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=12, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=12, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=12, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=12, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=12, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=12, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=12, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=12, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=12, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=12, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=12, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=12, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=12, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=12, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=12, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=12, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=13, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=13, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=13, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=13, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=13, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ........................C=13, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END ........................C=13, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END ........................C=13, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END ........................C=13, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END ........................C=13, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=13, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=13, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=13, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=13, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=13, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=13, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=13, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=13, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=13, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=13, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=13, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=13, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=13, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=13, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=13, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=13, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=13, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=13, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=13, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=13, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=13, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=13, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=13, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=13, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=13, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=15, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=15, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=15, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=15, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=15, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ........................C=15, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END ........................C=15, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END ........................C=15, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END ........................C=15, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END ........................C=15, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=15, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=15, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=15, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=15, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=15, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=15, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=15, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=15, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=15, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=15, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=15, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=15, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=15, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=15, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=15, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=15, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=15, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=15, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=15, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=15, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=15, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=15, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=15, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=15, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=15, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=20, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=20, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=20, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=20, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=20, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ........................C=20, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END ........................C=20, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END ........................C=20, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END ........................C=20, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END ........................C=20, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=20, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=20, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=20, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=20, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=20, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=20, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=20, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=20, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=20, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=20, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=20, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=20, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=20, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=20, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=20, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=20, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=20, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=20, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=20, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=20, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=20, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=20, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=20, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=20, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=20, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=30, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=30, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=30, gamma=1, kernel=rbf; total time= 0.1s\n", + "[CV] END ..........................C=30, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=30, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ........................C=30, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END ........................C=30, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END ........................C=30, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END ........................C=30, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END ........................C=30, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END ......................C=30, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=30, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=30, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=30, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=30, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=30, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=30, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=30, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=30, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=30, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=30, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=30, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=30, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=30, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=30, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=30, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=30, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=30, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=30, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=30, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=30, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=30, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=30, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=30, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=30, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=40, gamma=1, kernel=rbf; total time= 0.1s\n", + "[CV] END ..........................C=40, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=40, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=40, gamma=1, kernel=rbf; total time= 0.1s\n", + "[CV] END ..........................C=40, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ........................C=40, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END ........................C=40, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END ........................C=40, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END ........................C=40, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END ........................C=40, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END ......................C=40, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=40, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=40, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=40, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=40, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=40, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=40, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=40, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=40, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=40, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=40, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=40, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=40, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=40, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=40, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=40, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=40, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=40, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=40, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=40, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=40, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=40, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=40, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=40, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=40, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=50, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=50, gamma=1, kernel=rbf; total time= 0.1s\n", + "[CV] END ..........................C=50, gamma=1, kernel=rbf; total time= 0.1s\n", + "[CV] END ..........................C=50, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=50, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ........................C=50, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END ........................C=50, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END ........................C=50, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END ........................C=50, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END ........................C=50, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END ......................C=50, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=50, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=50, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=50, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=50, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=50, gamma=0.001, kernel=rbf; total time= 0.1s\n", + "[CV] END ......................C=50, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=50, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=50, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=50, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=50, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=50, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=50, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=50, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=50, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=50, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=50, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=50, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=50, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=50, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=50, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=50, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=50, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=50, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=50, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=60, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=60, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=60, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=60, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=60, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ........................C=60, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END ........................C=60, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END ........................C=60, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END ........................C=60, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END ........................C=60, gamma=0.1, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=60, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=60, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=60, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=60, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=60, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=60, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=60, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=60, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=60, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=60, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=60, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=60, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=60, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=60, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=60, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=60, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=60, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=60, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=60, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=60, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=60, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=60, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=60, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=60, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=60, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=70, gamma=1, kernel=rbf; total time= 0.1s\n", + "[CV] END ..........................C=70, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=70, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=70, gamma=1, kernel=rbf; total time= 0.1s\n", + "[CV] END ..........................C=70, gamma=1, kernel=rbf; total time= 0.1s\n", + "[CV] END ........................C=70, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END ........................C=70, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END ........................C=70, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END ........................C=70, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END ........................C=70, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END ......................C=70, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=70, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=70, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=70, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=70, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=70, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=70, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=70, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=70, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=70, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=70, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=70, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=70, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=70, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=70, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=70, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=70, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=70, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=70, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=70, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=70, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=70, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=70, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=70, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=70, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=80, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=80, gamma=1, kernel=rbf; total time= 0.1s\n", + "[CV] END ..........................C=80, gamma=1, kernel=rbf; total time= 0.1s\n", + "[CV] END ..........................C=80, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=80, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ........................C=80, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END ........................C=80, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END ........................C=80, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END ........................C=80, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END ........................C=80, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END ......................C=80, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=80, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=80, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=80, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=80, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=80, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=80, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=80, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=80, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=80, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=80, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=80, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=80, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=80, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=80, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=80, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=80, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=80, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=80, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=80, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=80, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=80, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=80, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=80, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=80, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=90, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=90, gamma=1, kernel=rbf; total time= 0.1s\n", + "[CV] END ..........................C=90, gamma=1, kernel=rbf; total time= 0.1s\n", + "[CV] END ..........................C=90, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ..........................C=90, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END ........................C=90, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END ........................C=90, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END ........................C=90, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END ........................C=90, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END ........................C=90, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END ......................C=90, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=90, gamma=0.001, kernel=rbf; total time= 0.1s\n", + "[CV] END ......................C=90, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=90, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=90, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=90, gamma=0.001, kernel=rbf; total time= 0.1s\n", + "[CV] END ......................C=90, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=90, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=90, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=90, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=90, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=90, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=90, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=90, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=90, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=90, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=90, gamma=1e-05, kernel=rbf; total time= 0.1s\n", + "[CV] END ......................C=90, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=90, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=90, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=90, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=90, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END ......................C=90, gamma=9e-05, kernel=rbf; total time= 0.1s\n", + "[CV] END ......................C=90, gamma=9e-05, kernel=rbf; total time= 0.1s\n", + "[CV] END ......................C=90, gamma=9e-05, kernel=rbf; total time= 0.1s\n", + "[CV] END .........................C=100, gamma=1, kernel=rbf; total time= 0.1s\n", + "[CV] END .........................C=100, gamma=1, kernel=rbf; total time= 0.1s\n", + "[CV] END .........................C=100, gamma=1, kernel=rbf; total time= 0.1s\n", + "[CV] END .........................C=100, gamma=1, kernel=rbf; total time= 0.1s\n", + "[CV] END .........................C=100, gamma=1, kernel=rbf; total time= 0.1s\n", + "[CV] END .......................C=100, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END .......................C=100, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END .......................C=100, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END .......................C=100, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END .......................C=100, gamma=0.1, kernel=rbf; total time= 0.2s\n", + "[CV] END .....................C=100, gamma=0.001, kernel=rbf; total time= 0.1s\n", + "[CV] END .....................C=100, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=100, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=100, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=100, gamma=0.001, kernel=rbf; total time= 0.1s\n", + "[CV] END .....................C=100, gamma=0.001, kernel=rbf; total time= 0.1s\n", + "[CV] END .....................C=100, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=100, gamma=0.001, kernel=rbf; total time= 0.1s\n", + "[CV] END .....................C=100, gamma=0.001, kernel=rbf; total time= 0.1s\n", + "[CV] END .....................C=100, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ....................C=100, gamma=0.0001, kernel=rbf; total time= 0.1s\n", + "[CV] END ....................C=100, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END ....................C=100, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END ....................C=100, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END ....................C=100, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=100, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=100, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=100, gamma=1e-05, kernel=rbf; total time= 0.1s\n", + "[CV] END .....................C=100, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=100, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=100, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=100, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=100, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=100, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=100, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .........................C=110, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END .........................C=110, gamma=1, kernel=rbf; total time= 0.1s\n", + "[CV] END .........................C=110, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END .........................C=110, gamma=1, kernel=rbf; total time= 0.1s\n", + "[CV] END .........................C=110, gamma=1, kernel=rbf; total time= 0.1s\n", + "[CV] END .......................C=110, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END .......................C=110, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END .......................C=110, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END .......................C=110, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END .......................C=110, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END .....................C=110, gamma=0.001, kernel=rbf; total time= 0.1s\n", + "[CV] END .....................C=110, gamma=0.001, kernel=rbf; total time= 0.1s\n", + "[CV] END .....................C=110, gamma=0.001, kernel=rbf; total time= 0.1s\n", + "[CV] END .....................C=110, gamma=0.001, kernel=rbf; total time= 0.1s\n", + "[CV] END .....................C=110, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=110, gamma=0.001, kernel=rbf; total time= 0.1s\n", + "[CV] END .....................C=110, gamma=0.001, kernel=rbf; total time= 0.1s\n", + "[CV] END .....................C=110, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=110, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=110, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ....................C=110, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END ....................C=110, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END ....................C=110, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END ....................C=110, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END ....................C=110, gamma=0.0001, kernel=rbf; total time= 0.1s\n", + "[CV] END .....................C=110, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=110, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=110, gamma=1e-05, kernel=rbf; total time= 0.1s\n", + "[CV] END .....................C=110, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=110, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=110, gamma=9e-05, kernel=rbf; total time= 0.1s\n", + "[CV] END .....................C=110, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=110, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=110, gamma=9e-05, kernel=rbf; total time= 0.1s\n", + "[CV] END .....................C=110, gamma=9e-05, kernel=rbf; total time= 0.1s\n", + "[CV] END .........................C=120, gamma=1, kernel=rbf; total time= 0.1s\n", + "[CV] END .........................C=120, gamma=1, kernel=rbf; total time= 0.1s\n", + "[CV] END .........................C=120, gamma=1, kernel=rbf; total time= 0.1s\n", + "[CV] END .........................C=120, gamma=1, kernel=rbf; total time= 0.1s\n", + "[CV] END .........................C=120, gamma=1, kernel=rbf; total time= 0.1s\n", + "[CV] END .......................C=120, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END .......................C=120, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END .......................C=120, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END .......................C=120, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END .......................C=120, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END .....................C=120, gamma=0.001, kernel=rbf; total time= 0.1s\n", + "[CV] END .....................C=120, gamma=0.001, kernel=rbf; total time= 0.1s\n", + "[CV] END .....................C=120, gamma=0.001, kernel=rbf; total time= 0.1s\n", + "[CV] END .....................C=120, gamma=0.001, kernel=rbf; total time= 0.1s\n", + "[CV] END .....................C=120, gamma=0.001, kernel=rbf; total time= 0.1s\n", + "[CV] END .....................C=120, gamma=0.001, kernel=rbf; total time= 0.1s\n", + "[CV] END .....................C=120, gamma=0.001, kernel=rbf; total time= 0.1s\n", + "[CV] END .....................C=120, gamma=0.001, kernel=rbf; total time= 0.1s\n", + "[CV] END .....................C=120, gamma=0.001, kernel=rbf; total time= 0.1s\n", + "[CV] END .....................C=120, gamma=0.001, kernel=rbf; total time= 0.1s\n", + "[CV] END ....................C=120, gamma=0.0001, kernel=rbf; total time= 0.1s\n", + "[CV] END ....................C=120, gamma=0.0001, kernel=rbf; total time= 0.1s\n", + "[CV] END ....................C=120, gamma=0.0001, kernel=rbf; total time= 0.1s\n", + "[CV] END ....................C=120, gamma=0.0001, kernel=rbf; total time= 0.1s\n", + "[CV] END ....................C=120, gamma=0.0001, kernel=rbf; total time= 0.1s\n", + "[CV] END .....................C=120, gamma=1e-05, kernel=rbf; total time= 0.1s\n", + "[CV] END .....................C=120, gamma=1e-05, kernel=rbf; total time= 0.1s\n", + "[CV] END .....................C=120, gamma=1e-05, kernel=rbf; total time= 0.1s\n", + "[CV] END .....................C=120, gamma=1e-05, kernel=rbf; total time= 0.1s\n", + "[CV] END .....................C=120, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=120, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=120, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=120, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=120, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=120, gamma=9e-05, kernel=rbf; total time= 0.1s\n", + "[CV] END .........................C=130, gamma=1, kernel=rbf; total time= 0.2s\n", + "[CV] END .........................C=130, gamma=1, kernel=rbf; total time= 0.2s\n", + "[CV] END .........................C=130, gamma=1, kernel=rbf; total time= 0.2s\n", + "[CV] END .........................C=130, gamma=1, kernel=rbf; total time= 0.2s\n", + "[CV] END .........................C=130, gamma=1, kernel=rbf; total time= 0.1s\n", + "[CV] END .......................C=130, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END .......................C=130, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END .......................C=130, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END .......................C=130, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END .......................C=130, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END .....................C=130, gamma=0.001, kernel=rbf; total time= 0.1s\n", + "[CV] END .....................C=130, gamma=0.001, kernel=rbf; total time= 0.1s\n", + "[CV] END .....................C=130, gamma=0.001, kernel=rbf; total time= 0.1s\n", + "[CV] END .....................C=130, gamma=0.001, kernel=rbf; total time= 0.1s\n", + "[CV] END .....................C=130, gamma=0.001, kernel=rbf; total time= 0.1s\n", + "[CV] END .....................C=130, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=130, gamma=0.001, kernel=rbf; total time= 0.1s\n", + "[CV] END .....................C=130, gamma=0.001, kernel=rbf; total time= 0.1s\n", + "[CV] END .....................C=130, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=130, gamma=0.001, kernel=rbf; total time= 0.1s\n", + "[CV] END ....................C=130, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END ....................C=130, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END ....................C=130, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END ....................C=130, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END ....................C=130, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=130, gamma=1e-05, kernel=rbf; total time= 0.1s\n", + "[CV] END .....................C=130, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=130, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=130, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=130, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=130, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=130, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=130, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=130, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=130, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .........................C=140, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END .........................C=140, gamma=1, kernel=rbf; total time= 0.1s\n", + "[CV] END .........................C=140, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END .........................C=140, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END .........................C=140, gamma=1, kernel=rbf; total time= 0.0s\n", + "[CV] END .......................C=140, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END .......................C=140, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END .......................C=140, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END .......................C=140, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END .......................C=140, gamma=0.1, kernel=rbf; total time= 0.1s\n", + "[CV] END .....................C=140, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=140, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=140, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=140, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=140, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=140, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=140, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=140, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=140, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=140, gamma=0.001, kernel=rbf; total time= 0.0s\n", + "[CV] END ....................C=140, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END ....................C=140, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END ....................C=140, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END ....................C=140, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END ....................C=140, gamma=0.0001, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=140, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=140, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=140, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=140, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=140, gamma=1e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=140, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=140, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=140, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=140, gamma=9e-05, kernel=rbf; total time= 0.0s\n", + "[CV] END .....................C=140, gamma=9e-05, kernel=rbf; total time= 0.1s\n", + "0.7956039603960396\n" + ] + } + ], + "source": [ + "model_svm.fit(X_train, y_train)\n", + "print(model_svm.best_score_)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "8NKzvgPMsMbu", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "fb3d9297-a52d-43bb-e9ee-aef0ca7421ac" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "{'C': 10, 'gamma': 0.001, 'kernel': 'rbf'}\n" + ] + } + ], + "source": [ + "print(model_svm.best_params_)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "eSXhqW_suU5U", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "a413fb0d-041b-4501-e961-63ae037fe808" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "0.5925925925925926\n" + ] + } + ], + "source": [ + "y_pred= model_svm.predict(X_test)\n", + "print(metrics.accuracy_score(y_pred,y_test))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ibo6EbWGnp_S" + }, + "source": [ + "### ***d. Kernel Paling Akurat (kernel='poly', C=0.1, degree=3, gamma=8)***" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "NXoCoBtOf3DK" + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "np.random.seed(0)\n", + "from sklearn import metrics" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "F49lZ0VyunPT", + "outputId": "9582a775-ac94-444e-aaba-dd29a748131b" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Accuracy: 0.6\n", + "\n", + "Classification Report:\n", + " precision recall f1-score support\n", + "\n", + " Depan Mati 0.43 0.67 0.52 9\n", + " Depan Menyala 0.57 0.67 0.62 12\n", + " Samping Mati 0.70 0.64 0.67 11\n", + "Samping Menyala 0.53 0.60 0.56 15\n", + " Tengah Mati 0.70 0.47 0.56 15\n", + " Tengah Menyala 0.80 0.62 0.70 13\n", + "\n", + " accuracy 0.60 75\n", + " macro avg 0.62 0.61 0.60 75\n", + " weighted avg 0.63 0.60 0.60 75\n", + "\n" + ] + } + ], + "source": [ + "# Kernel Terbaik\n", + "# model = SVC(kernel='rbf', C=10, gamma=0.001) #RBF\n", + "model = SVC(kernel='linear', C=10) #Linear\n", + "model.fit(X_train, y_train)\n", + "y_pred = model.predict(X_test)\n", + "# dump(model, '/content/drive/MyDrive/Skripsi/model 4 label/linear.pkl')\n", + "\n", + "print(\"Accuracy:\", metrics.accuracy_score(y_pred,y_test))\n", + "print(\"\\nClassification Report:\\n\", classification_report(y_test, y_pred))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "hopKMQh5uWIj" + }, + "source": [ + "# **CONFUSION MATRIX**" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 117 + }, + "id": "RGNAK2sqxHd2", + "outputId": "3426e010-813e-4278-bf29-759537d1fb60" + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "OneVsOneClassifier(estimator=SVC(C=8, gamma=0.001))" + ], + "text/html": [ + "
OneVsOneClassifier(estimator=SVC(C=8, gamma=0.001))
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" + ] + }, + "metadata": {}, + "execution_count": 6 + } + ], + "source": [ + "model_load = load('/content/drive/MyDrive/REVISI SKRIPSI/Model Dataset Pertama/60:40/model_pertama.pkl')\n", + "model_load" + ] + }, + { + "cell_type": "code", + "source": [ + "import seaborn as sns" + ], + "metadata": { + "id": "xsCqGjoFV3oN" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "conf_matrix = confusion_matrix(y_test, y_pred_ovo)\n", + "plt.figure(figsize=(8, 6))\n", + "sns.heatmap(conf_matrix, annot=True, fmt='d', cmap='Blues', xticklabels=['Hilmi', 'Tanti', 'Vasyilla', 'Yudha', 'Random'], yticklabels=['Hilmi', 'Tanti', 'Vasyilla', 'Yudha', 'Random'])\n", + "plt.xlabel('Predicted')\n", + "plt.ylabel('True')\n", + "plt.title('Confusion Matrix')\n", + "plt.savefig('Confusion Matrix 4.png')\n", + "plt.show()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 564 + }, + "id": "8BYSx5yEVTkV", + "outputId": "c6113373-7f59-45d2-da69-40c46f2a5982" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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gABJ0vnz51O1/++//y4fHx+VKVPGrb1gwYIKCgrS77//7tZerFixFOcIDg7W6dOn0xlxSg8//LDq1Kmj3r17q0CBAurcubO+/PLLWyZ61+MMCwtL8V54eLhOnDihixcvurX/+7MEBwdLUpo+S8uWLZUnTx598cUX+vTTT1W9evUU3+V1ycnJGjNmjMqWLSun06l8+fIpf/782rx5s86ePZvqaxYpUiRNN0+89dZbyps3rxISEvTuu+8qNDQ01ccC8B4kd4BFBQQEqHDhwtq6dWuajvv3DQ034+vre8N2wzDSfY3r88Guy5kzp5YvX65FixapW7du2rx5sx5++GE1adIkxb534k4+y3VOp1ORkZGaNm2a5syZc9OqnSSNHDlSAwYMUL169fTJJ59owYIFWrhwoSpUqJDqCqX09/eTFhs3btSxY8ckSVu2bEnTsQC8B8kdYGGtW7fW3r17tXr16tvuW7x4cSUnJ2v37t1u7UePHtWZM2dcd75mhODgYLc7S6/7d3VQknx8fNSoUSONHj1av/32m1577TUtWbJEP/300w3PfT3OnTt3pnhvx44dypcvn/z9/e/sA9zEI488oo0bN+r8+fM3vAnlupkzZ6phw4b66KOP1LlzZzVt2lSNGzdO8Z2kNtFOjYsXL6pHjx4qX768Hn/8cY0aNUrr16/PsPMDsA+SO8DCXnjhBfn7+6t37946evRoivf37t2rsWPHSvp7WFFSijtaR48eLUlq1apVhsVVunRpnT17Vps3b3a1HT58WHPmzHHb79SpUymOvb6Y77+XZ7muUKFCqlKliqZNm+aWLG3dulU//vij63N6QsOGDfXKK69o/PjxKliw4E338/X1TVEV/Oqrr/Tf//7Xre16EnqjRDitBg0apIMHD2ratGkaPXq0SpQooaioqJt+jwC8F4sYAxZWunRpzZgxQw8//LDCw8PdnlCxatUqffXVV4qOjpYkVa5cWVFRUZo8ebLOnDmj+vXra926dZo2bZrat29/02U20qNz584aNGiQOnTooH79+unSpUuaMGGCypUr53ZDwYgRI7R8+XK1atVKxYsX17Fjx/T+++/rrrvu0v3333/T87/55ptq0aKFatWqpV69euny5csaN26cAgMDNXz48Az7HP/m4+OjwYMH33a/1q1ba8SIEerRo4dq166tLVu26NNPP1WpUqXc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esxj525VMdRj576RTP8a05uweYNrV69q+2/b1OuxPq42Hx8f1axZW5s38f+KMxv9YR30hTVlz+arzi2r691Plpgdilfid5Gx7DTnLtOTu3PnzqV634CAgNvuk5iYqMTERLc2w9cpp9OZ5tjMdvrMaSUlJSkkJMStPSQkRPv37zMpKu9Ff1gHfWFNbRtWUlCenPrk27Vmh+KV+F3gZjJ9zl1QUJCCg4NTtaVGXFycAgMD3bY334jz8KcAAES1r60FP/+mw8fPmh0KcMd85PDYltkyvXL3008/uf584MABvfjii4qOjlatWrUkSatXr9a0adMUF5e6BC0mJkYDBgxwazN8s17VTpKCg4Ll6+ubYiLsyZMnlS9fPpOi8l70h3XQF9ZTrFCwHqgRps4DPzA7FK/F7wI3k+mVu/r167u2jz/+WKNHj1ZcXJzatm2rtm3bKi4uTm+99Zbi4+NTdT6n06mAgAC3LSsOyUpSdj8/hZevoLVrVrvakpOTtXbtalWqfI+JkXkn+sM66Avr6da2lo6dOq95K7aZHYrX4neRsez0+DFT17lbvXq1qlWrlqK9WrVqWrdunQkRma9bVA/Nnvmlvpk7R/v27tWrI4br8uXLat8h0uzQvBL9YR30hXU4HA51b1dTn363VklJyWaH49X4XWQcqyR3cXFxql69uvLkyaPQ0FC1b99eO3fuTNM5TH9CxQcffKBRo0a5tX/44YcqWrSoSVGZq3mLljp96pTeH/+uTpw4rrC7w/X+pA8VQondFPSHddAX1vFAjTAVK5RX0+auMTsUr8fvwn6WLVump556StWrV9dff/2ll156SU2bNtVvv/0mf3//VJ0j09e5+6cffvhBDz74oMqUKaMaNWpIktatW6fdu3dr1qxZatmyZbrOm5XXuQPgHeyyzp0dZOV17uzGzHXuFm4/4bFzNwlPf7J9/PhxhYaGatmyZapXr16qjjF1WLZly5batWuX2rRpo1OnTunUqVNq06aNdu3ale7EDgAAwEoSExN17tw5t+3fy7jdzNmzf9+NnpYnd5laufMUKncArI7KnXVQubMOMyt3i3d4rnK34vPxio11f4rLsGHDNHz48Fsel5ycrLZt2+rMmTNauXJlqq9n6py75cuX3/L91JYfAQAArOpGy7alZmWPp556Slu3bk1TYieZnNw1aNAgRZvjH7eVJCUl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G5KMn376ydVWt25dt+/un1q1amU899xzhmEYxq+//mpIMg4cOHDDfd944w0jPDzc9XrWrFlG7ty5jQsXLhiGkbJfb/RbulVfHD9+3JBkbNmy5Taf0h6OHj1q5MuXz/Dx8THmzJlzw/8Nnz592q0/Y2JijPLly7udZ9CgQa6/zwzj736QZOzZs8e1z3vvvWcUKFDgprEkJSUZefLkMb799tsM+3xW8M9/A5xOpyHJ8PHxMWbOnHnTY/75mzAMw6hfv75x//33u+1TvXp1Y9CgQYZhGMaCBQuMbNmyGf/9739d78+bN8+QZMyZM8cwDMOYPHmyERwc7PqtGIZhfP/994aPj49x5MgRV6xp/bcG1kXlzsMaNmyohIQEt+3DDz9M0zkqVKggH5//76oCBQooIiLC9drX11chISE6duxYhsXtTS5cuKCBAwcqPDxcQUFByp07t7Zv356icvfP+WLXh3X5zt3dfffdql27tqZMmSJJ2rNnj1asWKFevXopKSlJr7zyiiIiIpQ3b17lzp1bCxYscH3PlStXVqNGjRQREaGOHTvqgw8+0OnTp13njo6O1p49e7RmzRpJfw/DdurUSf7+/umKdffu3erSpYtKlSqlgIAAlShRQpJS9LtdhYaGqk+fPgoPD0/11IHt27erRo0abm03epB5rly5VLp0adfrQoUKuf1Wjh49qscee0xly5ZVYGCgAgICdOHCBVt+99f/DVi7dq2ioqLUo0cPPfjgg5J029/Edf+eq/rP73P79u0qWrSoChcu7Hr/332yfft2Va5c2e23UqdOHSUnJ7vNPebfGvsgufMwf39/lSlTxm0rUqRIms6RPXt2t9fX77z6d5s3DCd5wsCBAzVnzhyNHDlSK1asUEJCgiIiInT16lW3/fjOU6dXr16aNWuWzp8/r/j4eJUuXVr169fXm2++qbFjx2rQoEH66aeflJCQoGbNmrm+Z19fXy1cuFDz5s1T+fLlNW7cOIWFhWn//v2S/k5G2rRpo/j4eB09elTz5s1L95Cs9PfdvadOndIHH3ygtWvXau3atZKUot/tLFu2bMqW7e/76q7/o278Y0j92rVr6TrvjX4r/zxvVFSUEhISNHbsWK1atUoJCQkKCQmx5Xd//d+AypUra8qUKVq7dq0++ugjSbrtb+K6zPq7h39r7IPkDl7v559/VnR0tDp06KCI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LlzQvffeq08//TTFefLnz5+u6+fMmTPNx1y4cEGS9P3336tIkSJu7zmdznTFAQBWQ3IHIF38/f1VpkyZVO1btWpVffHFFwoNDVVAQMAN9ylUqJDWrl2revXqSZL++usv/frrr6pateoN94+IiFBycrKWLVvmGpb9p+uVw6SkJFdb+fLl5XQ6dfDgwZtW/MLDw/XNN9+4ta1Zs+b2HxIALIIbKgB43KOPPqp8+fKpXbt2WrFihfbv36+lS5eqX79++vPPPyVJzzzzjF5//XXNnTtXO3bs0JNPPnnLNepKlCihqKgo9ezZU3PnznWd88svv5QkFS9eXA6HQ999952OHz+uCxcuKE+ePBo4cKD69++vadOmae/evdqwYYPGjRunadOmSZL69u2r3bt36/nnn9fOnTs1Y8YMTZ061dNfEQBkGJI7AB6XK1cuLV++XMWKFVNkZKTCw8PVq1cvXblyxVXJe+6559StWzdFRUWpVq1aypMnjzp06HDL806YMEEPPfSQnnzySd1999167LHHdPHiRUlSkSJFFBsbqxdffFEFChTQ008/LUl65ZVXNGTIEMXFxSk8PFzNmzfX999/r5IlS0qSihUrplmzZmnu3LmqXLmyJk6cqJEjR3rw2wGAjOUwbjZbGQAAAFkOlTsAAAAbIbkDAACwEZI7AAAAGyG5AwAAsBGSOwAAABshuQMAALARkjsAAAAbIbkDAACwEZI7AAAAGyG5AwAAsBGSOwAAABv5PwVdCf8deR70AAAAAElFTkSuQmCC\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Bhe0B1ddvyr2", + "outputId": "ff191246-7a68-4344-bffe-5873608875a6" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Confusion matrix\n", + "\n", + " [[6 0 0 0 0]\n", + " [0 7 0 0 0]\n", + " [1 0 5 0 0]\n", + " [0 0 0 7 0]\n", + " [0 0 0 0 4]]\n", + "\n", + "True Positives(TP) = [6 7 5 7 4]\n", + "\n", + "True Negatives(TN) = [23, 23, 24, 23, 26]\n", + "\n", + "False Positives(FP) = [1 0 0 0 0]\n", + "\n", + "False Negatives(FN) = [0 0 1 0 0]\n" + ] + } + ], + "source": [ + "cm = confusion_matrix(y_test, y_pred_ovo)\n", + "\n", + "# Hitung True Negatives (TN) untuk setiap kelas\n", + "TN = []\n", + "for i in range(len(cm)):\n", + " temp = np.delete(cm, i, 0) # hapus baris ke-i\n", + " temp = np.delete(temp, i, 1) # hapus kolom ke-i\n", + " TN.append(np.sum(temp))\n", + "\n", + "print('Confusion matrix\\n\\n', cm)\n", + "\n", + "print('\\nTrue Positives(TP) = ', np.diag(cm))\n", + "\n", + "print('\\nTrue Negatives(TN) = ', TN)\n", + "\n", + "print('\\nFalse Positives(FP) = ', np.sum(cm, axis=0) - np.diag(cm))\n", + "\n", + "print('\\nFalse Negatives(FN) = ', np.sum(cm, axis=1) - np.diag(cm))\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "REEXlIrQGpCv" + }, + "source": [ + "Classification Accuracy" + ] + }, + { + "cell_type": "code", + "source": [ + "cm = confusion_matrix(y_test, y_pred_ovo)\n", + "\n", + "# Hitung True Positives (TP) untuk setiap kelas\n", + "TP = np.diag(cm)\n", + "\n", + "TN = []\n", + "FP = []\n", + "FN = []\n", + "for i in range(len(cm)):\n", + " temp = np.delete(cm, i, 0) # hapus baris ke-i\n", + " temp = np.delete(temp, i, 1) # hapus kolom ke-i\n", + " TN.append(np.sum(np.delete(np.delete(cm, i, 0), i, 1)))\n", + " FP.append(np.sum(cm[:, i]) - cm[i, i])\n", + " FN.append(np.sum(cm[i, :]) - cm[i, i])\n", + "\n", + "# Hitung total TP, TN, FP, FN\n", + "total_TP = np.sum(TP)\n", + "total_TN = np.sum(TN)\n", + "total_FP = np.sum(FP)\n", + "total_FN = np.sum(FN)\n", + "\n", + "# Cetak total\n", + "print(f\"Total True Positives (TP): {total_TP}\")\n", + "print(f\"Total True Negatives (TN): {total_TN}\")\n", + "print(f\"Total False Positives (FP): {total_FP}\")\n", + "print(f\"Total False Negatives (FN): {total_FN}\")" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "-Ar5rYwEhYDU", + "outputId": "88da9785-936f-4a49-a5d7-60051fa305d8" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Total True Positives (TP): 29\n", + "Total True Negatives (TN): 119\n", + "Total False Positives (FP): 1\n", + "Total False Negatives (FN): 1\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# Hitung True Positives (TP) untuk setiap kelas\n", + "TP = np.diag(cm)\n", + "\n", + "# Hitung True Negatives (TN), False Positives (FP), dan False Negatives (FN) untuk setiap kelas\n", + "TN = []\n", + "FP = []\n", + "FN = []\n", + "for i in range(len(cm)):\n", + " temp = np.delete(cm, i, 0) # hapus baris ke-i\n", + " temp = np.delete(temp, i, 1) # hapus kolom ke-i\n", + " TN.append(np.sum(np.delete(np.delete(cm, i, 0), i, 1)))\n", + " FP.append(np.sum(cm[:, i]) - cm[i, i])\n", + " FN.append(np.sum(cm[i, :]) - cm[i, i])\n", + "\n", + "# Cetak hasil\n", + "for i in range(len(cm)):\n", + " print(f\"Kelas {i}:\")\n", + " print(f\"True Negatives (TN): {TN[i]}, False Positives (FP): {FP[i]}, False Negatives (FN): {FN[i]}, True Positives (TP): {TP[i]}\")\n", + " print()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "pi-CXMyRfvEU", + "outputId": "cd1cfd56-636d-47ce-e039-a4a70d841a47" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Kelas 0:\n", + "True Negatives (TN): 31, False Positives (FP): 1, False Negatives (FN): 0, True Positives (TP): 13\n", + "\n", + "Kelas 1:\n", + "True Negatives (TN): 36, False Positives (FP): 0, False Negatives (FN): 0, True Positives (TP): 9\n", + "\n", + "Kelas 2:\n", + "True Negatives (TN): 36, False Positives (FP): 0, False Negatives (FN): 1, True Positives (TP): 8\n", + "\n", + "Kelas 3:\n", + "True Negatives (TN): 35, False Positives (FP): 0, False Negatives (FN): 0, True Positives (TP): 10\n", + "\n", + "Kelas 4:\n", + "True Negatives (TN): 41, False Positives (FP): 0, False Negatives (FN): 0, True Positives (TP): 4\n", + "\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# Hitung True Positives (TP) untuk setiap kelas\n", + "TP = np.diag(cm)\n", + "\n", + "# Hitung True Negatives (TN), False Positives (FP), dan False Negatives (FN) untuk setiap kelas\n", + "TN = []\n", + "FP = []\n", + "FN = []\n", + "for i in range(len(cm)):\n", + " temp = np.delete(cm, i, 0) # hapus baris ke-i\n", + " temp = np.delete(temp, i, 1) # hapus kolom ke-i\n", + " TN.append(np.sum(np.delete(np.delete(cm, i, 0), i, 1)))\n", + " FP.append(np.sum(cm[:, i]) - cm[i, i])\n", + " FN.append(np.sum(cm[i, :]) - cm[i, i])\n", + "\n", + "# Hitung classification accuracy\n", + "classification_accuracy = (np.sum(TP) + np.sum(TN)) / float(np.sum(TP) + np.sum(TN) + np.sum(FP) + np.sum(FN))\n", + "\n", + "print('Classification accuracy : {0:0.4f}'.format(classification_accuracy))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "RW4_VBTUfcyX", + "outputId": "eaf3b7f5-5436-43d5-9072-124ef36511f4" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Classification accuracy : 0.9867\n" + ] + } + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Ze8LQXFNGAMi", + "outputId": "bbf616f6-4075-4377-fa02-53e0a8018257" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Classification accuracy : 1.0000\n" + ] + } + ], + "source": [ + "TP = cm[0,0]\n", + "TN = cm[1,1]\n", + "FP = cm[0,1]\n", + "FN = cm[1,0]\n", + "\n", + "classification_accuracy = (TP + TN) / float(TP + TN + FP + FN)\n", + "\n", + "print('Classification accuracy : {0:0.4f}'.format(classification_accuracy))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "xSZckWMWGvf3" + }, + "source": [ + "Classification Error" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "YufxpOUHGYt3" + }, + "outputs": [], + "source": [ + "classification_error = (FP + FN) / float(TP + TN + FP + FN)\n", + "\n", + "print('Classification error : {0:0.4f}'.format(classification_error))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ALY58D2FHCXI" + }, + "source": [ + "Precision" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "b_fz1x1qGYhQ" + }, + "outputs": [], + "source": [ + "# print precision score\n", + "\n", + "precision = TP / float(TP + FP)\n", + "\n", + "\n", + "print('Precision : {0:0.4f}'.format(precision))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "1YzKeSa9HH0w" + }, + "source": [ + "Recall" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "yB-6_-v5HZbO", + "outputId": "8c167574-70b3-44f6-c59b-d2e9daa6558d" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Recall or Sensitivity : 1.0000\n" + ] + } + ], + "source": [ + "recall = TP / float(TP + FN)\n", + "\n", + "print('Recall or Sensitivity : {0:0.4f}'.format(recall))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "7Fc7pouCJZBS" + }, + "source": [ + "F1-Score" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "4de9T_vFHgwy", + "outputId": "0b766dfe-c802-4697-9b6e-4016db2cc09d" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "F1-score: 0.9832053251408089\n" + ] + } + ], + "source": [ + "# F1-score untuk model dengan kernel RBF\n", + "f1_score_rbf = f1_score(y_test, y_pred_ovo, average='weighted')\n", + "print(\"F1-score:\", f1_score_rbf)" + ] + } + ], + "metadata": { + "colab": { + "collapsed_sections": [ + "bIpz46aODKV4", + "TkKYogWSKC7m", + "CIZftb1ujXcj", + "BuOJaSexlifl", + "aP7X0AiAl8s9" + ], + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file