Я пытаюсь нарисовать ребро многоугольника (вогнутого) на кластере K-средних, показанном ниже (рис_1).
С помощью @ ypnos этот фрагмент кода отображает все, кроме края.
df = pd.read_csv('https://raw.githubusercontent.com/MachineIntellect/dataset.ml/master/watermelon/watermelon_4_0.csv')
X = df.iloc[:,1:].to_numpy()
m0 = X[5]
m1 = X[11]
m2 = X[23]
centroids = np.array([m0, m1, m2])
labels = pairwise_distances_argmin(X, centroids)
m0 = X[labels == 0].mean(0)
m1 = X[labels == 1].mean(0)
m2 = X[labels == 2].mean(0)
new_centroids = np.array([m0, m1, m2])
plt.xlim(0.1,0.9)
plt.ylim(0, 0.8)
plt.scatter(X[:,0], X[:,1])
plt.scatter(new_centroids[:,0], new_centroids[:,1], c='r', marker = '+')
for i in range(3):
points = X[labels == i]
hull = ConvexHull(points)
for simplex in hull.simplices:
plt.plot(points[simplex, 0], points[simplex, 1], 'r-')
(Fig_2)
Документ Scikit-Learn , кажется, вдохновляет
Вопрос в том, что ребра, указанные стрелкой на рис_1, отличаются от соответствия на рис_2.
край многоугольника, на который указывала стрелка, был согнут внутрь (благодаря @dwilli).
Благодаря напоминанию @ ImportanceOfBeingErnest, scipy.spatial.ConvexHull
, возможно, не сможет производить вогнутость.
Есть ли другой модуль / пакет для этого (вогнутый)?
любая подсказка будет оценена.