In the 1960s, Lotfi Zadeh introduced the science of fuzzy logic to analyze the systems where Boolean logic was not good enough. To capture the (lack of) precision, Boolean logic improvises only two options: true or false.
There are different scenarios in the real world that can be clearly marked as true or false. For example:
The truthfulness of the first two statements can be captured by Boolean logic because the possible answer is either true or false. However, the truthfulness of the third statement is relatively harder to capture using Boolean logic. Labelling it as a true or false statement won’t capture the ground reality. The actual answer lies somewhere between true and false. Fuzzy logic takes care of such situations. Let’s first understand the basics of fuzzy logic.
Fuzzy logic improvises a continuous line to represent the magnitude of the truthfulness of a given statement. For completely true or false statements, it will take the extreme points of the line: 1 or 0. However, the magnitude of truthfulness of a statement or concept can be represented using any appropriate membership value between 0 and 1, as shown in the following figure:
There are certain situations where we need to capture the notion of partial truth. For example, “Sara is a tall person.” It depends on how we define the concept of someone’s height. If we define a strict threshold like anyone having a height of more than 5 feet is tall, then this point can serve as the cutoff to categorize someone as tall or not tall. If Alice has a height less than 5 feet (say 4.9 feet), then we’ll say that Alice is not tall. We’ll output the same answer for any smaller number. If Bob has a height greater than 5 feet (say 5.1 feet), then we’ll treat Bob as a tall person. We’ll do the same for a person whose height is significantly higher than 5 feet. The absolute difference between the heights of Alice and Bob is 0.2 feet, but we’re classifying them into two mutually exclusive categories because of the strict cutoff. This is what a Boolean decision is. The same phenomenon has been shown in the following figure:
Fuzzy logic is the superset of Boolean logic. It captures the notion of partial truthfulness beyond capturing absolute true or false answers. Each linguistic concept is modeled as a fuzzy variable. Values of fuzzy variables are represented as membership functions. Fuzzy membership functions capture the notion of continuity and partial truthfulness. Moreover, they can overlap with each other. For example, the concept of tallness has been modeled as a fuzzy variable in the following figure. The variable can have three possible values: short, medium and tall. Each fuzzy value is modeled as a membership function. The membership value for each membership function is computed based on the actual height. These fuzzy membership functions representing their respective linguistic values can overlap with each other as shown below:
Let’s compute the membership values for the height of Alice as shown in the following figure:
The figure above shows:
Let’s repeat the same experiment for the height of Bob as shown in the following figure:
The figure above shows:
In both figures, the coloured lines show membership of the heights of Alice and Bob in each of the membership functions. For instance, the height of Alice has a membership value of 1.0 in the membership function and Bob has a membership value of 0.98 in the same function. Comparing both of them reveals that they’re quite close to each other. The same is true for the other two membership functions. The membership value in a particular membership function represents the degree of truthfulness of belonging to that particular concept or fuzzy value.
In conventional sets, the membership of each element to a set is either 0 or 1. We interpret it as an element belonging to a set or not. For example, the following set
can be represented as follows:
In this notation, each element of the set is notated as where is an element and is the membership value of that element in the set. If is 1 then the element is present in the set. If is 0 then the element is not present in the set. For conventional sets, we may omit writing the explicit value of , as shown above.
Fuzzy sets capture the partial membership of an element to a set too. For example, if we have to create a set named to notate the membership of Alice and Bob, we can write it as follows:
The fundamental principles of set theory remain the same. Let’s take an example of two fuzzy sets and , as shown below, and exercise the fundamental properties of sets:
The union of the two fuzzy sets is computed by taking the maximum of the two membership values of an element in both sets. For example,
The intersection of the two fuzzy sets is computed by taking the minimum of the two membership values of an element in both sets. For example,
The complement of a fuzzy set is computed by subtracting the membership value of each element from 1. For example,
A = dict()B = dict()Union_of_A_B = dict()Intersection_of_A_B = dict()Complement_of_A = dict()Complement_of_B = dict()A = {"red":0.8, "green":0.5, "blue":0.2}B = {"red":0.6, "green":0.9, "blue":0.7}for a,b in zip(A,B):Union_of_A_B[a] = max(A[a], B[a])Intersection_of_A_B[a] = max(A[a], B[a])Complement_of_A[a] = round(1 - A[a],1)Complement_of_B[b] = round(1 - B[b],1)print "Union of A and B = ", Union_of_A_Bprint "Intersection of A and B = ", Intersection_of_A_Bprint "Complement of A = ", Complement_of_Aprint "Complement of B = ", Complement_of_B
Let’s apply these basic operations to verify that De Morgan’s law holds for fuzzy sets:
Hence,
Similarly,
Hence,
Let’s verify these results:
def intersection(A, B):Intersection_of_A_B = dict()for a,b in zip(A,B):Intersection_of_A_B[a] = min(A[a], B[a])return Intersection_of_A_Bdef union(A, B):Union_of_A_B = dict()for a,b in zip(A,B):Union_of_A_B[a] = max(A[a], B[b])return Union_of_A_Bdef complement(A):Complement_of_A = dict()for a in A:Complement_of_A[a] = round(1 - A[a],1)return Complement_of_AA = dict()B = dict()A = {"red":0.8, "green":0.5, "blue":0.2}B = {"red":0.6, "green":0.9, "blue":0.7}print "Union of A and B = ", union(A, B)print "Intersection of A and B = ", intersection(A, B)print "Complement of A = ", complement(A)print "Complement of B = ", complement(B)print "Rule-1: ", complement(intersection(A, B)), " = ", union(complement(A), complement(B))print "Rule-2: ", complement(union(A, B)), " = ", intersection(complement(A), complement(B))
Example application domains of fuzzy logic are listed below:
For a deeper dive into the relevant subject areas and applications, you may explore:
Getting Started with Image Classification with PyTorch
PyTorch is a machine learning framework used in a wide array of popular applications, including Tesla’s Autopilot and Pyro, Uber’s probabilistic modeling engine. This course is an introduction to image classification using PyTorch’s computer vision models for training and tuning your own model. You’ll start with the fundamental concepts of applying machine learning and its applications to image classification before exploring the process of training your AI model. You’ll prepare data for intake by the computer vision model with image pre-processing, set up pipelines for training your model, and fine-tune the variables to improve predictive performance. You’ll finish by deploying the image classification model by converting to ONNX format and serving it via REST API. By the end of this course, you’ll be able to build and deploy your own image classification models from scratch.
Performing Modern Statistical Analysis with R
R is a widely used programming language for statistical computing. It features robust libraries that cover everything from basic data analytics to visualization functions for presentation. R is used by professional data scientists, researchers, and marketers. This course is a comprehensive introduction to modern statistical analysis using R, particularly for researchers in life and environmental sciences. You’ll review R and cover its functionality with its various packages. You'll review essential statistical functions including data description, linear modeling, regression analysis, and more. You’ll also cover advanced analytical techniques looking at analysis of variance, factorial designs, and non-normal data distributions. You’ll also discuss generalized linear models, including binomial GLMs and GLMs for binary data. By the end of this course, you’ll be prepared to apply statistical methods to real-world problems and interpret and analyze various models in an effective contemporary manner.
Game Data Science Using R
Game data science is emerging as a significant field of study due to the emergence of social games embedded in online social networks. The ubiquity of social games gives access to new data sources and impacts essential business decisions, given the introduction of freemium business models. Game data science covers collecting, storing, analyzing data, and communicating insights. This course will teach you game data extraction, processing, data abstraction, data analysis through visualization, data clustering, supervised learning, neural networks, and advanced sequence analysis using a case study and many examples in the R programming language.
Free Resources