Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def k_prototypes_single(Xnum, Xcat, nnumattrs, ncatattrs, n_clusters, n_points,
max_iter, num_dissim, cat_dissim, gamma, init, init_no,
verbose, random_state):
# For numerical part of initialization, we don't have a guarantee
# that there is not an empty cluster, so we need to retry until
# there is none.
random_state = check_random_state(random_state)
init_tries = 0
while True:
init_tries += 1
# _____ INIT _____
if verbose:
print("Init: initializing centroids")
if isinstance(init, str) and init.lower() == 'huang':
centroids = kmodes.init_huang(Xcat, n_clusters, cat_dissim, random_state)
elif isinstance(init, str) and init.lower() == 'cao':
centroids = kmodes.init_cao(Xcat, n_clusters, cat_dissim)
elif isinstance(init, str) and init.lower() == 'random':
seeds = random_state.choice(range(n_points), n_clusters)
centroids = Xcat[seeds]
elif isinstance(init, list):
# Make sure inits are 2D arrays.
init = [np.atleast_2d(cur_init).T if len(cur_init.shape) == 1
else cur_init
for cur_init in init]
assert init[0].shape[0] == n_clusters, \
"Wrong number of initial numerical centroids in init " \
"({}, should be {}).".format(init[0].shape[0], n_clusters)
assert init[0].shape[1] == nnumattrs, \
"Wrong number of numerical attributes in init ({}, should be {})." \
.format(init[0].shape[1], nnumattrs)