Project On Gender Recognition Using Voice In R Language
By Rohit Sharma
Updated on Jul 25, 2025 | 11 min read | 1.35K+ views
Share:
For working professionals
For fresh graduates
More
By Rohit Sharma
Updated on Jul 25, 2025 | 11 min read | 1.35K+ views
Share:
In this Gender Recognition using voice in R, we'll build a machine learning model that can predict a speaker’s gender using extracted voice features.
The project will focus on audio feature analysis and classification techniques, using large datasets for accurate predictions. You’ll understand audio processing, SVM, Random Forest, and Neural Networks using libraries like caret, tuneR, and seewave.
This project has its uses in voice assistants, call center automation, and audio-based classification systems, making it ideal for those exploring AI in audio.
Zoom ahead in your data science career with upGrad’s premier Online Data Science Courses. Learn Python, Machine Learning, AI, Tableau, and SQL from top industry experts—designed for real-world impact. Start your transformation today.
Find More Interesting R Projects: Top 25+ R Projects for Beginners to Boost Your Data Science Skills in 2025
Before starting any project, having prior knowledge about certain concepts, tools, and what data type is used is important. Below are some things to know before starting the Gender Recognition Using Voice Project.
Take your career in Data Science and AI to the next level with upGrad’s industry-aligned online programs. Gain in-demand expertise in Generative AI, Machine Learning, and Advanced Analytics—guided by top professionals. Enrol today and lead the innovation.
For every project, there are certain tools, libraries, and technologies used so that the project can provide optimal results. Below are the tools, libraries, and technologies used to successfully run this project.
Category |
Tool / Library |
Purpose |
Core Libraries | caret | Model training, testing, and evaluation |
randomForest | Ensemble classification, feature importance | |
e1071 | Support Vector Machine (SVM) modeling | |
nnet | Neural networks for capturing non-linear patterns | |
ggplot2 | Data visualization (optional) | |
R Environment in Google Colab | R Runtime in Colab | Enables R language support in Google Colab |
Package Installation | Install required libraries using install.packages() | |
Optional for Advanced Modeling | tuneR, seewave | Audio file (.wav) reading and feature extraction |
Classification Models | Support Vector Machine | Classifies data with linear or non-linear boundaries |
Random Forest | Robust ensemble classifier with built-in feature ranking | |
Neural Network (nnet) | Learns deep patterns in voice features |
Read More To Understand About: Machine Learning with R: Everything You Need to Know
The section below will provide the step-by-step guide for this Gender Recognition by Voice Project.
Here, we will install all the necessary R libraries for machine learning, data manipulation, and audio processing (optional). These packages form the base of the project.
# Install the required packages
install.packages("caret") # For ML model training and evaluation
install.packages("e1071") # Required dependency for Support Vector Machine (SVM)
install.packages("randomForest") # For Random Forest classification and feature importance
install.packages("nnet") # For building simple neural networks
install.packages("tidyverse") # For data wrangling, visualization, and streamlined coding
# (Optional) For audio file processing – use only if working with raw .wav files
# install.packages("tuneR") # For reading and analyzing audio signals
# install.packages("seewave") # For audio signal feature extraction
# Read the uploaded CSV file
data <- read.csv("voice.csv")
# View the first few rows of the data
head(data)
The dataset will be shown in the output, consisting of rows and columns:
meanfreq |
sd |
median |
Q25 |
Q75 |
IQR |
skew |
kurt |
sp.ent |
sfm |
⋯ |
centroid |
meanfun |
minfun |
maxfun |
meandom |
mindom |
maxdom |
dfrange |
modindx |
label |
|
<dbl> |
<dbl> |
<dbl> |
<dbl> |
<dbl> |
<dbl> |
<dbl> |
<dbl> |
<dbl> |
<dbl> |
⋯ |
<dbl> |
<dbl> |
<dbl> |
<dbl> |
<dbl> |
<dbl> |
<dbl> |
<dbl> |
<dbl> |
<chr> |
|
1 |
0.05978098 |
0.06424127 |
0.03202691 |
0.015071489 |
0.09019344 |
0.07512195 |
12.863462 |
274.402906 |
0.8933694 |
0.4919178 |
⋯ |
0.05978098 |
0.08427911 |
0.01570167 |
0.2758621 |
0.007812500 |
0.0078125 |
0.0078125 |
0.0000000 |
0.00000000 |
male |
2 |
0.06600874 |
0.06731003 |
0.04022873 |
0.019413867 |
0.09266619 |
0.07325232 |
22.423285 |
634.613855 |
0.8921932 |
0.5137238 |
⋯ |
0.06600874 |
0.10793655 |
0.01582591 |
0.2500000 |
0.009014423 |
0.0078125 |
0.0546875 |
0.0468750 |
0.05263158 |
male |
3 |
0.07731550 |
0.08382942 |
0.03671846 |
0.008701057 |
0.13190802 |
0.12320696 |
30.757155 |
1024.927705 |
0.8463891 |
0.4789050 |
⋯ |
0.07731550 |
0.09870626 |
0.01565558 |
0.2711864 |
0.007990057 |
0.0078125 |
0.0156250 |
0.0078125 |
0.04651163 |
male |
4 |
0.15122809 |
0.07211059 |
0.15801119 |
0.096581728 |
0.20795525 |
0.11137352 |
1.232831 |
4.177296 |
0.9633225 |
0.7272318 |
⋯ |
0.15122809 |
0.08896485 |
0.01779755 |
0.2500000 |
0.201497396 |
0.0078125 |
0.5625000 |
0.5546875 |
0.24711908 |
male |
5 |
0.13512039 |
0.07914610 |
0.12465623 |
0.078720218 |
0.20604493 |
0.12732471 |
1.101174 |
4.333713 |
0.9719551 |
0.7835681 |
⋯ |
0.13512039 |
0.10639784 |
0.01693122 |
0.2666667 |
0.712812500 |
0.0078125 |
5.4843750 |
5.4765625 |
0.20827389 |
male |
6 |
0.13278641 |
0.07955687 |
0.11908985 |
0.067957993 |
0.20959160 |
0.14163361 |
1.932562 |
8.308895 |
0.9631813 |
0.7383070 |
⋯ |
0.13278641 |
0.11013192 |
0.01711230 |
0.2539683 |
0.298221983 |
0.0078125 |
2.7265625 |
2.7187500 |
0.12515964 |
male |
Here’s Something For You To Read: R For Data Science: Why Should You Choose R for Data Science?
This step helps you understand the dataset better by checking the column types, statistical summaries, and the distribution of gender labels. The code for this step is given below:
# Check the structure of the dataset (column types, etc.)
str(data) # Shows column names, data types, and first few values for each variable
# See a quick summary of the dataset (min, max, mean, etc.)
summary(data) # Provides descriptive statistics for each feature
# Check how many male and female samples there are
table(data$label) # Displays the count of 'male' and 'female' entries in the target variable
After executing the code, it’ll return the result as:
female male
1584 1584
This shows that there are 1,584 male and 1,584 female samples in this dataset.
Also Read: Data Preprocessing in Machine Learning: 11 Key Steps You Must Know!
In this step, we will convert the target variable (label) to a factor type, which is essential for classification models in R. The code for this section is given below:
# Convert the 'label' column to a factor (important for classification)
data$label <- as.factor(data$label) # Change label to factor for ML algorithms to treat it as categorical
# Confirm the change
str(data$label) # Check if 'label' is now a factor with two levels
This returns the output:
Factor w/ 2 levels "female","male": 2 2 2 2 2 2 2 2 2 2 ...
The output confirms that the label column has been successfully converted to a factor with two levels: "female" and "male". This is exactly what's needed for classification models like SVM, Random Forest, and Neural Networks in R.
In this step, we divide the dataset into two parts. Here, 80% of the data will be used for training the model and 20% for testing it. This helps us evaluate the model on unseen data.
# Load caret library for splitting
library(caret) # caret provides tools for splitting and model training
# Set seed so results stay the same every time you run
set.seed(123) # Ensures reproducibility of your results
# Create a split (80% train, 20% test)
splitIndex <- createDataPartition(data$label, p = 0.8, list = FALSE) # Stratified sampling
# Create training and test sets
trainData <- data[splitIndex, ] # 80% of the data used for training
testData <- data[-splitIndex, ] # Remaining 20% for testing the model
Output
Loading required package: ggplot2
Loading required package: lattice
We then move on to the next step after the caret package has loaded successfully.
Must Read: What’s Special About Machine Learning?
Here, we will train an SVM classifier using the training data and then test its performance on unseen test data using a confusion matrix. The code is given below:
# Load the SVM package
library(e1071) # Contains the SVM function
# Train the SVM model using training data
svm_model <- svm(label ~ ., data = trainData) # Fit the SVM classifier on training set
# Use the model to predict on the test data
svm_preds <- predict(svm_model, testData) # Predict labels for test data
# Evaluate the model's performance
confusionMatrix(svm_preds, testData$label) # View accuracy, precision, recall, etc.
After executing the code, we get the output as follows:
Confusion Matrix and Statistics
Reference
Prediction female male
female 309 4
male 7 312
Accuracy : 0.9826
95% CI : (0.9691, 0.9913)
No Information Rate : 0.5
P-Value [Acc > NIR] : <2e-16
Kappa : 0.9652
Mcnemar's Test P-Value : 0.5465
Sensitivity : 0.9778
Specificity : 0.9873
Pos Pred Value : 0.9872
Neg Pred Value : 0.9781
Prevalence : 0.5000
Detection Rate : 0.4889
Detection Prevalence : 0.4953
Balanced Accuracy : 0.9826
'Positive' Class : female
This output indicates:
Key Metrics from Confusion Matrix:
Interpretation:
In this step, we will use the Random Forest algorithm, which is an ensemble of decision trees. It’ll be used to classify the speaker's gender. The code for this section is given below:
# Load the Random Forest package
library(randomForest)
# Train the Random Forest model
rf_model <- randomForest(label ~ ., data = trainData)
# Predict using the model
rf_preds <- predict(rf_model, testData)
# Evaluate model accuracy
confusionMatrix(rf_preds, testData$label)
Running this code will give us the output:
randomForest 4.7-1.2
Type rfNews() to see new features/changes/bug fixes.
Attaching package: ‘randomForest’
The following object is masked from ‘package:ggplot2’:
margin
Confusion Matrix and Statistics
Reference
Prediction female male
female 310 8
male 6 308
Accuracy : 0.9778
95% CI : (0.9631, 0.9878)
No Information Rate : 0.5
P-Value [Acc > NIR] : <2e-16
Kappa : 0.9557
Mcnemar's Test P-Value : 0.7893
Sensitivity : 0.9810
Specificity : 0.9747
Pos Pred Value : 0.9748
Neg Pred Value : 0.9809
Prevalence : 0.5000
Detection Rate : 0.4905
Detection Prevalence : 0.5032
Balanced Accuracy : 0.9778
'Positive' Class : female
This output shows that the Random Forest model achieved 97.78% accuracy, which is excellent and very close to the SVM model's performance.
Read More: What Is Data Acquisition: Key Components & Role in Machine Learning
In this step, we will build a Neural Network model using the nnet package. We’ll train the model, predict the outcomes, and evaluate the performance using a confusion matrix. Here is the code for this section:
# Load neural network package
library(nnet)
# Train a basic neural network model
nn_model <- nnet(label ~ ., data = trainData, size = 5, maxit = 500, decay = 0.01)
# Predict using the model
nn_preds <- predict(nn_model, testData, type = "class")
# Convert predictions to factor with the same levels as the original data
nn_preds <- factor(nn_preds, levels = levels(testData$label))
# Evaluate model performance
confusionMatrix(nn_preds, testData$label)
The output of this step is:
# weights: 111
initial value 2315.802858
iter 10 value 1684.945149
iter 20 value 1555.708643
iter 30 value 1207.755223
iter 40 value 492.912793
iter 50 value 317.043397
iter 60 value 297.496780
iter 70 value 265.837801
iter 80 value 253.802245
iter 90 value 225.065694
iter 100 value 184.608466
iter 110 value 173.591431
iter 120 value 167.815037
iter 130 value 163.807516
iter 140 value 161.046387
iter 150 value 159.542546
iter 160 value 158.765066
iter 170 value 158.058391
iter 180 value 157.492944
iter 190 value 157.418919
iter 200 value 157.409389
iter 210 value 157.407508
iter 220 value 157.407318
final value 157.407298
converged
Confusion Matrix and Statistics
Reference
Prediction female male
female 306 5
male 10 311
Accuracy : 0.9763
95% CI : (0.9612, 0.9867)
No Information Rate : 0.5
P-Value [Acc > NIR] : <2e-16
Kappa : 0.9525
Mcnemar's Test P-Value : 0.3017
Sensitivity : 0.9684
Specificity : 0.9842
Pos Pred Value : 0.9839
Neg Pred Value : 0.9688
Prevalence : 0.5000
Detection Rate : 0.4842
Detection Prevalence : 0.4921
Balanced Accuracy : 0.9763
'Positive' Class : female
The output shows that the model achieved strong performance:
Also Read To Level Up Your Skills: What is Data Wrangling? Exploring Its Role in Data Analysis
This final step helps you understand which audio features contributed the most to the model’s classification decision. Random Forests have built-in functionality to compute and visualize feature importance. Here is the code for this step:
# Make sure the randomForest package is loaded
library(randomForest)
# Plot the feature importance
varImpPlot(rf_model, main = "Feature Importance - Random Forest")
The output for this code is:
Popular Data Science Programs
This chart shows which voice features are most important for predicting gender using the Random Forest model.
The graph shows that the pitch and variation in the voice are the biggest factors in telling whether a voice is male or female. The model mostly uses those clues to make accurate predictions.
In this Voice Gender Recognition project, we used R in Google Colab to classify voices as male or female based on acoustic features like pitch, frequency, and energy.
After preprocessing the data and splitting it into training and test sets, we trained three models: SVM, Random Forest, and Neural Network. Among them, the Random Forest model achieved the highest accuracy of 97.78%.
The Feature importance analysis showed that variables like meanfun and IQR were the most influential. This project has shown the effectiveness of machine learning in accurately identifying gender from voice characteristics.
Unlock the power of data with our popular Data Science courses, designed to make you proficient in analytics, machine learning, and big data!
Elevate your career by learning essential Data Science skills such as statistical modeling, big data processing, predictive analytics, and SQL!
Stay informed and inspired with our popular Data Science articles, offering expert insights, trends, and practical tips for aspiring data professionals!
Reference:
https://colab.research.google.com/drive/17Pnp50p2zbQBnMgAEVLk5oDY6ueISNkS#scrollTo=oeKalkIYx7Jr
779 articles published
Rohit Sharma is the Head of Revenue & Programs (International), with over 8 years of experience in business analytics, EdTech, and program management. He holds an M.Tech from IIT Delhi and specializes...
Speak with Data Science Expert
By submitting, I accept the T&C and
Privacy Policy
Start Your Career in Data Science Today
Top Resources