Uploaded by Clown

AIML Record programs

advertisement
Ex No: 1
Date :
IMPLEMENTATION OF UNINFORMED
SEARCH ALGORITHMS
Aim : To Implement the uninformed search algorithms using the python program.
A) BFS:
Algorithm :
Step 1 : Start.
Step 2 : Initialize an empty queue and mark all vertices as unvisited.
Step 3 : Add the starting vertex to the queue and mark it as visited.
Step 4 : While the queue is not empty:
Dequeue the next vertex from the queue.
For each adjacent vertex that is not visited, mark it as visited
and add it to the queue.
Step 5 : Repeat step 3 until the queue is empty.
Step 6 : Exit.
Program :
class Graph:
def _init_(self, vertices):
self.V = vertices
self.adj = [[] for i in range(vertices)]
def add_edge(self, u, v):
self.adj[u].append(v)
def bfs(self, start):
visited = [False] * self.V
queue = []
queue.append(start)
visited[start] = True
while queue:
node = queue.pop(0)
print(node, end=" ")
for neighbor in self.adj[node]:
if not visited[neighbor]:
visited[neighbor] = True
queue.append(neighbor)
g = Graph(6)
g.add_edge(0, 1)
g.add_edge(0, 2)
g.add_edge(1, 3)
g.add_edge(1, 4)
g.add_edge(2, 4)
g.add_edge(3, 4)
g.add_edge(3, 5)
g.add_edge(4, 5)
print("BFS:")
g.bfs(0)
Output :
BFS:
012345
B) DFS :
Algorithm :
Step 1 : Start.
Step 2 : Initialize an empty stack and mark all vertices as unvisited.
Step 3 : Add the starting vertex to the stack and mark it as visited.
Step 4 : While the stack is not empty :
Pop the next vertex from the stack.
For each adjacent vertex that is not visited, mark it as visited
and push it onto the stack.
Step 5 : Repeat step 3 until the stack is empty.
Step 6 : Exit.
Program :
class Graph:
def _init_(self, vertices):
self.V = vertices
self.adj = [[] for i in range(vertices)]
def add_edge(self, u, v):
self.adj[u].append(v)
def dfs(self, start):
visited = [False] * self.V
stack = []
stack.append(start)
visited[start] = True
while stack:
node = stack.pop()
print(node, end=" ")
for neighbor in self.adj[node]:
if not visited[neighbor]:
visited[neighbor] = True
stack.append(neighbor)
g = Graph(6)
g.add_edge(0, 1)
g.add_edge(0, 2)
g.add_edge(1, 3)
g.add_edge(1, 4)
g.add_edge(2, 4)
g.add_edge(3, 4)
g.add_edge(3, 5)
g.add_edge(4, 5)
print("DFS:")
g.dfs(0)
Output :
DFS:
024513
Result :
The program has been executed successfully and the output is verified.
Ex No : 2
Date :
IMPLEMENTATION OF INFORMED SEARCH
ALGORITHMS (A*, memory-bounded A)
Aim : To implement the informed search algorithms using python program.
A) A*:
Algorithm:
Step 1 : Start
Step 2 : Initialize the start and goal nodes.
Step 3 : Create an empty open list and a closed list.
Step 4 : Add the start node to the open list.
Step 5 : While the open list is not empty:
Find the node with the lowest f score in the open list.
If this node is the goal, return the path.
Otherwise, move the node to the closed list and consider its neighbors.
For each neighbor, calculate its g score (the cost to move to this node from the
start) and h score (the heuristic estimate of the cost to move from this node to the goal).
If the neighbor is not in the open list or its new g score is lower than its old
g score, update the neighbor's f, g, and h scores and set its parent to the current node.
Add the neighbor to the open list if it is not already there.
Step 6 : If the goal node is not reached, there is no path.
Step 7 : Exit
Program :
import heapq
class Node:
def _init_(self, state, parent=None, g=0, h=0):
self.state = state
self.parent = parent
self.g = g
self.h = h
def f_score(self):
return self.g + self.h
class Graph:
def _init_(self, vertices, edges):
self.vertices = vertices
self.edges = edges
def neighbors(self, node):
return [Node(state) for state in self.edges.get(node.state,
[])] def astar_search(graph, start, goal, heuristic):
start_node = Node(start)
goal_node = Node(goal)
open_list = []
closed_list = set()
heapq.heappush(open_list, (start_node.f_score(), start_node))
while open_list:
current_node = heapq.heappop(open_list)[1]
if current_node.state == goal_node.state:
path = []
while current_node:
path.append(current_node.state)
current_node = current_node.parent
return list(reversed(path))
closed_list.add(current_node.state)
for neighbor in graph.neighbors(current_node):
if neighbor.state in closed_list:
continue
new_g = current_node.g + 1
new_h = heuristic(neighbor.state, goal)
new_f = new_g + new_h
if (new_f, neighbor) in open_list:
if new_g < neighbor.g:
neighbor.g = new_g
neighbor.parent = current_node
else:
neighbor.g = new_g
neighbor.h = new_h
neighbor.parent = current_node
heapq.heappush(open_list, (new_f, neighbor))
return None
vertices = ['A', 'B', 'C', 'D', 'E']
edges = {'A': ['B', 'C'],
'B': ['A', 'D'],
'C': ['A', 'D', 'E'],
'D': ['B', 'C', 'E'],
'E': ['C', 'D']}
graph = Graph(vertices, edges)
start = 'A'
goal = 'E'
heuristic = lambda n, goal: 0
print("A* Search:")
print(astar_search(graph, start, goal, heuristic))
Output :
A* Search:
['A', 'C', 'E']
B) Memory-Bounded A :
Algorithm:
Step 1 : Start.
Step 2 : Initialize the open list with the start node.
Step 3 : While the open list is not empty:
Pop the node with the lowest f-value from the open list.
If the node is the goal, return the path.
Expand the node and add its successors to the open list.
If the open list size exceeds the memory limit, remove the node(s) with the highest
f-value.
Step 4 : If the open list is empty and the goal node has not been found, return failure.
Step 5 : Exit.
Program :
import heapq
# Define the Node class
class Node:
def _init_(self, state, g_value, h_value, parent):
self.state = state
self.g_value = g_value
self.h_value = h_value
self.parent = parent
def _lt_(self, other):
return (self.g_value + self.h_value) < (other.g_value + other.h_value)
# Define the heuristic function
def heuristic(state, goal):
return abs(state[0] - goal[0]) + abs(state[1] - goal[1])
# Define the MA* search function
def ma_star_search(start, goal, memory_limit):
open_list = []
closed_set = set()
heapq.heappush(open_list, Node(start, 0, heuristic(start, goal), None))
while open_list:
current = heapq.heappop(open_list)
if current.state == goal:
path = []
while current:
path.append(current.state)
current = current.parent
return list(reversed(path))
closed_set.add(current.state)
for successor in get_successors(current.state):
if successor in closed_set:
continue
g_value = current.g_value + 1
h_value = heuristic(successor, goal)
new_node = Node(successor, g_value, h_value, current)
if len(open_list) < memory_limit:
heapq.heappush(open_list, new_node)
else:
max_node = max(open_list)
if new_node < max_node:
heapq.heappush(open_list, new_node)
open_list.remove(max_node)
closed_set.remove(max_node.state)
return None
# Define the get_successors
function def get_successors(state):
successors = []
x, y = state
if x > 0:
successors.append((x-1, y))
if x < 2:
successors.append((x+1, y))
if y > 0:
successors.append((x, y-1))
if y < 2: successors.append((x,
y+1))
return successors
# Define the start and goal
states start = (0, 0)
goal = (2, 2)
# Run the MA* search algorithm path
= ma_star_search(start, goal, 3)
# Print the path
print("MA* Search Path:", path)
Output :
MA* Search Path: [(0, 0), (1, 0), (2, 0), (2, 1), (2, 2)]
Result :
The program has been executed successfully and the output has been verified.
Ex No : 3
Date :
Implement naïve Bayes models
Aim : To write a python program to implement naïve Bayes models.
Algorithm:
Step 1: Start
Step 2: import the dataset and necessary dependencies
Step 3: Calculate Prior Probability of Classes P(y)
Step 4: Calculate the Likelihood Table for all features
Step 5: Calculate Posterior Probability for each class using the Naive
Bayesian equation
Step 6: End
Program :
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import math
def accuracy_score(y_true, y_pred):
"""
score = (y_true - y_pred) / len(y_true) """
return round(float(sum(y_pred == y_true))/float(len(y_true)) * 100 ,2)
def pre_processing(df):
""" partioning data into features and target """
X = df.drop([df.columns[-1]], axis =
1) y = df[df.columns[-1]]
return X, y
class NaiveBayes:
def _init_(self):
self.features = list
self.likelihoods = {}
self.class_priors = {}
self.pred_priors = {}
self.X_train = np.array
self.y_train = np.array
self.train_size = int
self.num_feats = int
def fit(self, X, y):
self.features = list(X.columns)
self.X_train = X
self.y_train = y
self.train_size = X.shape[0]
self.num_feats = X.shape[1]
for feature in self.features:
self.likelihoods[feature] = {}
self.pred_priors[feature] = {}
for feat_val in np.unique(self.X_train[feature]):
self.pred_priors[feature].update({feat_val: 0})
for outcome in np.unique(self.y_train):
self.likelihoods[feature].update({feat_val+'_'+outcome:0})
self.class_priors.update({outcome: 0})
self._calc_class_prior()
self._calc_likelihoods()
self._calc_predictor_prior()
def _calc_class_prior(self):
""" P(c) - Prior Class Probability """
for outcome in np.unique(self.y_train):
outcome_count = sum(self.y_train == outcome)
self.class_priors[outcome] = outcome_count / self.train_size
def _calc_likelihoods(self):
""" P(x|c) - Likelihood """
for feature in self.features:
for outcome in np.unique(self.y_train):
outcome_count = sum(self.y_train == outcome)
feat_likelihood = self.X_train[feature][self.y_train[self.y_train
==outcome].index.values.tolist()].value_counts().to_dict()
for feat_val, count in feat_likelihood.items():
self.likelihoods[feature][feat_val + '_' + outcome] =
count/outcome_count
def _calc_predictor_prior(self):
""" P(x) - Evidence """
for feature in self.features:
feat_vals = self.X_train[feature].value_counts().to_dict()
for feat_val, count in feat_vals.items():
self.pred_priors[feature][feat_val] = count/self.train_size
def predict(self, X):
""" Calculates Posterior probability P(c|x) """
results = []
X = np.array(X)
for query in X:
probs_outcome = {}
for outcome in np.unique(self.y_train):
prior = self.class_priors[outcome]
likelihood = 1
evidence = 1
for feat, feat_val in zip(self.features, query):
likelihood *= self.likelihoods[feat][feat_val + '_' +outcome]
evidence *= self.pred_priors[feat][feat_val]
posterior = (likelihood * prior) / (evidence)
probs_outcome[outcome] = posterior
result = max(probs_outcome, key = lambda x: probs_outcome[x])
results.append(result)
return np.array(results)
if _name_ == "_main_":
#Weather Dataset
print("\nWeather Dataset:")
df = pd.read_table("E:/tennisdata.csv")
#print(df)
#Split fearures and target
X,y = pre_processing(df)
nb_clf = NaiveBayes()
nb_clf.fit(X, y)
print("Train Accuracy: {}".format(accuracy_score(y, nb_clf.predict(X))))
#Query 1:
query = np.array([['Rainy','Mild', 'Normal', 't']])
print("Query 1:- {} ---> {}".format(query, nb_clf.predict(query)))
#Query 2:
query = np.array([['Overcast','Cool', 'Normal', 't']])
print("Query 2:- {} ---> {}".format(query, nb_clf.predict(query)))
#Query 3:
query = np.array([['Sunny','Hot', 'High', 't']])
print("Query 3:- {} ---> {}".format(query, nb_clf.predict(query)))
Output :
Weather Dataset:
Train Accuracy: 7.14
Query 1:- [['Rainy' 'Mild' 'Normal' 't']] ---> ['D1,Sunny,Hot,High,Weak,No']
Query 2:- [['Overcast' 'Cool' 'Normal' 't']] ---> ['D1,Sunny,Hot,High,Weak,No']
Query 3:- [['Sunny' 'Hot' 'High' 't']] ---> ['D1,Sunny,Hot,High,Weak,No']
Result :
The program has been executed successfully and the output has been verified.
Ex No: 4
Date :
IMPLEMENT BAYESIAN NETWORKS
Aim : To write a python program to implement Bayesian networks.
Algorithm :
Step 1: start
Step 2: Construct the Bayesian network by specifying the nodes and their
conditional probability distributions.
Step 3: Identify the set of observed variables (i.e., the evidence).
Step 4: For each unobserved variable, compute its posterior probability given
the evidence using the Bayes' rule and the conditional probability distributions
of the variable and its parents.
Step 5: Return the posterior probabilities of interest.
Step 6: stop
Program :
from pgmpy.models import BayesianModel from
pgmpy.factors.discrete import TabularCPD
# Defining the model structure. We can define the network by just passing a list
of edges.
model = BayesianModel([('D', 'G'), ('I', 'G'), ('G', 'L'), ('I', 'S')])
# Defining individual CPDs.
cpd_d = TabularCPD(variable='D', variable_card=2, values=[[0.6], [0.4]])
cpd_i = TabularCPD(variable='I', variable_card=2, values=[[0.7], [0.3]])
#representes P(grade|diff, intel)
cpd_g = TabularCPD(variable='G', variable_card=3,
values=[[0.3, 0.05, 0.9, 0.5],
[0.4, 0.25, 0.08, 0.3],
[0.3, 0.7, 0.02, 0.2]],
evidence=['I', 'D'],
evidence_card=[2, 2])
cpd_l = TabularCPD(variable='L', variable_card=2,
values=[[0.1, 0.4, 0.99],
[0.9, 0.6, 0.01]],
evidence=['G'],
evidence_card=[3])
cpd_s = TabularCPD(variable='S', variable_card=2,
values=[[0.95, 0.2],
[0.05, 0.8]],
evidence=['I'],
evidence_card=[2])
# Associating the CPDs with the network
model.add_cpds(cpd_d, cpd_i, cpd_g, cpd_l, cpd_s)
# check_model checks for the network structure and CPDs and verifies that the
CPDs are correctly. defined and sum to 1.
model.check_model()
Output :
True
Result :
The program has been executed successfully and the output is verified.
Ex No: 5(a)
Date :
BUILDING REGRESSION MODELS
(LINEAR REGRESSION)
Aim : To write Linear regression algorithms using python.
.
Algorithm :
Step 1: Start the program.
Step 2: Import the necessary modules.
Step 3: Create two arrays namely x and y.
Step 4: Using plot() function display the output of the code .
Step 5: Display the result.
Step 6: Stop the program.
Program :
import matplotlib.pyplot as plt
from scipy import stats
x = [89,43,36,36,95,10,66,34,38,20,26,29,48,64,6,5,36,66,72,40]
y = [21,46,3,35,67,95,53,72,58,10,26,34,90,33,38,20,56,2,47,15]
slope, intercept, r, p, std_err = stats.linregress(x, y)
def myfunc(x):
return slope * x + intercept
mymodel = list(map(myfunc, x))
plt.scatter(x, y)
plt.plot(x, mymodel)
plt.show()
Output :
Result :
The program has been executed successfully and the output is verified.
Ex No: 5(b)
Date :
BUILDING REGRESSION MODELS
(POLYNOMIAL REGRESSION)
Aim : To write Polynomial regression algorithms using python.
.
Algorithm :
Step 1: Start the program.
Step 2:Import the necessary modules.
Step 3: Use polyfit() function to show the polynomial regression.
Step 4: display the data and compute EM for Bayesian network.
Step 5:Stop the program.
.
Program :
import numpy
import matplotlib.pyplot as plt
x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22]
y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100]
mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))
myline = numpy.linspace(1, 22, 100)
plt.scatter(x, y)
plt.plot(myline, mymodel(myline))
plt.show()
Output :
Result :
The program has been executed successfully and the output is verified.
Ex No: 5(c)
Date :
BUILDING REGRESSION MODELS
(MULTIPLE REGRESSION)
Aim : To write Multiple regression algorithms using python.
.
Algorithm :
Step 1: Start the program.
Step 2: Import the necessary modules.
Step 3: Use LinearRegression() function to show the Multiple regression.
Step 4: display the data and compute EM for Bayesian network.
Step 5: Stop the program.
Program :
import pandas
from sklearn import linear_model
df = pandas.read_csv("data.csv")
X = df[['Weight',
'Volume']] y = df['CO2']
regr = linear_model.LinearRegression()
regr.fit(X, y)
#predict the CO2 emission of a car where the weight is 2300kg,
and the volume is 1300cm3:
predictedCO2 = regr.predict([[2300, 1300]])
print(predictedCO2)
Output :
[107.2087328]
Result :
The program has been executed successfully and the output is verified.
Ex No: 6
Date :
DECESION TREE
Aim : To implement Decesion Tree using python.
.
Algorithm :
Step 1: Start the program.
Step 2: Import the necessary modules.
Step 3: Use matplotlib package to display the result
Step 4:display the data and compute EM for Bayesian network.
Step 5: Stop the program.
Program :
#Three lines to make our compiler able to draw:
import sys
import matplotlib
matplotlib.use('Agg')
import pandas
from sklearn import tree
from sklearn.tree import
DecisionTreeClassifier import
matplotlib.pyplot as plt
df = pandas.read_csv("data.csv")
d = {'UK': 0, 'USA': 1, 'N': 2}
df['Nationality'] =
df['Nationality'].map(d) d = {'YES': 1,
'NO': 0} df['Go'] = df['Go'].map(d)
features = ['Age', 'Experience', 'Rank', 'Nationality']
X = df[features]
y = df['Go']
dtree = DecisionTreeClassifier()
dtree = dtree.fit(X, y)
tree.plot_tree(dtree, feature_names=features)
#Two lines to make our compiler able to
draw: plt.savefig(sys.stdout.buffer)
sys.stdout.flush()
Output :
Result :
The program has been executed successfully and the output is verified.
Ex No : 7
Date :
Build svm model
Aim : To build a svm model using python program.
Algorithm:
Step 1: Start
Step 2: Load the dataset you want to use for training the model.
Step 3: preprocess the data to make it ready for training the model.
Step 4:split the data into two sets - one for training the model and the other for
testing the model.
Step 5: splitting it into training and testing sets.
Step 6: Once the SVM model is defined, you can train it using the training set.
Step 7: use cross-validation techniques like grid search to find the optimal values
for the hyperparameters.
Step 8: Stop.
Program :
# Step 1: Load the dataset
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data
y = iris.target
# Step 2: Preprocess the data
from sklearn.preprocessing import
StandardScaler scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# Step 3: Split the data into training and testing sets
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.3, random_state=42)
# Step 4: Define the SVM model
from sklearn.svm import SVC
svm_model = SVC(kernel='linear', C=1.0)
# Step 5: Train the SVM model
svm_model.fit(X_train, y_train)
# Step 6: Test the SVM model
y_pred = svm_model.predict(X_test)
from sklearn.metrics import accuracy_score
print("Accuracy: ", accuracy_score(y_test,
y_pred)) # Step 7: Tune the hyperparameters
from sklearn.model_selection import GridSearchCV
param_grid = {'C': [0.1, 1, 10], 'kernel': ['linear', 'rbf']}
grid_search = GridSearchCV(SVC(), param_grid,
cv=5) grid_search.fit(X_train, y_train)
print("Best parameters: ", grid_search.best_params_)
Output :
Accuracy: 0.9777777777777777
Best parameters: {'C': 10, 'kernel': 'linear'}
Result :
The program has been executed successfully and the output has been verified.
Ex No : 8
Date :
Ensemble techniques implementation
Aim : To build a Ensemble techniques implementation using python program.
Algorithm:
Step 1: In bagging, multiple models are trained to make the final prediction.
Step 2: In boosting, multiple weak models are trained to correct the errors of
the previous model.
Step 3: In stacking, multiple models are trained to combine the predictions of the
base models to make the final prediction.
Step 4: In averaging, multiple models are trained independently to make the
final prediction.
Step 5: In blending, multiple models are trained independently and their
predictions are combined using a weighted average.
Step 6: In ensemble of ensembles, multiple ensembles are created using
different techniques and combined to create a final prediction.
Program :
from sklearn.ensemble import VotingClassifier from
sklearn.ensemble import BaggingClassifier from
sklearn.ensemble import AdaBoostClassifier
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# Load the iris dataset
data = load_iris()
# Split the data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(data.data, data.target,
test_size=0.3, random_state=42)
# Define the base models
model1 = DecisionTreeClassifier(random_state=42)
model2 = LogisticRegression(random_state=42)
model3 = KNeighborsClassifier()
# Define the ensemble models
ensemble1 = BaggingClassifier(base_estimator=model1, n_estimators=10, random_state=42)
ensemble2 = AdaBoostClassifier(base_estimator=model2, n_estimators=10,
random_state=42)
ensemble3 = GradientBoostingClassifier(n_estimators=10, random_state=42)
# Define the voting classifier
voting_clf = VotingClassifier(estimators=[('bagging', ensemble1), ('adaboost',
ensemble2), ('gradient_boosting', ensemble3)], voting='hard')
# Train the voting classifier
voting_clf.fit(X_train, y_train)
# Make predictions on the test set
y_pred = voting_clf.predict(X_test)
# Calculate the accuracy of the ensemble model
accuracy = accuracy_score(y_test, y_pred)
print('Accuracy: %.2f' % accuracy)
Output :
Accuracy: 1.00
Result :
The program has been executed successfully and the output has been verified.
Ex No : 9
Date :
IMPLEMENT CLUSTERING ALGORITHMS –
KMEANS CLUSTERING
Aim : To implement kmeans clustering algorithms using python..
Algorithm:
Step 1:- Start the program.
Step 2:- Import the necessary modules.
Step 3:- Create two arrays namely x and y.
Step 4:- construct kmeans cluster using Kmeans().
Step 5:- Display the result.
Step 6:- Stop the program.
Program :
import matplotlib.pyplot as plt
x = [4, 5, 10, 4, 3, 11, 14 , 6, 10, 12]
y = [21, 19, 24, 17, 16, 25, 24, 22, 21, 21]
from sklearn.cluster import KMeans
data = list(zip(x, y))
inertias = []
for i in range(1,11):
kmeans = KMeans(n_clusters=i)
kmeans.fit(data)
inertias.append(kmeans.inertia_)
plt.plot(range(1,11), inertias, marker='o')
plt.title('Elbow method')
plt.xlabel('Number of clusters')
plt.ylabel('Inertia')
plt.show()
Output :
Result :
The program has been executed successfully and the output has been verified.
Ex No : 10
Date :
IMPLEMENT EM FOR BAYESIAN NETRWORK
Aim : To implement EM for Bayesian network using python.
Algorithm:
Step 1:- Start the program.
Step 2:- Import the necessary modules.
Step 3:- Read the csv file containing data.
Step 4:- display the data and compute EM for Bayesian network.
Step 5:- Stop the program
Program :
import numpy as np
import csv
import pandas as pd
from pgmpy.models import BayesianModel
from pgmpy.estimators import
MaximumLikelihoodEstimator from pgmpy.inference import
VariableElimination heartDisease = pd.read_csv('heart.csv')
heartDisease = heartDisease.replace('?',np.nan)
print('Few examples from the dataset are given below') print(heartDisease.head())
Model=BayesianModel([('age','trestbps'),('age','fbs'),('sex','trestbps'),('exang','trestbps'),('trestb
ps','heartdise
ase'),('fbs','heartdisease'),('heartdisease','restecg'),('heartdisease','thalach'),('heartdisease','ch
ol')])
print('\n Learning CPD using Maximum likelihood estimators') model.fit
(heartDisease, estimator =MaximumLikelihoodEstimator)
print('\n Inferencing with Bayesian Network:')
HeartDisease_infer = VariableElimination(model)
print('\n 1. Probability of HeartDisease given Age=30')
q=HeartDisease_infer.query(variables=['heartdisease'],evidence ={'age':28})
print(q['heartdisease'])
print('\n 2. Probability of HeartDisease given cholesterol=100') q=HeartDisease_infer
.query(variables=['heartdisease'],evidence ={'chol':100})
print(q['heartdisease'])
Output :
Few examples from the dataset are given below
age sex cp trestbps ...slope ca thal heartdisease 0 63 1 1 145 ... 3 0 6 0 1 67 1 4 160 ... 2 3
3 226714120...227133713130...303044102130...1030 [5 rows x 14 columns]
Learning CPD using Maximum likelihood estimators Inferencing with Bayesian Network:
1. Probability of HeartDisease given Age=28
╒════════════════╤═════════════════════╕ │
heartdisease │ phi(heartdisease) │
╞════════════════╪═════════════════════╡ │
heartdisease_0 │ 0.6791 │
├────────────────┼─────────────────────┤ │
heartdisease_1 │ 0.1212 │
├────────────────┼─────────────────────┤ │
heartdisease_2 │ 0.0810 │
├────────────────┼─────────────────────┤ │
heartdisease_3 │ 0.0939 │
├────────────────┼─────────────────────┤ │
heartdisease_4 │ 0.0247 │
╘════════════════╧═════════════════════╛
2. Probability of HeartDisease given cholesterol=100
╒════════════════╤═════════════════════╕ │
heartdisease │ phi(heartdisease) │
╞════════════════╪═════════════════════╡ │
heartdisease_0 │ 0.5400 │
├────────────────┼─────────────────────┤ │
heartdisease_1 │ 0.1533 │
├────────────────┼─────────────────────┤ │
heartdisease_2 │ 0.1303 │
├────────────────┼─────────────────────┤ │
heartdisease_3 │ 0.1259 │
├────────────────┼─────────────────────┤ │
heartdisease_4 │ 0.0506 │
╘════════════════╧═════════════════════╛
Result :
The program has been executed successfully and the output has been verified.
Ex No : 11
Date :
BUILD A SIMPLE NN MODELS
Aim : To develop or build a simple nueral network (NN) model using python.
Algorithm:
Step 1 : Start
Step 2 : Create a sigmoid function
Step 3 : Initialize the requires parameters weight and bias.
Step 4 : Create forword propagation function which takes x ,the initialized
parameters input and returns a2 , cache .
Step 5 : Create a calculate_cost function which takes a2 , y as input parameters
and return the cost.
Step 6 : Now create a backword_propagation function which takes x , y , cache ,
and parameters as input parameters and returns grads.
Step 7 : Create a update_parameters function which takes parameters ,
grads , learning_rate as input parameters and returns the updated values.
Step 8 : Now create model which takes the input parameters x , y , n_x , n_h ,
n_y , num_of_iters , learning_rate and returns the parameters as output.
Step 9 : Create a predict function which takes x and parameters as input
parameters and returns the prediction as output.
Step 10 : Stop
Program :
import numpy as np
def sigmoid(z):
return 1/(1+np.exp(-z))
def initialize_parameters(n_x,n_h,n_y):
w1 = np.random.randn(n_h,n_x)
b1 = np.zeros((n_h,1))
w2 = np.random.randn(n_y,n_h)
b2 = np.zeros(( n_y , 1))
parameters = {
"w1" : w1,
"b1" : b1,
"w2" : w2,
"b2" : b2,
}
return parameters
def forward_prop(x,parameters):
w1 = parameters["w1"]
b1 = parameters["b1"]
w2 = parameters["w2"]
b2 = parameters["b2"]
z1 = np.dot(w1 , x) + b1
a1 = np.tanh(z1)
z2 = np.dot(w2 , a1) + b2
a2 = sigmoid(z2)
cache = {
"a1" : a1,
"a2" : a2,
}
return a2 , cache
def calculate_cost(a2 , y):
cost = -np.sum(np.multiply( y, np.log(a2)) + np.multiply(1-y,np.log(1a2)))/m cost = np.squeeze(cost)
return cost
def backword_prop(x,y,cache , parameters):
a1 = cache["a1"]
a2 = cache["a2"]
w2 = parameters["w2"]
dz2 = a2 - y
dw2 = np.dot(dz2,a1.T)/m
db2 = np.sum(dz2,axis=1 , keepdims=True)/m
dz1 = np.multiply(np.dot(w2.T,dz2) , 1-np.power(a1,2))
dw1 = np.dot(dz1,x.T)/m
db1 = np.sum(dz1,axis=1,keepdims=True)/m
grads = {
"dw1" : dw1,
"db1" : db1,
"dw2" : dw2,
"db2" : db2
}
return grads
def update_parameters(parameters , grads , learning_rate):
w1 = parameters["w1"]
b1 = parameters["b1"]
w2 = parameters["w2"]
b2 = parameters["b2"]
dw1 = grads["dw1"]
db1 = grads["db1"]
dw2 = grads["dw2"]
db2 = grads["db2"]
w1 = w1 - learning_rate * dw1
b1 = b1 - learning_rate * db1
w2 = w2 - learning_rate * dw2
b2 = b2 - learning_rate * db2
new_parameters = {
"w1" : w1,
"b1" : b1,
"w2" : w2,
"b2" : b2,
}
return new_parameters
def model(x, y , n_x , n_h , n_y , num_of_iters , learning_rate):
parameters = initialize_parameters(n_x,n_h,n_y)
for i in range(0, num_of_iters+1):
a2 , cache = forward_prop(x,parameters)
cost = calculate_cost(a2,y)
grads = backword_prop(x,y,cache,parameters)
parameters = update_parameters(parameters , grads , learning_rate)
if (i%100 == 0):
print('Cost after iteration {:d}: {:f}'.format(i,cost))
return parameters
def predict(x,parameters):
a2 , cache = forward_prop(x,parameters)
yhat = a2
yhat = np.squeeze(yhat)
if yhat >= 0.5:
y_predict = 1
else:
y_predict = 0
return y_predict
np.random.seed(2)
x = np.array([[0,0,1,1],[0,1,0,1]])
y = np.array([[0,1,1,0]])
m = x.shape[1]
n_x = 2
n_h = 2
n_y = 1
num_of_iters = 1000
learning_rate = 0.3
trained_parameters = model(x,y,n_x,n_h,n_y,num_of_iters,learning_rate)
x_test = np.array([[1],[0]])
y_predict = predict(x_test , trained_parameters)
print("Neural Network prediction for example ( {:d}, {:d} is {:d} )".format(
x_test[0][0],x_test[1][0] , y_predict))
Output :
Cost after iteration 0: 0.856267
Cost after iteration 100: 0.347426
Cost after iteration 200: 0.101195
Cost after iteration 300: 0.053631
Cost after iteration 400: 0.036031
Cost after iteration 500: 0.027002
Cost after iteration 600: 0.021543
Cost after iteration 700: 0.017896
Cost after iteration 800: 0.015293
Cost after iteration 900: 0.013344
Cost after iteration 1000: 0.011831
Neural Network prediction for example ( 1, 0 is 1 )
Result :
The program has been executed successfully and the output has been verified.
Ex No : 12
Date :
Build deep learning NN models
Aim : To write a python program to build a deep learning neural networks model
Algorithm:
Step 1: Start
Step 2: Import the necessary libraries
Step 3: Set the random seed for reproducibility
Step 4: Define the model architecture
Step 5: Initialize the weights and biases for the input and hidden layers
Step 6: Initialize the weights and biases for the hidden and output layers
Step 7: Define the input data, labels and hyperparameters
Step 8: Define the Tensorflow variables for the weights and biases
Step 9: Define the forward propagation and backpropagation algorithms
Step 10: Train the model and make some predictions with the trained model
Step 11: End
Program :
import tensorflow as tf
from tensorflow import keras
# Load the data
(x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
# Preprocess the data
x_train = x_train.reshape((x_train.shape[0], 28 * 28)).astype('float32') /
255 x_test = x_test.reshape((x_test.shape[0], 28 * 28)).astype('float32') /
255 y_train = keras.utils.to_categorical(y_train) y_test =
keras.utils.to_categorical(y_test)
# Define the model architecture
model = keras.models.Sequential([
keras.layers.Dense(128, activation='relu', input_shape=(28 *
28,)), keras.layers.Dropout(0.5),
keras.layers.Dense(10, activation='softmax')
])
# Compile the model
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
# Train the model
model.fit(x_train, y_train, epochs=10, batch_size=32, validation_data=(x_test, y_test))
# Evaluate the model
test_loss, test_acc = model.evaluate(x_test, y_test)
print('Test accuracy:', test_acc)
Output :
Result :
The program has been executed successfully and the output has been verified.
Download