PySpark, как найти подходящее количество кластеров

Я использую метод локтя, чтобы найти подходящее количество кластеров KMean, когда я использую Python и sklearn. Я хочу сделать то же самое, когда работаю в PySpark. Я знаю, что PySpark имеет ограниченную функциональность из-за распределенного характера Spark, но есть ли способ получить этот номер?

Я использую следующий код для построения локтя. Используя метод локтя, чтобы найти оптимальное количество кластеров. из sklearn.cluster импортировать KMeans

wcss = []
for i in range(1, 11):
    kmeans = KMeans(n_clusters=i, init='k-means++', max_iter=300, n_init=10, random_state=0)
    kmeans.fit(X)
    wcss.append(kmeans.inertia_)

plt.plot(range(1, 11), wcss)
plt.title('The Elbow Method')
plt.xlabel('Number of clusters')
plt.ylabel('WCSS')
plt.show()

PySpark, как найти подходящее количество кластеров

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
4
0
6 528
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

PySpark — неподходящий инструмент для построения метода выдувания. Чтобы построить диаграмму, данные должны быть собраны в фрейм данных Pandas, что в моем случае невозможно из-за огромного объема данных. Альтернативой является использование анализ силуэта, как показано ниже.

# Keep changing the number of clusters and re-calculate
kmeans = KMeans().setK(6).setSeed(1)
model = kmeans.fit(dataset.select('features'))
predictions = model.transform(dataset)
silhouette = evaluator.evaluate(predictions)
print("Silhouette with squared euclidean distance = " + str(silhouette))

Или оцените кластеризацию, вычислив в пределах заданной суммы квадратичных ошибок, что объясняется здесь.

Ответ принят как подходящий

Я сделал по другому. Рассчитайте стоимость функций с помощью Spark ML и сохраните результаты в списке Python, а затем нанесите их на график.

# Calculate cost and plot
cost = np.zeros(10)

for k in range(2,10):
    kmeans = KMeans().setK(k).setSeed(1).setFeaturesCol('features')
    model = kmeans.fit(df)
    cost[k] = model.summary.trainingCost

# Plot the cost
df_cost = pd.DataFrame(cost[2:])
df_cost.columns = ["cost"]
new_col = [2,3,4,5,6,7,8, 9]
df_cost.insert(0, 'cluster', new_col)

import pylab as pl
pl.plot(df_cost.cluster, df_cost.cost)
pl.xlabel('Number of Clusters')
pl.ylabel('Score')
pl.title('Elbow Curve')
pl.show()

Я думаю, что последний ответ не совсем правильный. Однако первый ответ правильный. Глядя на документацию и исходный код Pyspark.ml.clustering, model.summary.trainingCost — это инерция Sklearn в Pyspark. В связь вы можете найти текст:

This is equivalent to sklearn's inertia.

Оценка силуэта задается классом ClusteringEvaluator из pyspark.ml.evaluation: см. этот связь

Индекс Дэвиса-Булдина и Индекс Калинского-Харабаша Sklearn еще не реализованы в Pyspark. Тем не менее, есть некоторые предполагаемые функции из них. Например для Индекс Дэвиса-Булдина.

Другие вопросы по теме