# 机器理解大数据秘密：聚类算法深度剖析

3 个齐整的聚类，K=3

K-均值聚类（K-means clustering）

第 1 组

第 1 组（原来的均值=12）

第 1 组（原来的均值=10）

K-均值聚类的一个明显限制是你必须事先提供预期聚类数量的假设。目前也存在一些用于评估特定聚类的拟合的方法。比如说，聚类内平方和（Within-Cluster Sum-of-Squares）可以测量每个聚类内的方差。聚类越好，整体 WCSS 就越低。

Species          Initials  Length(m)
Bottlenose Dolphin     BD        3.0
Risso's Dolphin        RD        3.6
Pilot Whale            PW        6.5
Killer Whale           KW        7.5
Humpback Whale         HW       15.0
Fin Whale              FW       20.0

  BD   RD   PW   KW   HW
RD  0.6
PW  3.5  2.9
KW  4.5  3.9  1.0
HW 12.0 11.4  8.5  7.5
FW 17.0 16.4 13.5 12.5  5.0

[BD, RD]   PW   KW   HW
PW       3.2
KW       4.2   1.0
HW      11.7   8.5  7.5
FW      16.7  13.5 12.5  5.0

[BD, RD] [PW, KW]   HW
[PW, KW]      3.7
HW           11.7      8.0
FW           16.7     13.0   5.0

[[BD, RD] , [PW, KW]]    HW
HW                   9.8
FW                  14.8   5.0

[[BD, RD] , [PW, KW]]
[HW, FW]                  12.3

[[[BD, RD],[PW, KW]],[HW, FW]]

## 缘由

3. Mean or average linkage clustering, or UPGMA
4. Centroid linkage clustering, or UPGMC
5. Minimum energy clustering
6. The sum of all intra-cluster variance.
7. The decrease in variance for the cluster being merged (Ward's criterion).
8. The probability that candidate clusters spawn from the same distribution function (V-linkage).
9. The product of in-degree and out-degree on a k-nearest-neighbour graph (graph degree 10. linkage).
10. The increment of some cluster descriptor (i.e., a quantity defined for measuring the quality of a cluster) after merging two clusters.

### which linkage criterion to use

Quora上有人提问：What is the best linkage criterion for hierarchical cluster analysis?

• ward minimizes the variance of the clusters being merged.
• average uses the average of the distances of each observation of the two sets.
• complete or maximum linkage uses the maximum distances between all observations of the two sets.

wiki上的Ward's method里面有这句话：Ward's minimum variance criterion minimizes the total within-cluster variance. To implement this method, at each step find the pair of clusters that leads to minimum increase in total within-cluster variance after merging.

 1 import wikipedia as wiki
2 import csv
3
4 project_name = input("Project name: ")
5
6 def from_user():
7   pageList = []
8   while True:
9     try:
10       searchTerm = input("Enter page title: ")
11       wiki.page(searchTerm)
12       pageList.append(searchTerm)
13       done = input("Page added! Press enter to continue, or type 'Q' to finish adding pages. ")
14       print("")
15       if(done == "Q" or done == "q"):
16         break
17        except:
18         print("Error, please try a different search term!")
19         print("")
20     return pageList
21
22 def makeCSV(pageList):
23   with open(project_name.replace(" ","_")+"_adj_matrix.csv","w") as f:
24     wr = csv.writer(f,quoting=csv.QUOTE_ALL)
25     wr.writerow(pageList)
26     data = []
27     counter = 0
28     for p1 in pageList:
30       row = [p1]
31       for p2 in pageList:
32         if p2 in p1L:
33           row.append(1)
34         else:
35           row.append(0)
36       data.append(row)
37       counter += 1
38       prog = round(counter/len(pageList),3)*100
40       wr.writerow(row)
41     print("")
42
43 while True:
44   makeCSV(from_user())
45   break

         GH  Gl M  P  Q  T  W  Y
GitHub    0  1  0  0  0  1  0  0
Google    1  0  1  1  1  1  1  1
Medium    0  1  0  0  0  1  0  0
PayPal    0  1  0  0  0  1  0  1
Quora     0  1  0  0  0  1  1  0
Twitter   1  1  1  1  1  0  0  1
Wikipedia 0  1  0  0  1  0  0  0
YouTube   0  1  0  1  0  1  0  0

M 就是我们要计算的模块性。

1/2L 告诉我们将后面的部分除以 2L，即网络中边的数量的两倍。

Σ 符号表示求和，并且在该邻接矩阵 A 中的每一行和列上进行迭代。如果你对这个符号不熟悉，可以将 i, j = 1 和 N 理解成编程语言中的 for-loop。在 Python 里面，可以写成这样：

sum = 0
1 for i in range(1,N):
2     for j in range(1,N):
3         ans = #stuff with i and j as indices
4         sum += ans

A_ij 就是指该邻接矩阵中第 i 行、第 j 列的值。

k_i 和 k_j 是指每个顶点的 degree——可以通过将每一行和每一列的项加起来而得到。两者相乘再除以 2L 表示当该网络是随机分配的时候顶点 i 和 j 之间的预期边数。

1 def Kronecker_Delta(ci, cj):
2     if ci == cj:
3         return 1
4     else:
5         return 0
Kronecker_Delta("A","A")    #returns 1
Kronecker_Delta("A","B")    #returns 0

SaaS 模式云数据仓库必修课

|
14天前
|

​「Python大数据」VOC数据统计聚类

17 0
|
13天前
|

Python基于KMeans算法进行文本聚类项目实战
Python基于KMeans算法进行文本聚类项目实战
52 19
|
7天前
|

**摘要：** K-means聚类算法分析，利用MATLAB2022a进行实现。算法基于最小化误差平方和，优点在于简单快速，适合大数据集，但易受初始值影响。文中探讨了该依赖性并通过实验展示了随机初始值对结果的敏感性。针对传统算法的局限，提出改进版解决孤点影响和K值选择问题。代码中遍历不同K值，计算距离代价，寻找最优聚类数。最终应用改进后的K-means进行聚类分析。
29 10
|
12天前
|

Python实现DBSCAN膨胀聚类模型(DBSCAN算法)项目实战
Python实现DBSCAN膨胀聚类模型(DBSCAN算法)项目实战
26 1
|
13天前
|

Python实现用PSO粒子群优化算法对KMeans聚类模型进行优化项目实战
Python实现用PSO粒子群优化算法对KMeans聚类模型进行优化项目实战
26 2
|
14天前
|

「AIGC算法」大数据架构Lambda和Kappa
**Lambda与Kappa架构对比：** Lambda提供批处理和实时处理，保证数据最终一致性，但维护复杂。Kappa简化为单一流处理，易于维护，适合实时场景，但可能增加实时处理压力，影响稳定性。选择时考虑数据一致性、系统维护、成本和实时性需求。
24 0
|
14天前
|

「AIGC算法」K-means聚类模型
**K-means聚类模型概览：** - 是无监督学习算法，用于数据集自动分组。 - 算法步骤：初始化质心，分配数据点，更新质心，迭代直至收敛。 - 关键点包括K的选择、初始化方法、收敛性和性能度量。 - 优点是简单快速，适合大样本，但对初始点敏感，需预设K值，且仅适于球形簇。 - 应用场景包括图像分割、市场分析、异常检测等。 - 示例展示了使用scikit-learn对Iris数据集和自定义CSV数据进行聚类。
19 0
|
27天前
|

34 3
|
12天前
|

K-means聚类模型算法
K-means聚类模型算法
13 0
|
13天前
|

Python基于RFM模型和K-Means聚类算法进行航空公司客户价值分析
Python基于RFM模型和K-Means聚类算法进行航空公司客户价值分析
18 0