Candidate Elimination

 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

Comments

Popular posts from this blog

About me

A set of documents that need to be classified, use the Naive Bayesian Classifier

Keras