Алгоритм кластеризации на Python
Всем добрый день. Подскажите, как решить данную задачу на Python?
Нужно реализовать базовый алгоритм кластеризации, который также относится к области алгоритмов машинного обучения,
то есть алгоритма k-Means. Описание данного алгоритма можно найти на сайте
https://en.wikipedia.org/wiki/Kmeans_clustering
Аспекты, которые будут оцениваться:
- Автономная реализация алгоритма с использованием базовых структур Python-list, Loop... и т. д.
- Реализация алгоритма с использованием готовой библиотеки Scikit-learn
- Реализация различных мер сходства множеств-Евклид, Манхэттен, Брей Кертис
- Реализация алгоритма классификации новых образцов на основе построенного классификатора
- Реализация графического пользовательского интерфейса с использованием библиотеки Qt
Как это реализовать? Заранее большое спасибо!
Ответы (3 шт):
Автор решения: Сергей П.
→ Ссылка
ой ну про первое два вот, кому надо)))
from sklearn.metrics import silhouette_score
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.cluster import KMeans
from sklearn.decomposition import TruncatedSVD
import matplotlib.pyplot as plt
# Преобразование текста в TF-IDF признаки
vec = TfidfVectorizer()
X = vec.fit_transform(df_ready['Textl'])
# Уменьшение размерности текста с помощью PCA
pca = TruncatedSVD(n_components=2)
X_pca = pca.fit_transform(X)
# KMeans кластеризация
kmeans = KMeans(n_clusters=3)
kmeans_clusters = kmeans.fit_predict(X_pca)
# Визуализация KMeans
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=kmeans_clusters, cmap='viridis')
plt.title('KMeans Clustering')
plt.show()
Автор решения: Сергей П.
→ Ссылка
вот это кстати тоже рабочее
from sklearn.cluster import DBSCAN
batch_size = 1007
dbscan = DBSCAN(eps=0.5, min_samples=5)
dbscan_clusters = np.zeros((len(X_pca),))
for i in range(0, len(X_pca), batch_size):
start = i
end = min(i + batch_size, len(X_pca))
dbscan_clusters[start:end] = dbscan.fit_predict(X_pca[start:end])
dbscan_clusters = dbscan_clusters.astype(int)
# Визуализация DBSCAN
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=dbscan_clusters, cmap='viridis')
plt.title('DBSCAN Clustering')
plt.show()
и вот
from sklearn.cluster import MiniBatchKMeans
import matplotlib.pyplot as plt
import numpy as np
# MiniBatchKMeans кластеризация
n_clusters = 3
batch_size = 1000
mbkmeans = MiniBatchKMeans(n_clusters=n_clusters, batch_size=batch_size)
mbk_clusters = mbkmeans.fit_predict(X_pca)
# Визуализация MiniBatchKMeans
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=mbk_clusters, cmap='viridis')
plt.title('MiniBatchKMeans Clustering')
plt.show()
Автор решения: Сергей П.
→ Ссылка
from sklearn.metrics import sil_samples
# для каждой точки данных
sample_sil_val= silhouette_samples(X_pca, kmeans_clusters)
plt.figure(figsize=(10, 7))
y_low= 10
for i in range(kmeans.n_clusters):
ith_cluster_sil_values = sample_sil_val[kmeans_clusters == i]
ith_cluster_sil_values.sort()
size_cluster_i = ith_cluster_sil_values.shape[0]
y_up = y_low + size_cluster_i
color = plt.cm.viridis(float(i) / kmeans.n_clusters)
plt.fill_betweenx(np.arange(y_low, y_up), 0, ith_cluster_sil_values,facecolor=color, edgecolor=color, alpha=0.7)
plt.text(-0.05, y_low + 0.5 * size_cluster_i, str(i)) y_low = y_up + 10
plt.title('Sil plotting for KMeans')
plt.xlabel('Sil coef values')
plt.ylabel('Cluster label')
дополняю ответ
from sklearn.metrics import silhouette_score
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.cluster import KMeans
from sklearn.decomposition import TruncatedSVD
import matplotlib.pyplot as plt
# Преобразование текста в TF-IDF признаки
vec = TfidfVectorizer()
X = vec.fit_transform(df_ready['Textl'])
# Уменьшение размерности текста с помощью PCA
pca = TruncatedSVD(n_components=2)
X_pca = pca.fit_transform(X)
# KMeans кластеризация
kmeans = KMeans(n_clusters=3)
kmeans_clusters = kmeans.fit_predict(X_pca)
# Визуализация KMeans
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=kmeans_clusters, cmap='viridis')
plt.title('KMeans Clustering')
plt.show()