Как назначить цвета для кластеров в kmeans? - PullRequest
2 голосов
/ 08 июля 2019

Я продолжаю получать сообщения об ошибках для моей кластеризации kmeans.Примечание: я чрезвычайно новичок во всем и программирую в целом, поэтому я также стремлюсь к улучшению.Я пытался лично определить каждый цвет, но это тоже не сработало.

# create map
map_clusters = folium.Map(location=[latitude, longitude], zoom_start=11)

# set color scheme for the clusters
x = np.arange(kclusters)
ys = [i + x + (i*x)**2 for i in range(kclusters)]
colors_array = cm.rainbow(np.linspace(0, 1, len(ys)))
rainbow = [colors.rgb2hex(i) for i in colors_array]

# add markers to the map
markers_colors = []
for lat, lon, poi, cluster in zip(pittsburgh_merged['Latitude'], 
pittsburgh_merged['Longitude'], pittsburgh_merged['Neighborhood'], 
pittsburgh_merged['Cluster Labels']):
label = folium.Popup(str(poi) + ' Cluster ' + str(cluster), 
parse_html=True)
folium.CircleMarker(
[lat, lon],
radius=5,
popup=label,
color=rainbow[cluster-1],
fill=True,
fill_color=rainbow[cluster-1],
fill_opacity=0.7).add_to(map_clusters)

map_clusters

Я ожидаю, что выходные данные map_clusters будут видны.Предполагается, что это карта Питтсбурга с местами, организованными по цветам.Отсюда и радужное назначение.Однако я продолжаю получать сообщение об ошибке «TypeError: индексы списка должны быть целыми числами или кусочками, а не плавающими» для назначений цвета и fill_color.

1 Ответ

1 голос
/ 08 июля 2019

Ошибка, которую вы получаете, означает, что индекс, который вы используете для доступа к списку rainbow, является не целым числом, а плавающей точкой.В этом случае вы пытаетесь получить доступ к элементу cluster - 1 списка rainbow.Однако выражение cluster - 1 выглядит как число с плавающей точкой, что, в свою очередь, означает, что переменная cluster содержит не целое число, а число с плавающей точкой.Попробуйте убедиться, что вы передаете целое число, например, приведя переменную к целому числу:

color = rainbow[int(cluster)-1]

Однако это зависит от фактического содержимого переменной и не будетработать, если cluster содержит нан-значение, такое как inf.В этом случае (или вообще во всех случаях) вам следует взглянуть на имеющиеся у вас данные и убедиться, что это имеет смысл.Поскольку вы пытаетесь использовать k-средних и получать значения с плавающей запятой и даже значения нанопараметров для меток кластера, возможно, что-то пошло не так раньше в процессе кластеризации.Попробуйте посмотреть фактическое содержимое переменной pittsburgh_merged, распечатав ее содержимое.

...