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

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```

0 条评论

• ### 浅析Numpy.genfromtxt及File I/O讲解

Python 并没有提供数组功能，虽然列表 (list) 可以完成基本的数组功能，但它并不是真正的数组，而且在数据量较大时，使用列表的速度就会慢的让人难受。为此...

• ### 【机器学习笔记之二】决策树的python实现

本文结构： 是什么？ 有什么算法？ 数学原理？ 编码实现算法？ ---- 1. 是什么？ 简单地理解，就是根据一些 feature 进行分类，每个节点提一个问题...

• ### Codeforces 834D The Bakery【dp+线段树维护+lazy】

D. The Bakery time limit per test:2.5 seconds memory limit per test:256 megabyte...

• ### 机器理解大数据的秘密：聚类算法深度详解

来源：机器之心 作者：Peter Gleeson 校对：吼海雕 编辑：冯夕琴 本文共6800字，建议阅读17分钟 本文对一些聚类算法进行了基础介绍，并通过简单而...

• ### 机器理解大数据的秘密：聚类算法深度详解

选自Medium 作者：Peter Gleeson 机器之心编译 参与：吴攀、蒋思源、李泽南、李亚洲 在理解大数据方面，聚类是一种很常用的基本方法。近日，数据科...

• ### 独家 | 如何在BigQueryML中使用K-均值聚类来更好地理解和描述数据（附代码）

本文教你如何在BigQueryML中使用K均值聚类对数据进行分组，进而更好地理解和描述。

• ### 聚类方法的区别解读：各种聚类分析呀呀呀

k 均值聚类法 快速高效,特别是大量数据时,准确性高一些,但是需要你自己指定聚类的类别数量 系统聚类法则是系统自己根据数据之间的距离来自动列出类别,所以通过系统...

• ### 推荐｜数据科学家需要了解的5大聚类算法

IT派 - {技术青年圈} 持续关注互联网、大数据、人工智能领域 聚类是一种涉及数据点分组的机器学习技术。给定一个数据点集，则可利用聚类算法将每个数据点分类...

• ### 一文详解聚类和降维（附实例、代码）

来源：机器之心 作者：Vishal Maini 本文长度为3500字，建议阅读6分钟 本文对无监督学习的聚类和降维算法进行介绍，其中包括 K 均值聚类、层次聚类...

• ### 机器学习感兴趣么？无监督的遥感图像分类感兴趣吗？来嘛！

注释一下，一共通过无监督方式分类8种地物，由于是无监督，所以这8类分别是什么，也不知道，而且密密麻麻的，看的清么？