Hướng dẫn hierarchical clustering python without sklearn - python phân cụm phân cấp mà không cần sklearn

Tên đã được sử dụng

Một thẻ đã tồn tại với tên chi nhánh được cung cấp. Nhiều lệnh GIT chấp nhận cả tên thẻ và tên chi nhánh, vì vậy việc tạo nhánh này có thể gây ra hành vi bất ngờ. Bạn có chắc là bạn muốn tạo chi nhánh này?

1branch0tags branch 0 tags

Mã số

  • Sử dụng Git hoặc thanh toán với SVN bằng URL Web.

  • Mở bằng máy tính để bàn GitHub
  • Tải xuống Zip

Cam kết mới nhất

Các tập tin

Permalink

Không tải thông tin cam kết mới nhất.

Loại hình

Tên

Tin nhắn cam kết mới nhất

Cam kết thời gian

Hierarchical-clustering

Việc triển khai thuật toán phân cụm phân cấp riêng mà không sử dụng hàm được xây dựng của SkLearn. Phương pháp lập trình động được sử dụng để đạt được nó và Numpy được sử dụng cho các hoạt động của ma trận.

Mã riêng của cụm phân cấp được viết, trả về các điểm/cụm dữ liệu đang kết nối và cụm đích. Phương pháp lập trình động được sử dụng. Bản demo có sẵn trong Notebook Jupyter.

Bạn có thể sử dụng mã trực tiếp bằng cách sử dụng tệp .py.

Mã là tài liệu tốt nhất! Nhận xét cần thiết được thêm vào sẽ đủ để hiểu mã và bắt đầu sử dụng nó. Xin vui lòng sử dụng mã và/hoặc đóng góp để cải thiện cơ sở mã. Ngoài ra, hãy kiểm tra triển khai mã thư viện máy khác của tôi trong các repos khác của tôi.

Xem danh mục đầu tư của tôi và liên hệ với tôi bằng cách sử dụng - www.mithunjmology.com

Việc sử dụng máy học không được giám sát & NBSP; Thuật toán học máy để phân tích và phân cụm các bộ dữ liệu không nhãn. Các thuật toán hiệu quả nhất của việc học không giám sát là phân cụm và các quy tắc liên kết. Phân cụm phân cấp là một trong những thuật toán phân cụm được sử dụng để tìm một mối quan hệ và mô hình ẩn từ bộ dữ liệu không được dán nhãn. Bài viết này sẽ bao gồm các phân cụm phân cấp một cách chi tiết bằng cách chứng minh việc triển khai thuật toán, số lượng ước tính cụm bằng phương pháp khuỷu tay và hình thành các dendrogram sử dụng python. Chúng tôi sẽ sử dụng Jupyter Notebook và AWS Sagemaker Studio cho mục đích thực hiện và trực quan hóa.clustering and association rules. Hierarchical clustering is one of the clustering algorithms used to find a relation and hidden pattern from the unlabeled dataset. This article will cover Hierarchical clustering in detail by demonstrating the algorithm implementation, the number of cluster estimations using the Elbow method, and the formation of dendrograms using Python. We will use Jupyter Notebook and AWS SageMaker Studio for implementation and visualization purposes.

Mục lục

  • Phân cụm phân cấp là gì?
    • Thuật toán phân cụm phân cấp hoạt động như thế nào?
    • Đo khoảng cách bewteen hai cụm
    • Dendrogram trong phân cụm phân cấp
  • Việc thực hiện thuật toán phân cụm theo phân cấp
    • Khám phá và chuẩn bị bộ dữ liệu
    • Dendrogram
    • Sử dụng phương pháp khuỷu tay để ước tính số lượng cụm
    • Thực hiện phân cụm phân cấp kết tụ
  • Bản tóm tắt

Hướng dẫn hierarchical clustering python without sklearn - python phân cụm phân cấp mà không cần sklearn

Sách học máy tốt nhất cho người mới bắt đầu và chuyên gia

Khi học máy ngày càng phổ biến, cả người mới bắt đầu và các chuyên gia cần luôn cập nhật những tiến bộ mới nhất. Đối với người mới bắt đầu, hãy xem những cuốn sách học máy tốt nhất có thể giúp hiểu rõ về những điều cơ bản. Đối với các chuyên gia, đọc những cuốn sách này có thể giúp theo kịp với cảnh quan luôn thay đổi. Trong cả hai trường hợp, một vài lý do chính để kiểm tra những cuốn sách này có thể có lợi. Đầu tiên, họ cung cấp một cái nhìn tổng quan toàn diện về vấn đề này. Thứ hai, họ cung cấp những hiểu biết sâu sắc từ các chuyên gia hàng đầu trong lĩnh vực này. Và thứ ba, họ đưa ra lời khuyên cụ thể về cách áp dụng các khái niệm học máy trong các kịch bản trong thế giới thực. Khi học máy tiếp tục phát triển, không có nghi ngờ gì về việc những cuốn sách này sẽ tiếp tục là nguồn lực thiết yếu cho bất cứ ai muốn đi trước đường cong.

Phân cụm phân cấp là gì?

Thuật toán phân cụm phân cấp hoạt động như thế nào?dendrogram. A dendrogram is a tree diagram showing hierarchical relationships between different datasets.

Hướng dẫn hierarchical clustering python without sklearn - python phân cụm phân cấp mà không cần sklearn

Đo khoảng cách bewteen hai cụmK-means clustering and hierarchical clustering may look similar, but they both differ depending on how they work.

Dendrogram trong phân cụm phân cấp

  • Việc thực hiện thuật toán phân cụm theo phân cấp is a bottom-up approach in which the algorithm starts with taking all data points as single clusters and merging them until one cluster is left.
  • Chia rẽ là điều ngược lại với thuật toán kết tụ sử dụng phương pháp tiếp cận dưới đáy A & nbsp; (nó lấy tất cả các điểm dữ liệu của một cụm và chia chúng cho đến khi mọi điểm dữ liệu trở thành một cụm mới). is the reverse to the agglomerative algorithm that uses a top-bottom approach (it takes all data points of a single cluster and divides them until every data point becomes a new cluster).
Hướng dẫn hierarchical clustering python without sklearn - python phân cụm phân cấp mà không cần sklearn

Một trong những lợi thế quan trọng nhất của phân cấp so với phân cụm K-MEAN là thuật toán không cần phải biết số lượng cụm được xác định trước. Chúng ta có thể chỉ định số lượng cụm tùy thuộc vào cấu trúc dendrogram.

Thuật toán phân cụm phân cấp hoạt động như thế nào?

Hãy để tập trung vào phương pháp kết tụ để mô tả cách thức hoạt động của thuật toán phân cụm phân cấp. Phương pháp này bắt đầu tham gia các điểm dữ liệu của bộ dữ liệu gần nhau nhất và lặp lại cho đến khi nó hợp nhất tất cả các điểm dữ liệu vào một cụm duy nhất chứa toàn bộ tập dữ liệu.

Ví dụ, hãy để Lừa lấy sáu điểm dữ liệu làm bộ dữ liệu của chúng tôi và xem các bước thuật toán phân cấp phân cấp kết tụ.

Bước đầu tiên của thuật toán là lấy mọi điểm dữ liệu làm cụm riêng biệt. Nếu có N điểm dữ liệu, số lượng cụm sẽ là N.

Hướng dẫn hierarchical clustering python without sklearn - python phân cụm phân cấp mà không cần sklearn

Bước tiếp theo của thuật toán này là lấy hai điểm hoặc cụm dữ liệu gần nhất và hợp nhất chúng để tạo thành một cụm lớn hơn. Tổng số cụm trở thành N-1.

Hướng dẫn hierarchical clustering python without sklearn - python phân cụm phân cấp mà không cần sklearn

Các lần lặp thuật toán tiếp theo sẽ tiếp tục hợp nhất hai cụm gần nhất cho đến khi chỉ còn một cụm.

Hướng dẫn hierarchical clustering python without sklearn - python phân cụm phân cấp mà không cần sklearn

Khi thuật toán kết hợp tất cả các điểm dữ liệu thành một cụm, nó có thể xây dựng dendrogram mô tả hệ thống phân cấp của cụm.

Đo khoảng cách bewteen hai cụm

Khoảng cách giữa các cụm hoặc điểm dữ liệu là rất quan trọng đối với phân cụm phân cấp. Một số phương thức liên kết có thể tính toán khoảng cách này:Linkage methods can calculate this distance:

Liên kết đơn là khoảng cách ngắn nhất giữa các điểm gần nhất của các cụm được tính bằng bất kỳ phương pháp tìm khoảng cách nào (phổ biến nhất là khoảng cách Euclide). is the shortest distance between the closest points of the clusters calculated by any distance finding method (the most popular is the Euclidean distance).

Hướng dẫn hierarchical clustering python without sklearn - python phân cụm phân cấp mà không cần sklearn

Liên kết hoàn chỉnh là khoảng cách dài nhất giữa hai điểm của hai cụm khác nhau. Phương thức liên kết này cho phép bạn tạo các cụm chặt chẽ hơn một cách tiếp cận liên kết duy nhất. is the longest distance between the two points of two different clusters. This linkage method allows you to create tighter clusters than a single linkage approach.

Hướng dẫn hierarchical clustering python without sklearn - python phân cụm phân cấp mà không cần sklearn

Liên kết centroid là khoảng cách giữa trung tâm của hai cụm. is the distance between the centroid of two clusters.

Hướng dẫn hierarchical clustering python without sklearn - python phân cụm phân cấp mà không cần sklearn

Tùy thuộc vào các mô -đun Python, có thể có những cách khác để đo khoảng cách giữa các cụm. Xin vui lòng, hãy tham khảo tài liệu mô -đun để hiểu rõ hơn về những gì mà chính xác đo.

Dendrogram trong phân cụm phân cấp

Dendrogram là một cấu trúc giống như cây lưu trữ từng bước của quá trình thực hiện thuật toán phân cấp. Trong biểu đồ dendrogram, trục x hiển thị tất cả các điểm dữ liệu và trục y cho thấy khoảng cách giữa chúng. Dendrogram dưới đây mô tả sự hình thành của các cụm.

Hướng dẫn hierarchical clustering python without sklearn - python phân cụm phân cấp mà không cần sklearn

Khi chúng ta có dendrogram cho các cụm, chúng ta có thể đặt một ngưỡng (một đường nét ngang ngang màu đỏ) để thấy trực quan số lượng các lớp đầu ra từ tập dữ liệu sau khi thực hiện thuật toán.threshold (a red horizontal dashed line) to visually see the number of output classes from the dataset after algorithm execution.

Ngưỡng là khoảng cách tối thiểu cần thiết giữa các cụm gần nhất để coi chúng như một cụm riêng biệt. Đây là biến miền kiến ​​thức mà bạn cần xác định chính mình. Nếu bạn không có đủ thông tin về miền kinh doanh của mình, bạn có thể sử dụng các phương thức sau để xác định số lượng cụm trong tập dữ liệu (hãy xem các phương thức 7 7 để chọn số lượng cụm tối ưu của bài viết để tìm việc triển khai mã số). is minimum distance required between the nearest clusters to treat them as a separate clusters. This is knowledge domain variable which you need to define yourself. If you don’t have enough information about your business domain, you can use the following methods to define the number of clusters in the dataset (take a look at the “7 methods for selecting the optimal number of clusters” article to find the implementation code).

Hướng dẫn hierarchical clustering python without sklearn - python phân cụm phân cấp mà không cần sklearn

Ví dụ, đối với giá trị ngưỡng là 7, số lượng cụm sẽ là 2. Đối với giá trị ngưỡng bằng 3, chúng tôi sẽ nhận được 4 cụm, v.v.

Việc thực hiện thuật toán phân cụm theo phân cấp

Hãy để thực hiện thuật toán phân cụm phân cấp để nhóm các khách hàng của trung tâm thương mại (bạn có thể nhận bộ dữ liệu & nbsp; tại đây) bằng máy tính xách tay Python và Jupyter.

Trong ví dụ này, chúng tôi sẽ quan tâm đến việc phân chia khách hàng thành các nhóm dựa trên doanh số, nhu cầu của họ, v.v ... Chủ doanh nghiệp có thể sử dụng phân khúc này để làm việc với mọi phân khúc khách hàng và cải thiện mối quan hệ giữa công ty và khách hàng hoặc tăng doanh thu từ Danh mục khách hàng.

Để chia khách hàng thành các danh mục, chúng tôi cần các mô -đun Python sau:

  • SKearn
  • matplotlib
  • gấu trúc
  • Numpy
  • SeaBall
  • âm mưu
  • Yellowbrick

Bạn có thể cài đặt các mô -đun này bằng cách chạy các lệnh sau trong ô của Notebook Jupyter:

%pip install sklearn
%pip install matplotlib
%pip install pandas
%pip install numpy
%pip install seaborn
%pip install plotly
%pip install yellowbrick
%pip install chart_studio

Trong phần này, chúng tôi sẽ sử dụng dữ liệu phân khúc khách hàng trung tâm. Bạn có thể tải xuống bộ dữ liệu từ liên kết này.

Khám phá và chuẩn bị bộ dữ liệu

Hãy để nhập bộ dữ liệu bằng mô -đun

# importing the module
import pandas as pd

# importing the dataset
dataset = pd.read_csv('Hierarchical_clustering_data.csv')

# dataset 
dataset.head()
0.

# importing the module
import pandas as pd

# importing the dataset
dataset = pd.read_csv('Hierarchical_clustering_data.csv')

# dataset 
dataset.head()

Output:

Hướng dẫn hierarchical clustering python without sklearn - python phân cụm phân cấp mà không cần sklearn

Bước quan trọng tiếp theo là kiểm tra xem bộ dữ liệu của chúng tôi có chứa bất kỳ giá trị null nào không. Lớp DataFrame của mô -đun Pandas cung cấp phương thức

# importing the module
import pandas as pd

# importing the dataset
dataset = pd.read_csv('Hierarchical_clustering_data.csv')

# dataset 
dataset.head()
1 trả về số lượng của các giá trị null, nếu có.

# checking for null values
dataset.isnull().sum()

Output:

Hướng dẫn hierarchical clustering python without sklearn - python phân cụm phân cấp mà không cần sklearn

Hãy để trực quan hóa từng biến số này (tuổi, thu nhập hàng năm và điểm chi tiêu) bằng cách sử dụng

# importing the module
import pandas as pd

# importing the dataset
dataset = pd.read_csv('Hierarchical_clustering_data.csv')

# dataset 
dataset.head()
2 để xem phân phối các giá trị cho mỗi cột.

# importing the required modules
import matplotlib.pyplot as plt
import seaborn as sns

# graph size
plt.figure(1 , figsize = (15 , 6))
graph = 0 

# for loop
for x in ['Age' , 'Annual Income (k$)' , 'Spending Score (1-100)']:
    graph += 1
    
    # ploting graph
    plt.subplot(1 , 3 , graph)
    plt.subplots_adjust(hspace = 0.5 , wspace = 0.5)
    sns.distplot(dataset[x] , bins = 15)
    plt.title('Distplot of {}'.format(x))

# showing the graph
plt.show()

Output:

Hướng dẫn hierarchical clustering python without sklearn - python phân cụm phân cấp mà không cần sklearn

Đầu ra cho thấy tất cả các giá trị trong các cột của chúng tôi phù hợp với phân phối gần như bình thường.

Bộ dữ liệu của chúng tôi chứa một cột (thể loại) với các giá trị chuỗi, vì vậy chúng tôi cần mã hóa các giá trị này thành các giá trị số trước khi áp dụng thuật toán.

# importing preprocessing 
from sklearn import preprocessing 

# lable encoders
label_encoder = preprocessing.LabelEncoder() 

# converting gender to numeric values
dataset['Genre'] = label_encoder.fit_transform(dataset['Genre'])

# head
dataset.head()

Output:

Hướng dẫn hierarchical clustering python without sklearn - python phân cụm phân cấp mà không cần sklearn

Một cách khác để hiểu cường độ của các cụm dữ liệu là sử dụng bản đồ nhiệt. Bản đồ nhiệt là một kỹ thuật trực quan hóa dữ liệu cho thấy độ lớn của một hiện tượng là màu theo hai chiều. Sự thay đổi màu sắc có thể là theo màu sắc hoặc cường độ, mang lại các tín hiệu trực quan rõ ràng cho người đọc về cách hiện tượng được phân cụm hoặc thay đổi trên không gian.

# graph size
plt.figure(1, figsize = (20 ,8))

# creating heatmap
sns.heatmap(dataset)

# showing graph
plt.show()

Output:

Hướng dẫn hierarchical clustering python without sklearn - python phân cụm phân cấp mà không cần sklearn

Dendrogram

Bây giờ chúng ta có thể tìm thấy số lượng cụm tối ưu và giá trị ngưỡng gần đúng.

Hãy để sử dụng mô -đun SCIPY, có thể tự động xây dựng dendrogram cho bộ dữ liệu.

# importing the required module
import scipy.cluster.hierarchy as sch

# graph size
plt.figure(1, figsize = (16 ,8))

# creating the dendrogram
dendrogram = sch.dendrogram(sch.linkage(dataset, method  = "ward"))

# ploting graphabs
plt.title('Dendrogram')
plt.xlabel('Customers')
plt.ylabel('Euclidean distances')
plt.show()

Output:

Hướng dẫn hierarchical clustering python without sklearn - python phân cụm phân cấp mà không cần sklearn

Sử dụng phương pháp khuỷu tay để ước tính số lượng cụm

Phương pháp khuỷu tay cho phép bạn ước tính số lượng cụm có ý nghĩa mà chúng ta có thể lấy ra khỏi bộ dữ liệu bằng cách lặp đi lặp lại một thuật toán phân cụm vào bộ dữ liệu cung cấp số lượng cụm khác nhau và đo tổng các lỗi bình phương hoặc giảm giá trị quán tính. Hãy để sử dụng phương thức khuỷu tay vào bộ dữ liệu của chúng tôi để nhận số lượng ước tính cụm:

# Import ElbowVisualizer
from sklearn.cluster import AgglomerativeClustering
from yellowbrick.cluster import KElbowVisualizer
model = AgglomerativeClustering()

# k is range of number of clusters.
visualizer = KElbowVisualizer(model, k=(2,30), timings=False)
# Fit data to visualizer
visualizer.fit(dataset)
# Finalize and render figure
visualizer.show()

Output:

Hướng dẫn hierarchical clustering python without sklearn - python phân cụm phân cấp mà không cần sklearn

Biểu đồ đầu ra cho thấy số lượng cụm tốt nhất chúng ta có thể thoát khỏi bộ dữ liệu của mình là 8.

Dựa trên thông tin này, chúng tôi có thể giả định rằng giá trị ngưỡng cho bộ dữ liệu này có thể là khoảng 175.

import scipy.cluster.hierarchy as sch

# size of image
plt.figure(1, figsize = (16 ,8))  
plt.grid(b=None)

# creating the dendrogram 
dend = sch.dendrogram(sch.linkage(dataset, method='ward'))

# theroshold
plt.axhline(y=175, color='orange')

# ploting graphabs
plt.title('Dendrogram')
plt.xlabel('Customers')
plt.ylabel('Euclidean distances')
plt.show()

Output:

Hướng dẫn hierarchical clustering python without sklearn - python phân cụm phân cấp mà không cần sklearn

Thực hiện phân cụm phân cấp kết tụ

Bây giờ, hãy để Lừa lấy các cụm (8) và hình dung chúng. Chúng tôi có ba biến chính (tuổi, điểm chi tiêu và thu nhập hàng năm), chúng tôi có thể đưa vào biểu đồ 3D để xem phân phối dữ liệu phân cụm.

import plotly as plt
import plotly.graph_objects as go

# calling the agglomerative algorithm
model = AgglomerativeClustering(n_clusters = 8, affinity = 'euclidean', linkage ='average')

# training the model on dataset
y_model = model.fit_predict(dataset)

# creating pandas dataframe
dataset['cluster'] = pd.DataFrame(y_model)

# creating scattered graph
trace1 = go.Scatter3d(
    
    # storing the variables in x, y, and z axis
    x= dataset['Age'],
    y= dataset['Spending Score (1-100)'],
    z= dataset['Annual Income (k$)'],
    mode='markers',
     marker=dict(
        color = dataset['cluster'], 
        size= 3,
        line=dict(
            color= dataset['cluster'],
            width= 12
        ),
        opacity=0.9
     )
)

# ploting graph 
data = [trace1]
layout = go.Layout(
    title= 'Clusters using Agglomerative Clustering',
    scene = dict(
            xaxis = dict(title  = 'Age'),
            yaxis = dict(title  = 'Spending Score'),
            zaxis = dict(title  = 'Annual Income')
        ),
    width=1024, height=512
)
fig = go.Figure(data=data, layout=layout)
plt.offline.iplot(fig)

Output:

Bản tóm tắt

Phân cụm phân cấp là một thuật toán học tập không được giám sát nhóm các đối tượng tương tự từ bộ dữ liệu thành các cụm. Bài viết này bao gồm các phân cụm phân cấp một cách chi tiết bằng cách bao gồm việc triển khai thuật toán, số lượng ước tính cụm bằng phương pháp khuỷu tay và hình thành các dendrogram sử dụng python.

Đây là Bashir Alam, chuyên ngành khoa học máy tính và có kiến ​​thức sâu rộng về Python, học máy và khoa học dữ liệu. Tôi đã làm việc với các tổ chức và công ty khác nhau cùng với các nghiên cứu của tôi. Tôi có kiến ​​thức vững chắc và kinh nghiệm làm việc ngoại tuyến và trực tuyến, trên thực tế, tôi thoải mái hơn khi làm việc trực tuyến.

Tôi thích học các công nghệ và kỹ năng mới và tôi tin rằng tôi đủ thông minh để học các công nghệ mới trong một khoảng thời gian ngắn.

Làm thế nào để bạn thực hiện một cụm phân cấp trong Python?

Làm thế nào nó hoạt động?..
Bắt đầu bằng cách trực quan hóa một số điểm dữ liệu: Nhập Numpy dưới dạng NP. Nhập matplotlib.pyplot như plt. ....
Nhập khẩu Numpy dưới dạng NP. Nhập matplotlib.pyplot như plt. từ scipy.cluster.Hierarchy nhập khẩu dendrogram, liên kết. ....
Nhập khẩu Numpy dưới dạng NP. Nhập matplotlib.pyplot như plt. Từ sklearn.Cluster Nhập AgglomerativeClustering ..

Làm cách nào để tạo ra một dendrogram trong Python?

Dendrograms trong Python..
Dendrogram cơ bản. Một dendrogram là một sơ đồ đại diện cho một cây. Nhà máy hình có tên created_dendrogram thực hiện phân cụm phân cấp trên dữ liệu và biểu thị cây kết quả. ....
Đặt ngưỡng màu ..
Đặt định hướng và thêm nhãn ..
Vẽ một dendrogram với một bản đồ nhiệt. Xem thêm Bản demo Bio Dash ..

Điều kiện tiên quyết cho phân cụm phân cấp là gì?

Phân cụm phân cấp bắt đầu bằng cách coi mỗi quan sát như một cụm riêng biệt.Sau đó, nó liên tục thực hiện hai bước sau: (1) xác định hai cụm gần nhau nhất và (2) hợp nhất hai cụm tương tự nhất.Quá trình lặp này tiếp tục cho đến khi tất cả các cụm được hợp nhất với nhau.treating each observation as a separate cluster. Then, it repeatedly executes the following two steps: (1) identify the two clusters that are closest together, and (2) merge the two most similar clusters. This iterative process continues until all the clusters are merged together.

Phương pháp khuỷu tay có thể được sử dụng để phân cụm phân cấp không?

Trong K-MEANS, số lượng cụm tối ưu được tìm thấy bằng phương pháp khuỷu tay.Trong phân cụm phân cấp, các dendrogram được sử dụng cho mục đích này.Các dòng dưới đây của mã vẽ một dendrogram cho bộ dữ liệu của chúng tôi.Nếu bạn biết về phương pháp này, bạn có thể thấy trong các sơ đồ trên.In hierarchical clustering, the dendrograms are used for this purpose. The below lines of code plot a dendrogram for our dataset. If you are aware of this method, you can see in the above diagrams.