Я пытался построить диаграмму метода колен, чтобы решить, сколько кластеров я должен был поместить в свою кластеризацию k-средних.Я применял следующий код:
import seaborn as sns
iris = sns.load_dataset('iris')
iris.columns
data = iris.iloc[:, 0:3] # selecting all lines and 3 columns
sse = {}
for k in range(1, 10):
kmeans = KMeans(n_clusters=k, max_iter=1000).fit(data)
data["clusters"] = kmeans.labels_
sse[k] = kmeans.inertia_ # Inertia: Sum of distances of samples to their closest cluster center
plt.figure()
plt.plot(list(sse.keys()), list(sse.values()))
plt.xlabel("Number of cluster")
plt.ylabel("SSE")
plt.show()
Однако, если я использую в этом коде более 3 столбцов:
data = iris.iloc[:, 0:3]
, например:
data = iris.iloc[:, 0:4]
код не запускается.
Кроме того, если я использую:
data = iris[['sepal_length', 'sepal_width', 'petal_length']]
вместо:
data = iris.iloc[:, 0:3]
, код также не запускается.
Эти две проблемы приводят к появлению следующего сообщения:
C: \ Users ... \ Anaconda3 \ lib \ site-packages \ ipykernel_launcher.py: 3: SettingWithCopyWarning: значениепытается установить копию фрагмента из DataFrame.Попробуйте вместо этого использовать .loc [row_indexer, col_indexer] = значение
См. Предостережения в документации: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy Это отдельно от пакета ipykernel, поэтому мы можем избежать импорта до C: \ Users \ledag \ Anaconda3 \ lib \ site-packages \ ipykernel_launcher.py: 3: SettingWithCopyWarning: значение пытается быть установлено для копии фрагмента из DataFrame.Попробуйте вместо этого использовать .loc [row_indexer, col_indexer] = значение
Почему это происходит?