Вступ
K-Means є одним із найпопулярніших алгоритмів кластеризації. Маючи центральні точки до кластера, він групує інші точки на основі їх відстані до цієї центральної точки.
Недоліком K-Means є вибір кількості кластерів, K, перш ніж запускати алгоритм, який групує точки.
Якщо ви хочете прочитати детальний посібник із кластеризації K-Means, перегляньте «K-Means Clustering with Scikit-Learn».
Метод ліктя та аналіз силуету
Найбільш часто використовуваними прийомами для вибору числа Ks є Метод ліктя і Аналіз силуету.
Для полегшення вибору Кс, в Жовта цегла бібліотека завершує код циклами for і графіком, який ми зазвичай записуємо в 4 рядки коду.
Щоб встановити Yellowbrick безпосередньо з блокнота Jupyter, запустіть:
! pip install yellowbrick
Давайте подивимося, як це працює для знайомого набору даних, який уже є частиною Scikit-learn Райдужка набір даних.
Першим кроком є імпорт набору даних, KMeans
та yellowbrick
бібліотеки та завантажте дані:
from sklearn.datasets import load_iris
from sklearn.cluster import KMeans
from yellowbrick.cluster import KElbowVisualizer, SilhouetteVisualizer
iris = load_iris()
Зауважте, ми імпортуємо KElbowVisualizer
та SilhouetteVisualizer
від yellowbrick.cluster
, це ті модулі, які ми використовуватимемо для візуалізації результатів Elbow і Silhouette!
Після завантаження набору даних у data
ключ групи (тип даних, який є розширенням словника) — це значення точок, які ми хочемо кластеризувати. Якщо ви хочете знати, що означають цифри, подивіться iris['feature_names']
.
Відомо, що набір даних Iris містить три види ірисів: 'versicolor', 'virginica' і 'setosa'. Ви також можете оглянути класи в iris['target_names']
перевірити.
Отже, у нас є 4 функції для кластеризації, і їх слід розділити на 3 різні кластери відповідно до того, що ми вже знаємо. Подивимося, чи підтвердять це наші результати за допомогою методу ліктя та аналізу силуету.
Спочатку ми виберемо значення функції:
print(iris['feature_names'])
print(iris['target_names'])
X = iris['data']
Тоді ми можемо створити a KMeans
модель, а KElbowVisualizer()
екземпляр, який отримає цю модель разом із кількістю ks, для якої буде обчислено метрику, у цьому випадку з 2 в 11 Кс.
Після цього підганяємо візуалізатор з даними fit()
і відобразити сюжет с show()
. Якщо показник не вказано, візуалізатор використовує спотворення метрика, яка обчислює суму квадратів відстаней від кожної точки до її призначеного центру:
model = KMeans(random_state=42)
elb_visualizer = KElbowVisualizer(model, k=(2,11))
elb_visualizer.fit(X)
elb_visualizer.show()
Тепер ми вже маємо a Коліно показника викривлення для кластеризації KMeans ділянку з позначкою вертикальної лінії, яка буде найкращим числом ks, у цьому випадку, 4
.
Здається, метод Elbow із метрикою викривлення був не найкращим вибором, якщо ми не знали фактичної кількості кластерів. Чи силует також вкаже, що є 4 кластери? Щоб відповісти на це питання, нам просто потрібно повторити останній код із моделлю з 4 кластерами та іншим об’єктом візуалізатора:
model_4clust = KMeans(n_clusters = 4, random_state=42)
sil_visualizer = SilhouetteVisualizer(model_4clust)
sil_visualizer.fit(X)
sil_visualizer.show()
Код відображає a Силуетний графік кластеризації KMeans для 150 зразків у 4 центрах. Щоб проаналізувати ці кластери, нам потрібно подивитися на значення коефіцієнта силуету (або оцінки), його найкраще значення ближче до 1. Середнє значення, яке ми маємо, 0.5
, позначені вертикальною лінією, і не дуже добре.
Нам також потрібно дивитися на розподіл між кластерами – хороша ділянка має однакові розміри кластеризованих областей або добре розподілених точок. На цьому графіку є 3 менших кластера (номер 3, 2, 1) і один більший кластер (номер 0), що не є результатом, якого ми очікували.
Ознайомтеся з нашим практичним практичним посібником із вивчення Git з передовими методами, прийнятими в галузі стандартами та включеною шпаргалкою. Припиніть гуглити команди Git і фактично вчитися це!
Давайте повторимо ту саму схему для 3 кластерів, щоб побачити, що станеться:
model_3clust = KMeans(n_clusters = 3, random_state=42)
sil_visualizer = SilhouetteVisualizer(model_3clust)
sil_visualizer.fit(X)
sil_visualizer.show()
Змінюючи кількість кластерів, отримували оцінку силуету 0.05
вище, і кластери більш збалансовані. Якби ми не знали фактичної кількості кластерів, експериментуючи та поєднуючи обидва методи, ми б вибрали 3
замість 2
як кількість Ks.
Це приклад того, як поєднання та порівняння різних показників, візуалізація даних і експериментування з різними значеннями кластерів важливі для того, щоб отримати результат у правильному напрямку. А також, як наявність бібліотеки, яка полегшує цей аналіз, може допомогти в цьому процесі!