Кривые Фиттинга для каждой кластеризованной точки в Python - PullRequest
0 голосов
/ 14 марта 2020

У меня есть набор данных из 100 точек (с координатами X и Y), и я хочу нарисовать подходящие кривые, интерполирующие точки рассеяния для каждого кластера. Я изо всех сил пытаюсь сделать это в python. Найдите ниже код, который строит точки.

from sklearn.cluster import KMeans
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

points=[[-0.79366764,-1.62719214]
,[ 1.50753916,-0.58891408]
 ,[-0.81991431, 0.28794065]
 ,[-0.9090911, 1.42152322]
,[0.1966458,1.69601521]
,[0.56691864,0.12113911]
,[0.78334496,0.28279956]
,[-1.34695521,1.92210339]
,[0.05668241,0.37335268]
,[-0.85339432,0.00575208]
,[1.68177225,0.50030888]
,[1.63632858,1.67352833]
,[1.04165993,-1.73817361]
,[-1.31672868,-0.33078538]
,[-0.40758229,1.71052362]
,[1.26572587,-0.82617139]
,[-0.02864048,1.83624129]
,[2.33559131,1.43272662]
,[-0.59575927,-1.40827396]
,[-1.44704417,1.63886199]
,[0.61290666,1.99316062]
,[-0.99942788,-0.67447777]
,[1.54030333,-0.90294086]
,[-0.46542648,-1.64499073]
,[-1.15766187,-0.07969473]
,[-0.00925418,0.64019556]
,[1.22998046,-1.94169783]
,[0.71043978,-1.84941041]
,[-1.417554,-1.47191248]
,[-0.74643565,0.53625052]
,[-0.31930474,1.44546921]
,[2.00665515,0.96478456]
,[-0.0806874,1.55071575]
,[-1.01055455,0.47833072]
,[-0.20092915,0.43138364]
,[1.87386193,1.57581394]
,[0.97119941,2.00074904]
,[1.01865316,0.15351546]
,[2.07153215,1.3831435,]
,[1.38735059,1.60777151]
,[1.76052703,0.77788933]
,[1.25073779,-0.11935601]
,[-1.32896379,-1.10309413]
,[0.52394023,0.44460471]
,[-0.70230626,1.23415288]
,[-1.29293766,0.8885388,]
,[-0.62406212,1.48756184]
,[-1.51132057,1.18559148]
,[-1.15274759,-0.88703926]
,[0.36594537,-1.54519754]
,[1.2207301,1.8709147,]
,[1.1991362,-1.34773794]
,[-0.17078208,-1.7581103,]
,[-1.84748634,1.67753924]
,[-1.18184004,-1.32702651]
,[0.8645178,-2.25116357]
,[1.14898044,0.40690928]
,[0.44745565,-1.8011136,]
,[-1.07555813,0.18542694]
,[0.29001916,0.5490486,]
,[0.4969904,1.75037484]
,[1.32921017,-1.08327153]
,[1.33921071,1.38846434]
,[-1.22929788,1.15873439]
,[0.15859899,-1.71249808]
,[1.29176831,-1.61903091]
,[-0.98427382,1.06557143]
,[1.44388059,0.38938859]
,[0.60242446,-2.10075947]
,[1.53810574,1.92251047]
,[-0.78748949,-0.25266015]
,[1.23097697,-0.57268688]
,[1.52983578,0.1047791,]
,[0.78315343,1.78628526]
,[-1.61015866,1.43271721]
,[1.46618253,-1.31456635]
,[2.15577007,1.64489628]
,[-1.27278332,-0.65776426]
,[0.93745486,-1.99569162]
,[-1.64874832,2.16234393]
,[1.02243752,1.67672087]
,[0.01065715,0.11736911]
,[2.22582248,1.15782992]
,[0.31052349,0.23199567]
,[-1.04926991,-0.32441887]
,[-1.02604124,0.75705474]
,[2.24662981,0.84403779]
,[0.3131845,1.94712507]
,[-1.91244642,2.25763865]
,[1.46483508,-0.2931466,]
,[-1.85762402,1.94883356]
,[-1.00361144,-1.13396811]
,[2.02003735,0.68936819]
,[-0.85191808,-1.34116028]
,[-0.21985143,-1.49310233]
,[0.06005956,-1.47130379]
,[1.83905988,1.85539094]
,[-1.61625601,1.87393115]
,[-1.05419026,-1.56236055]
,[1.29049289,0.18030381]]

data=pd.DataFrame(points)
data.columns=['x','y']

x = data['x']
y = data['y']

fit = KMeans(n_clusters=2).fit(data)

def ClusterIndicesNumpy(clustNum, labels_array): 
    return np.where(labels_array == clustNum)[0]

for i in range(fit.n_clusters):
    clustX=x[ClusterIndicesNumpy(i, fit.labels_)]
    clustY=y[ClusterIndicesNumpy(i, fit.labels_)]

    plt.scatter(clustX, clustY)

plt.show()

Я прилагаю в Fig1 исходный график рассеянных точек. Теперь я хочу построить кривые, которые соответствуют точкам каждого кластера.

...