Solving SVM problems with ML libraries like scikit-learn | An Introduction to Machine Learning | CS771 | Case Study 02

Posted by


Support Vector Machines (SVM) are a widely-used machine learning algorithm for classification and regression tasks. They are particularly useful for linearly separable datasets, as they seek to find the hyperplane that maximally separates the classes in the feature space. However, solving SVM problems can be computationally intensive and complex, especially when dealing with large datasets or non-linear relationships between features.

To address these challenges, machine learning libraries like scikit-learn provide efficient and optimized implementations of SVM algorithms. In this tutorial, we will explore how scikit-learn solves SVM problems and walk through a simple example to demonstrate its usage.

  1. Importing scikit-learn and Loading the Dataset
    First, we need to import the necessary libraries and load a dataset for classification. We can use the popular Iris dataset for this purpose, which contains samples of three different classes of iris flowers.
import numpy as np
import pandas as pd
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score

# Load the Iris dataset
iris = datasets.load_iris()
X = iris.data
y = iris.target
  1. Splitting the Dataset into Training and Testing Sets
    Next, we split the dataset into training and testing sets to evaluate the performance of our SVM model. We will use 80% of the data for training and 20% for testing.
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
  1. Creating and Training the SVM Model
    Now, we can create an SVM model using scikit-learn’s SVC class and train it on the training data.
svm = SVC(kernel='linear')
svm.fit(X_train, y_train)

In this example, we specify the kernel parameter as ‘linear’ to use a linear kernel for our SVM model. However, scikit-learn also supports other kernel functions like ‘rbf’ (radial basis function) and ‘poly’ (polynomial) for handling non-linear relationships in the data.

  1. Making Predictions and Evaluating the Model
    After training the SVM model, we can make predictions on the test data and evaluate its performance using metrics like accuracy.
y_pred = svm.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy}')
  1. Hyperparameter Tuning and Cross-Validation
    To improve the performance of our SVM model, we can tune the hyperparameters such as the regularization parameter C and kernel function. Scikit-learn provides tools for hyperparameter tuning and cross-validation, allowing us to find the best combination of parameters for our model.
from sklearn.model_selection import GridSearchCV

param_grid = {'C': [0.1, 1, 10, 100],
              'kernel': ['linear', 'rbf', 'poly']}

grid_search = GridSearchCV(svm, param_grid, cv=5)
grid_search.fit(X_train, y_train)

best_params = grid_search.best_params_
best_model = grid_search.best_estimator_
print(f'Best parameters: {best_params}')

# Evaluate the best model
y_pred_best = best_model.predict(X_test)
accuracy_best = accuracy_score(y_test, y_pred_best)
print(f'Best model accuracy: {accuracy_best}')

In this example, we use GridSearchCV to search over the specified parameter grid and find the best combination of C and kernel values for our SVM model. The cv parameter specifies the number of cross-validation folds to use during the grid search.

  1. Conclusion
    In this tutorial, we learned how machine learning libraries like scikit-learn solve SVM problems by providing optimized implementations of SVM algorithms and tools for hyperparameter tuning and evaluation. By following these steps and exploring the scikit-learn documentation, you can successfully build and fine-tune SVM models for various classification tasks.