def candidate_elimination(attributes, target):
"""
Implements the Candidate-Elimination algorithm for concept learning.
Parameters:
- attributes: List of examples (list of lists).
- target: List of target values (list of strings, e.g., 'Yes' or 'No').
Returns:
- S: Most specific boundary.
- G: Most general boundary.
"""
# Step 1: Initialize S (most specific) and G (most general)
num_attributes = len(attributes[0])
S = ["Φ"] * num_attributes
G = [["?"] * num_attributes]
# Step 2: Process each training example
for i, example in enumerate(attributes):
if target[i] == "Yes": # Positive example
# Remove inconsistent hypotheses from G
G = [g for g in G if is_consistent(g, example)]
# Update S: Generalize it to include the current example
for j in range(num_attributes):
if S[j] == "Φ":
S[j] = example[j] # Initialize
elif S[j] != example[j]:
S[j] = "?" # Generalize
elif target[i] == "No": # Negative example
# Remove inconsistent hypotheses from S
if is_consistent(S, example):
S = ["Φ"] * num_attributes
# Update G: Specialize it to exclude the current example
G = specialize_hypotheses(G, example)
return S, G
def is_consistent(hypothesis, example):
"""
Checks if a hypothesis is consistent with an example.
Parameters:
- hypothesis: A hypothesis (list of strings).
- example: An example (list of strings).
Returns:
- True if consistent, False otherwise.
"""
for h, e in zip(hypothesis, example):
if h != "?" and h != e:
return False
return True
def specialize_hypotheses(general_hypotheses, example):
"""
Specializes the general hypotheses to exclude the given example.
Parameters:
- general_hypotheses: List of general hypotheses.
- example: The negative example to exclude.
Returns:
- A new list of specialized hypotheses.
"""
specialized_hypotheses = []
for g in general_hypotheses:
for i in range(len(g)):
if g[i] == "?":
for value in set(example):
if value != example[i]:
new_hypothesis = g[:]
new_hypothesis[i] = value
if new_hypothesis not in specialized_hypotheses:
specialized_hypotheses.append(new_hypothesis)
return specialized_hypotheses
# Example Dataset
attributes = [
["Sunny", "Warm", "Normal", "Strong", "Warm", "Same"],
["Sunny", "Warm", "High", "Strong", "Warm", "Same"],
["Rainy", "Cold", "High", "Strong", "Warm", "Change"],
["Sunny", "Warm", "High", "Weak", "Warm", "Same"]
]
target = ["Yes", "Yes", "No", "Yes"]
# Run Candidate-Elimination Algorithm
specific_boundary, general_boundary = candidate_elimination(attributes, target)
# Display Results
print("Most Specific Boundary (S):", specific_boundary)
print("Most General Boundary (G):", general_boundary)
x
"""
Implements the Candidate-Elimination algorithm for concept learning.
Parameters:
- attributes: List of examples (list of lists).
- target: List of target values (list of strings, e.g., 'Yes' or 'No').
Returns:
- S: Most specific boundary.
- G: Most general boundary.
"""
# Step 1: Initialize S (most specific) and G (most general)
num_attributes = len(attributes[0])
S = ["Φ"] * num_attributes
G = [["?"] * num_attributes]
# Step 2: Process each training example
for i, example in enumerate(attributes):
if target[i] == "Yes": # Positive example
# Remove inconsistent hypotheses from G
G = [g for g in G if is_consistent(g, example)]
# Update S: Generalize it to include the current example
for j in range(num_attributes):
if S[j] == "Φ":
S[j] = example[j] # Initialize
elif S[j] != example[j]:
S[j] = "?" # Generalize
elif target[i] == "No": # Negative example
# Remove inconsistent hypotheses from S
if is_consistent(S, example):
S = ["Φ"] * num_attributes
# Update G: Specialize it to exclude the current example
G = specialize_hypotheses(G, example)
return S, G
def is_consistent(hypothesis, example):
"""
Checks if a hypothesis is consistent with an example.
Parameters:
- hypothesis: A hypothesis (list of strings).
- example: An example (list of strings).
Returns:
- True if consistent, False otherwise.
"""
for h, e in zip(hypothesis, example):
if h != "?" and h != e:
return False
return True
def specialize_hypotheses(general_hypotheses, example):
"""
Specializes the general hypotheses to exclude the given example.
Parameters:
- general_hypotheses: List of general hypotheses.
- example: The negative example to exclude.
Returns:
- A new list of specialized hypotheses.
"""
specialized_hypotheses = []
for g in general_hypotheses:
for i in range(len(g)):
if g[i] == "?":
for value in set(example):
if value != example[i]:
new_hypothesis = g[:]
new_hypothesis[i] = value
if new_hypothesis not in specialized_hypotheses:
specialized_hypotheses.append(new_hypothesis)
return specialized_hypotheses
# Example Dataset
attributes = [
["Sunny", "Warm", "Normal", "Strong", "Warm", "Same"],
["Sunny", "Warm", "High", "Strong", "Warm", "Same"],
["Rainy", "Cold", "High", "Strong", "Warm", "Change"],
["Sunny", "Warm", "High", "Weak", "Warm", "Same"]
]
target = ["Yes", "Yes", "No", "Yes"]
# Run Candidate-Elimination Algorithm
specific_boundary, general_boundary = candidate_elimination(attributes, target)
# Display Results
print("Most Specific Boundary (S):", specific_boundary)
print("Most General Boundary (G):", general_boundary)
x
Comments