예제 #1
0
def initialize(init, k, G, X):
    """Initializaton function to use in energy Lloyd and Hartigan."""
    if init == "spectral":
        z0 = initialization.topeigen(k, G)
        Z0 = eclust.ztoZ(z0)
    elif init == "k-means++":
        z0 = initialization.kmeanspp(k, X)
        Z0 = eclust.ztoZ(z0)
    elif init == "random":
        z0 = np.random.randint(0, k, len(X))
        Z0 = eclust.ztoZ(z0)
    else:
        raise ValueError("No initialization method provided")
    return Z0
def initialize(init, k, G, X):
    """Initializaton function to use in energy Lloyd and Hartigan."""
    if init == "spectral":
        z0 = initialization.topeigen(k, G)
        Z0 = eclust.ztoZ(z0)
    elif init == "k-means++":
        z0 = initialization.kmeanspp(k, X)
        Z0 = eclust.ztoZ(z0)
    elif init == "random":
        z0 = np.random.randint(0, k, len(X))
        Z0 = eclust.ztoZ(z0)
    else:
        raise ValueError("No initialization method provided")
    return Z0
예제 #3
0
def energy_hartigan(k, X, G, run_times=5, return_labels=False):
    best_score = -np.inf
    for rt in range(run_times):
        z0 = initialization.kmeanspp(k, X)
        Z0 = eclust.ztoZ(z0)
        zh = eclust.energy_hartigan(k, G, Z0, max_iter=300)
        Zh = eclust.ztoZ(zh)
        score = eclust.objective(Zh, G)
        if score > best_score:
            best_score = score
            best_zh = zh
    if return_labels:
        return best_zh
    else:
        return best_score
예제 #4
0
def energy_hartigan(k, X, G, run_times=5, return_labels=False):
    best_score = -np.inf
    for rt in range(run_times):
        z0 = initialization.kmeanspp(k, X)
        Z0 = eclust.ztoZ(z0)
        zh = eclust.energy_hartigan(k, G, Z0, max_iter=300)
        Zh = eclust.ztoZ(zh)
        score = eclust.objective(Zh, G)
        if score > best_score:
            best_score = score
            best_zh = zh
    if return_labels:
        return best_zh
    else:
        return best_score
def energy_hartigan(k, X, G, run_times=5, init="spectral"):
    """Run few times and pick the best objective function value."""
    best_score = -np.inf
    for rt in range(run_times):
        Z0 = initialize(init, k, G, X)
        zh = eclust.energy_hartigan(k, G, Z0, max_iter=300)
        Zh = eclust.ztoZ(zh)
        score = eclust.objective(Zh, G)
        
        if score > best_score:
            best_score = score
            best_z = zh

    return best_z
def energy_hartigan(k, X, G, run_times=10, init="spectral"):
    """Run few times and pick the best objective function value."""
    best_score = -np.inf
    for rt in range(run_times):
        Z0 = initialize(init, k, G, X)
        zh = eclust.energy_hartigan(k, G, Z0, max_iter=300)
        Zh = eclust.ztoZ(zh)
        score = eclust.objective(Zh, G)
        
        if score > best_score:
            best_score = score
            best_z = zh

    return best_z
def energy_spectral(k, X, G, run_times=5, init="random"):
    """Run few times and pick the best objective function value.
    Choose the initializatio for k-means, which can be k-means++ or random.
    
    """
    best_score = -np.inf
    for rt in range(run_times):
        zh = initialization.topeigen(k, G, run_times=run_times, init="random")
        Zh = eclust.ztoZ(zh)
        score = eclust.objective(Zh, G)
        
        if score > best_score:
            best_score = score
            best_z = zh

    return best_z
def energy_spectral(k, X, G, run_times=10, init="random"):
    """Run few times and pick the best objective function value.
    Choose the initializatio for k-means, which can be k-means++ or random.
    
    """
    best_score = -np.inf
    for rt in range(run_times):
        zh = initialization.topeigen(k, G, run_times=run_times, init="random")
        Zh = eclust.ztoZ(zh)
        score = eclust.objective(Zh, G)
        
        if score > best_score:
            best_score = score
            best_z = zh

    return best_z
예제 #9
0
def energy_hartigan(k, X, G, z, run_times=10, init="spectral"):
    """Run few times and pick the best objective function value."""
    best_score = -np.inf
    for rt in range(run_times):
        Z0 = initialize(init, k, G, X)
        zh = eclust.energy_hartigan(k, G, Z0, max_iter=300)
        Zh = eclust.ztoZ(zh)
        score = eclust.objective(Zh, G)

        if score > best_score:
            best_score = score
            best_z = zh

    a = metric.accuracy(z, best_z)
    v = metric.variation_information(z, best_z)
    return a, v
def energy_lloyd(k, X, G, z, run_times=10, init="spectral"):
    """Run few times and pick the best objective function value."""
    best_score = -np.inf
    for rt in range(run_times):
        Z0 = initialize(init, k, G, X)
        zh = eclust.energy_lloyd(k, G, Z0, max_iter=300)
        Zh = eclust.ztoZ(zh)
        score = eclust.objective(Zh, G)
        
        if score > best_score:
            best_score = score
            best_z = zh

    a = metric.accuracy(z, best_z)
    v = metric.variation_information(z, best_z)
    return a, v