{ "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": "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lWY9cOCARo8erVatWsnf318tW7aUpKs+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 }