{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Voice Gender Classification\n", "\n", "## Gender Recognition by Voice and Speech Analysis\n", "\n", "This notebook tries to identify a voice as male or female, based upon acoustic properties of the voice and speech. The dataset consists of 3,168 recorded voice samples, collected from male and female speakers. The voice samples are pre-processed by analyzing frequency range of 0hz-280hz (human vocal range).\n", "\n", "### The Dataset\n", "\n", "The following acoustic properties of each voice are measured and included within the CSV:\n", "\n", "- meanfreq: mean frequency (in kHz)\n", "- sd: standard deviation of frequency\n", "- median: median frequency (in kHz)\n", "- Q25: first quantile (in kHz)\n", "- Q75: third quantile (in kHz)\n", "- IQR: interquantile range (in kHz)\n", "- skew: skewness (see note in specprop description)\n", "- kurt: kurtosis (see note in specprop description)\n", "- sp.ent: spectral entropy\n", "- sfm: spectral flatness\n", "- mode: mode frequency\n", "- centroid: frequency centroid (see specprop)\n", "- peakf: peak frequency (frequency with highest energy)\n", "- meanfun: average of fundamental frequency measured across acoustic signal\n", "- minfun: minimum fundamental frequency measured across acoustic signal\n", "- maxfun: maximum fundamental frequency measured across acoustic signal\n", "- meandom: average of dominant frequency measured across acoustic signal\n", "- mindom: minimum of dominant frequency measured across acoustic signal\n", "- maxdom: maximum of dominant frequency measured across acoustic signal\n", "- dfrange: range of dominant frequency measured across acoustic signal\n", "- modindx: modulation index. Calculated as the accumulated absolute difference between adjacent measurements of - - - - fundamental frequencies divided by the frequency range\n", "- label: male or female" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Gender classification - typical rules of thumb\n", "\n", "- Pitch, combined with intonation (the rise and fall of the voice in speaking), are important factors in classifying male versus female.\n", "- Male classified voices tend to be low and within a narrow range of pitch (ie., relatively monotone).\n", "- Female classified voices tend to be higher in pitch and fluctuate frequency to a much greater degree.\n", "- Female classified voices often rise in frequency at the end of a sentence, as if asking a question.\n" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib\n", "import matplotlib.pyplot as plt\n", "from matplotlib import cm\n", "import pandas as pd\n", "import mglearn\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.preprocessing import StandardScaler\n", "from sklearn.tree import DecisionTreeClassifier, export_graphviz\n", "from sklearn.ensemble import RandomForestClassifier\n", "import pydotplus\n", "from IPython.display import Image \n", "\n", "pd.options.mode.chained_assignment = None # default='warn'\n", "\n", "matplotlib.style.use('ggplot')\n", "%matplotlib inline\n", "matplotlib.rcParams.update({'font.size': 15})\n", "\n", "def plot_feature_importances_mydata(model):\n", " n_features = X_train.shape[1]\n", " plt.barh(range(n_features), model.feature_importances_, align='center')\n", " plt.yticks(np.arange(n_features), list(mydata)[:-1])\n", " plt.xlabel(\"Variable importance\")\n", " plt.ylabel(\"Independent Variable\")" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", " | meanfreq | \n", "sd | \n", "median | \n", "Q25 | \n", "Q75 | \n", "IQR | \n", "skew | \n", "kurt | \n", "sp.ent | \n", "sfm | \n", "... | \n", "centroid | \n", "meanfun | \n", "minfun | \n", "maxfun | \n", "meandom | \n", "mindom | \n", "maxdom | \n", "dfrange | \n", "modindx | \n", "label | \n", "
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | \n", "0.059781 | \n", "0.064241 | \n", "0.032027 | \n", "0.015071 | \n", "0.090193 | \n", "0.075122 | \n", "12.863462 | \n", "274.402906 | \n", "0.893369 | \n", "0.491918 | \n", "... | \n", "0.059781 | \n", "0.084279 | \n", "0.015702 | \n", "0.275862 | \n", "0.007812 | \n", "0.007812 | \n", "0.007812 | \n", "0.000000 | \n", "0.000000 | \n", "male | \n", "
1 | \n", "0.066009 | \n", "0.067310 | \n", "0.040229 | \n", "0.019414 | \n", "0.092666 | \n", "0.073252 | \n", "22.423285 | \n", "634.613855 | \n", "0.892193 | \n", "0.513724 | \n", "... | \n", "0.066009 | \n", "0.107937 | \n", "0.015826 | \n", "0.250000 | \n", "0.009014 | \n", "0.007812 | \n", "0.054688 | \n", "0.046875 | \n", "0.052632 | \n", "male | \n", "
2 | \n", "0.077316 | \n", "0.083829 | \n", "0.036718 | \n", "0.008701 | \n", "0.131908 | \n", "0.123207 | \n", "30.757155 | \n", "1024.927705 | \n", "0.846389 | \n", "0.478905 | \n", "... | \n", "0.077316 | \n", "0.098706 | \n", "0.015656 | \n", "0.271186 | \n", "0.007990 | \n", "0.007812 | \n", "0.015625 | \n", "0.007812 | \n", "0.046512 | \n", "male | \n", "
3 | \n", "0.151228 | \n", "0.072111 | \n", "0.158011 | \n", "0.096582 | \n", "0.207955 | \n", "0.111374 | \n", "1.232831 | \n", "4.177296 | \n", "0.963322 | \n", "0.727232 | \n", "... | \n", "0.151228 | \n", "0.088965 | \n", "0.017798 | \n", "0.250000 | \n", "0.201497 | \n", "0.007812 | \n", "0.562500 | \n", "0.554688 | \n", "0.247119 | \n", "male | \n", "
4 | \n", "0.135120 | \n", "0.079146 | \n", "0.124656 | \n", "0.078720 | \n", "0.206045 | \n", "0.127325 | \n", "1.101174 | \n", "4.333713 | \n", "0.971955 | \n", "0.783568 | \n", "... | \n", "0.135120 | \n", "0.106398 | \n", "0.016931 | \n", "0.266667 | \n", "0.712812 | \n", "0.007812 | \n", "5.484375 | \n", "5.476562 | \n", "0.208274 | \n", "male | \n", "
... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
3163 | \n", "0.131884 | \n", "0.084734 | \n", "0.153707 | \n", "0.049285 | \n", "0.201144 | \n", "0.151859 | \n", "1.762129 | \n", "6.630383 | \n", "0.962934 | \n", "0.763182 | \n", "... | \n", "0.131884 | \n", "0.182790 | \n", "0.083770 | \n", "0.262295 | \n", "0.832899 | \n", "0.007812 | \n", "4.210938 | \n", "4.203125 | \n", "0.161929 | \n", "female | \n", "
3164 | \n", "0.116221 | \n", "0.089221 | \n", "0.076758 | \n", "0.042718 | \n", "0.204911 | \n", "0.162193 | \n", "0.693730 | \n", "2.503954 | \n", "0.960716 | \n", "0.709570 | \n", "... | \n", "0.116221 | \n", "0.188980 | \n", "0.034409 | \n", "0.275862 | \n", "0.909856 | \n", "0.039062 | \n", "3.679688 | \n", "3.640625 | \n", "0.277897 | \n", "female | \n", "
3165 | \n", "0.142056 | \n", "0.095798 | \n", "0.183731 | \n", "0.033424 | \n", "0.224360 | \n", "0.190936 | \n", "1.876502 | \n", "6.604509 | \n", "0.946854 | \n", "0.654196 | \n", "... | \n", "0.142056 | \n", "0.209918 | \n", "0.039506 | \n", "0.275862 | \n", "0.494271 | \n", "0.007812 | \n", "2.937500 | \n", "2.929688 | \n", "0.194759 | \n", "female | \n", "
3166 | \n", "0.143659 | \n", "0.090628 | \n", "0.184976 | \n", "0.043508 | \n", "0.219943 | \n", "0.176435 | \n", "1.591065 | \n", "5.388298 | \n", "0.950436 | \n", "0.675470 | \n", "... | \n", "0.143659 | \n", "0.172375 | \n", "0.034483 | \n", "0.250000 | \n", "0.791360 | \n", "0.007812 | \n", "3.593750 | \n", "3.585938 | \n", "0.311002 | \n", "female | \n", "
3167 | \n", "0.165509 | \n", "0.092884 | \n", "0.183044 | \n", "0.070072 | \n", "0.250827 | \n", "0.180756 | \n", "1.705029 | \n", "5.769115 | \n", "0.938829 | \n", "0.601529 | \n", "... | \n", "0.165509 | \n", "0.185607 | \n", "0.062257 | \n", "0.271186 | \n", "0.227022 | \n", "0.007812 | \n", "0.554688 | \n", "0.546875 | \n", "0.350000 | \n", "female | \n", "
3168 rows × 21 columns
\n", "