0% found this document useful (0 votes)
5 views4 pages

Diabetes Prediction Model in Python

Uploaded by

HARI SAI SAM
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
5 views4 pages

Diabetes Prediction Model in Python

Uploaded by

HARI SAI SAM
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

Program:

import csv
import random
import math
#1. Load Data
def loadCsv(filename):
lines = [Link](open(filename, "rt"))
dataset = list(lines)
for i in range(len(dataset)):
dataset[i] = [float(x) for x in dataset[i]]
return dataset
# Split the data into Training and Testing randomly
def splitDataset(dataset, splitRatio):
trainSize = int(len(dataset) * splitRatio)
trainSet = []
copy = list(dataset)
while len(trainSet) < trainSize:
index = [Link](len(copy))
[Link]([Link](index))
return [trainSet, copy]
# Separate data by Class
def separateByClass(dataset):
separated = {}
for i in range(len(dataset)):
vector = dataset[i]
if (vector[-1] not in separated):
separated[vector[-1]] = []
separated[vector[-1]].append(vector)
return separated
# Calculate Mean
def mean(numbers):
return sum(numbers)/float(len(numbers))
# Calculate Standard Deviation
def stdev(numbers):
avg = mean(numbers)
variance = sum([pow(x-avg,2) for x in numbers])/float(len(numbers)-1)
return [Link](variance)
# Summarize the data
def summarize(dataset):
summaries = [(mean(attribute), stdev(attribute)) for attribute in zip(*dataset)]
del summaries[-1]
return summaries
# Summarize Attributes by Class
def summarizeByClass(dataset):
separated = separateByClass(dataset)
print(len(separated))
summaries = {}
for classValue, instances in [Link]():
summaries[classValue] = summarize(instances)
print(summaries)
return summaries
# Calculate Gaussian Probability Density Function
def calculateProbability(x, mean, stdev):
exponent = [Link](-([Link](x-mean,2)/(2*[Link](stdev,2))))
return (1 / ([Link](2*[Link]) * stdev)) * exponent
# Calculate Class Probabilities
def calculateClassProbabilities(summaries, inputVector):
probabilities = {}
for classValue, classSummaries in [Link]():
probabilities[classValue] = 1
for i in range(len(classSummaries)):
mean, stdev = classSummaries[i]
x = inputVector[i]
probabilities[classValue] *= calculateProbability(x, mean, stdev)
return probabilities
# Make a Prediction
def predict(summaries, inputVector):
probabilities = calculateClassProbabilities(summaries, inputVector)
bestLabel, bestProb = None, -1
for classValue, probability in [Link]():
if bestLabel is None or probability > bestProb:
bestProb = probability
bestLabel = classValue
return bestLabel
# Return a list of predictions for each test instance.
def getPredictions(summaries, testSet):
predictions = []
for i in range(len(testSet)):
result = predict(summaries, testSet[i])
[Link](result)
return predictions
# Calculate accuracy ratio.
def getAccuracy(testSet, predictions):
correct = 0
for i in range(len(testSet)):
if testSet[i][-1] == predictions[i]:
correct += 1
return (correct/float(len(testSet))) * 100.0
filename = '[Link]'
splitRatio = 0.70
dataset = loadCsv(filename)
trainingSet, testSet = splitDataset(dataset, splitRatio)
print('Split {0} rows into train={1} and test={2} rows'.format(len(dataset), len(trainingSet),
len(testSet)))
# Prepare model
summaries = summarizeByClass(trainingSet)
# Test model
predictions = getPredictions(summaries, testSet)
accuracy = getAccuracy(testSet, predictions)
print('Accuracy: {0}%'.format(accuracy))
OUTPUT:
Split 250 rows into train=175 and test=75 rows
2
{1.0: [(5.188405797101449, 3.144908875135665), (141.1159420289855, 30.431473757532896),
(72.44927536231884, 18.13635950878467), (19.855072463768117, 17.342802679327338),
(113.08695652173913, 159.1615660015684)], 0.0: [(3.2735849056603774, 2.792960603162459),
(109.0754716981132, 26.201671380061143), (69.5, 16.88405841530491), (19.358490566037737,
15.185951326799056), (68.72641509433963, 111.65606485725267)]}
Accuracy: 68.0%

You might also like