0% found this document useful (0 votes)
16 views6 pages

ML Exp 3

fgfg

Uploaded by

arunkumarmak651
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)
16 views6 pages

ML Exp 3

fgfg

Uploaded by

arunkumarmak651
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
You are on page 1/ 6

3.

ID3 ALGORITHM

Program:

import math
import csv
def load_csv(filename):
lines=csv.reader(open(filename,"r"));
dataset=list(lines)
headers=dataset.pop(0)
return dataset,headers
class Node:
def __init__(self,attribute):
self.attribute=attribute
self.children=[]
self.answer=" "
def subtables(data, col, delete):
dic = {}
coldata = [row[col] for row in data]
attr = list(set(coldata))
counts = [0] * len(attr)
r = len(data)
c = len(data[0])
for x in range(len(attr)):
for y in range(r):
if data[y][col] == attr[x]:
counts[x] += 1
dic[attr[x]] = [[0 for i in range(c)] for j in range(counts[x])]
pos = 0
for y in range(r):
T AKHILA REDDY 21F41A05A5 MACHINE LEARMNING LAB
if data[y][col] == attr[x]:
if delete:
del data[y][col]
dic[attr[x]][pos] = data[y]
pos += 1
return attr, dic
def entropy(s):
attr=list(set(s))
if len(attr)==1:
return 0
counts=[0,0]
for i in range(2):
counts[i]=sum([1 for x in s if attr[i]==x])/(len(s)*1.0)
sums=0
for cnt in counts:
sums+=-1*cnt*math.log(cnt,2)
return sums
def compute_gain(data, col):
attr, dic = subtables(data, col, delete=False)
total_size = len(data)
entropies = [0] * len(attr)
ratio = [0] * len(attr)
total_entropy = entropy([row[-1] for row in data])
for x in range(len(attr)):
ratio[x]=len(dic[attr[x]]) / (total_size * 1.0)
entropies[x] = entropy([row[-1]for row in dic[attr[x]]])
total_entropy -= ratio[x] * entropies[x]
return total_entropy
def build_tree(data,features):

T AKHILA REDDY 21F41A05A5 MACHINE LEARMNING LAB


lastcol=[row[-1]for row in data]
if(len(set(lastcol)))==1:
node=Node(" ")
node.answer=lastcol[0]
return node
n=len(data[0])-1
gains=[0]*n
for col in range(n):
gains[col]=compute_gain(data,col)
split=gains.index(max(gains))
node=Node(features[split])
fea=features[:split]+features[split+1:]
attr,dic=subtables(data,split,delete=True)
for x in range(len(attr)):
child=build_tree(dic[attr[x]],fea)
node.children.append((attr[x],child))
return node
def print_tree(node,level):
if node.answer!=" ":
print(" "*level,node.answer)
return
print(" "*level,node.attribute)
for value,n in node.children:
print(" "*(level+1),value)
print_tree(n,level+2)
def classify(node,x_test,features):
if node.answer!=" ":
print(node.answer)
return

T AKHILA REDDY 21F41A05A5 MACHINE LEARMNING LAB


pos=features.index(node.attribute)
for value,n in node.children:
if x_test[pos]==value:
classify(n,x_test,features)
''' Main Program'''
dataset,features=load_csv("venkatesh.csv")
node1=build_tree(dataset,features)
print("the decision tree for the dataset using ID3 algorithm is")
print_tree(node1,0)
testdata,features=load_csv("venkatesh_test.csv")
for xtest in testdata:
print("The test instance:", xtest)
print("The label for test instance:",end=" ")
classify(node1,xtest,features)

T AKHILA REDDY 21F41A05A5 MACHINE LEARMNING LAB


Training data:

Day Outlook Temperature Humidity Wind Play Tennis


D1 Sunny Hot High Weak No
D2 Sunny Hot High Strong No
D3 Overcast Hot High Weak Yes
D4 Rain Mild High Weak Yes
D5 Rain Cool Normal Weak Yes
D6 Rain Cool Normal Strong No
D7 Overcast Cool Normal Strong Yes
D8 Sunny Mild High Weak No
D9 Sunny Cool Normal Weak Yes
D10 Rain Mild Normal Weak Yes
D11 Sunny Mild Normal Strong Yes
D12 Overcast Mild High Strong Yes
D13 Overcast Hot Normal Weak Yes
D14 Rain Mild High Strong No

Test data:
Day Outlook Temperature Humidity Wind
T1 Rain Cool Normal Strong
T2 Sunny Mild Normal Strong

T AKHILA REDDY 21F41A05A5 MACHINE LEARMNING LAB


Output:
the decision tree for the dataset using ID3 algorithm is
Outlook
Sunny
Humidity
High
No
Normal
Yes
Overcast
Yes
Rain
Wind
Weak
Yes
Strong
No
The test instance: ['Rain', 'Cool', 'Normal', 'Strong']
The label for test instance: No
The test instance: ['Sunny', 'Mild', 'Normal', 'Strong']
The label for test instance: Yes

T AKHILA REDDY 21F41A05A5 MACHINE LEARMNING LAB

You might also like