Я реализую алгоритм KMeans, используя numpy.
Я делаю массив с именованными расстояниями, подобный этому:
[[ 5. 1. 1. 1. 2. 1. 3. 1. 1. 1.]
[ 5. 4. 4. 5. 7. 10. 3. 2. 1. 0.]
[ 3. 1. 1. 1. 2. 2. 3. 1. 1. 1.]
[ 6. 8. 8. 1. 3. 4. 3. 7. 1. 1.]
[ 4. 1. 1. 3. 2. 1. 3. 1. 1. 1.]
[ 8. 10. 10. 8. 7. 10. 9. 7. 1. 0.]
[ 1. 1. 1. 1. 2. 10. 3. 1. 1. 0.]
[ 2. 1. 2. 1. 2. 1. 3. 1. 1. 1.]
[ 2. 1. 1. 1. 2. 1. 1. 1. 5. 1.]
[ 4. 2. 1. 1. 2. 1. 2. 1. 1. 1.]]
Где первые 9 столбцов являются точками данных, а последний столбец - кластером, которому назначается точка данных для случайных центроидов.
В этом массиве я хотел бы видеть эти значения, 0,1,2 в последнем столбце. Как и в приведенном выше массиве, мы видим только 0,1 в последнем столбце. В этом случае я намерен изменить половину наиболее распространенного значения с последнего столбца на 2.
k=3
for c in range(k):
if c in distances[:, -1]:
else:
x = np.bincount(distances[:,-1]).argmax()
distances[:len(distances[distances[:,-1]==x])/2,-1][distances[:,-1] == x] = c
Однако это не работает. Может кто-нибудь помочь мне решить эту проблему?
ошибка -> IndexError: логический индекс не соответствует индексированному массиву по измерению 0; размерность равна 0, но соответствующий логический размер равен 10