|
|
@@ -24,7 +24,7 @@ |
|
|
|
"source": [ |
|
|
|
"## 1. 方法\n", |
|
|
|
"\n", |
|
|
|
"由于具有出色的速度和良好的可扩展性,K-Means聚类算法最经典的聚类方法。***k-Means算法是一个重复移动类中心点(重心,centroids)的过程***:\n", |
|
|
|
"由于具有出色的速度和良好的可扩展性,K-Means最经典的聚类方法。***k-Means算法是一个重复移动类中心点(重心,centroids)的过程***:\n", |
|
|
|
"* 移动中心点到其包含成员的平均位置;\n", |
|
|
|
"* 然后重新划分其内部成员。\n", |
|
|
|
"\n", |
|
|
@@ -51,7 +51,7 @@ |
|
|
|
"## 2. 算法\n", |
|
|
|
"求解成本函数最小化的参数就是一个重复配置每个类包含的观测值,并不断移动类重心的过程。\n", |
|
|
|
"\n", |
|
|
|
"输入:$T=\\{ x_1, x_2, ..., x_N\\}$,其中$x_i \\in R_n$,i=1,2...N\n", |
|
|
|
"输入:$T=\\{ x_1, x_2, ..., x_N\\}$,其中$x_i \\in \\mathbb{R}^D$,i=1,2...N\n", |
|
|
|
"\n", |
|
|
|
"输出:聚类集合$C_k$, 聚类中心$u_k$, 其中k=1,2,...K\n", |
|
|
|
"\n", |
|
|
@@ -236,7 +236,7 @@ |
|
|
|
"cell_type": "markdown", |
|
|
|
"metadata": {}, |
|
|
|
"source": [ |
|
|
|
"再重复上面的方法就会发现类的重心不变了,k-Means会在条件满足的时候停止重复聚类过程。通常,条件是前后两次迭代的成本函数值的差达到了限定值,或者是前后两次迭代的重心位置变化达到了限定值。如果这些停止条件足够小,k-Means就能找到最优解。不过这个最优解不一定是全局最优解。\n", |
|
|
|
"再重复上面的方法就会发现类的重心不变了,k-Means会在条件满足的时候停止重复聚类过程。通常,条件是前后两次迭代的成本函数值的差达到了限定值,或者是前后两次迭代的重心位置变化达到了限定值。如果这些停止条件足够小,k-Means就能找到最优解,不过这个最优解不一定是全局最优解。\n", |
|
|
|
"\n" |
|
|
|
] |
|
|
|
}, |
|
|
@@ -249,7 +249,7 @@ |
|
|
|
}, |
|
|
|
{ |
|
|
|
"cell_type": "code", |
|
|
|
"execution_count": 14, |
|
|
|
"execution_count": 5, |
|
|
|
"metadata": {}, |
|
|
|
"outputs": [ |
|
|
|
{ |
|
|
@@ -511,7 +511,7 @@ |
|
|
|
}, |
|
|
|
{ |
|
|
|
"cell_type": "code", |
|
|
|
"execution_count": 17, |
|
|
|
"execution_count": 6, |
|
|
|
"metadata": {}, |
|
|
|
"outputs": [ |
|
|
|
{ |
|
|
@@ -564,7 +564,7 @@ |
|
|
|
}, |
|
|
|
{ |
|
|
|
"cell_type": "code", |
|
|
|
"execution_count": 18, |
|
|
|
"execution_count": 7, |
|
|
|
"metadata": {}, |
|
|
|
"outputs": [ |
|
|
|
{ |
|
|
@@ -618,7 +618,7 @@ |
|
|
|
}, |
|
|
|
{ |
|
|
|
"cell_type": "code", |
|
|
|
"execution_count": 19, |
|
|
|
"execution_count": 8, |
|
|
|
"metadata": { |
|
|
|
"scrolled": true |
|
|
|
}, |
|
|
|