这章讲的其实是
非监督学习
。大多数情况下从现实世界获取的数据并不附有标记,通过非监督学习仍然可以从这些数据中有所收获。
最基本的聚类算法,也是目前使用最多的聚类算法叫做
K-均值(K-Means)
。
文章目录如下:
聚类简单应用
假设John和Katie都喜欢收藏电影并为它们划分等级,从非常差到非常好。John偏好动作片,Katie偏好文艺片,如下图所示,无需了解电影的细节信息,我们就可以将其划分为A类别和B类别。了解这些信息的意义在于下次Katie进入影院的时候可以向她推荐合适的电影。
通过
聚类算法
,可以推论不同的类别,甚至可以通过电影标题了解这些类别的含义。
K-Means算法流程
首先随意画出
聚类中心
,第一次基本上不会是正确的聚类中心。接下来K-Means算法会循环如下两步:
-
分配 (assign)
-
优化 (optimize)
分配
:假设对于cluster 1,选择距离中心 1 比中心 2更近的红色点。
方法如下:在两个集群中心之间画一条线,然后再画一条等距且垂直的线。这条垂直线将区域分为两个部分。一个是与第一个中心点较近的部分,另一个是与第二个中心点较近的部分。
优化:
通过移动聚类中心到这些点的总二次距离降到最小。
上述两个步骤的反复迭代即K-Means算法
,最终结果如下图所示:
K-Means聚类可视化
一个将K-Means聚类可视化的非常棒的网站:
http://www.naftaliharris.com/blog/visualizing-k-means-clustering/
sklearn
K-Means in sklearn
先来看几个重要参数:
n_clusters
: 默认值为8。代表算法中的聚类数量。可以由使用者根据情况自行设置。
max_iter
: 默认值为300。矩心分配和移动迭代的次数,即算法迭代的次数。在多数情况下,算法到达最大迭代次数前就可能终止了。
n_int
:算法初始化的次数。即初始化时选择不同的矩心(centroid seeds),最后会选择表现最好的那个。
聚类数量n_clusters是最最重要的参数。
K-Means的局限
这小节主要描述K-Means算法
能做和不能做的
是什么。主要讨论对象是
局部极小值
。
问题
:对于一个固定的数据集,一个固定数量的蔟中心(cluster center),在运行K-Means算法时,是否总会得到相同的结果?
答案是否定的。
K-Means是所谓的爬山算法(climbing algorithm),因此它非常依赖初始聚类中心所处的位置。
可能会有多个局部极小值,好的或是不好的
。如果我们有越多的聚类中心,就能找到越多的局部最小值,所以我们需要将算法运行多次已找出最好的局部极小值。
比如下图的这个例子:
前言这章讲的其实是非监督学习。大多数情况下从现实世界获取的数据并不附有标记,通过非监督学习仍然可以从这些数据中有所收获。最基本的聚类算法,也是目前使用最多的聚类算法叫做K-均值(K-Means)。文章目录如下:聚类简单应用假设John和Katie都喜欢收藏电影并为它们划分等级,从非常差到非常好。John偏好动作片,Katie偏好文艺片,如下图所示,无需了解电影的细节信息,我们就可...
1.导入相应包
from sklearn.
cluster
import KMeans
from sklearn.metrics import silhouette_samples, silhouette_score
from matplotlib import pyplot as plt
from matplotlib import cm
import numpy as np
from sklearn.datasets import make_blobs
2.生成数据集
X, y = make_blobs
k-means
聚类
算法
k-means
算法属于无
监督
学习的一种
聚类
算法,其目的为:在不知数据所属类别及类别数量的前提下,依据数据自身所暗含的特点对数据进行
聚类
。对于
聚类
过程中类别数量k的选取,需要一定的先验知识,也可根据“类内间距小,类间间距大“(一种
聚类
算法的理想情况)为目标进行实现。
需要用到sklearn库,scikit-learn是Python的一个开源
机器学习
模块,它建立在NumPy,S...
Kmeans
KMeans算法将一组N个样本的特征矩阵X划分为K个无交集的簇,直观上来看是簇是一组一组聚集在一起的数 据,在一个簇中的数据就认为是同一类。簇就是
聚类
的结果表现。 簇中所有数据的均值 通常被称为这个簇的“质心”(centroids)。在一个二维平面中,一簇数据点的质心的 横坐标就是这一簇数据点的横坐标的均值,质心的纵坐标就是这一簇数据点的纵坐标的均值。同理可推广至高维空间。
Kmeans
随机抽取K个样本作为最初的质心
1.1 无
监督
学习与
聚类
算法
在过去的五周之内,我们学习了决策树,随机森林,逻辑回归,他们虽然有着不同的功能,但却都属于“有
监督
学习”的一部分,即是说,模型在训练的时候,即需要特征矩阵X,也需要真实标签y。
机器学习
当中,还有相当一部分算法属于“无
监督
学习”,无
监督
的算法在训练的时候只需要特征矩阵X,不需要标签。我们曾经学过的PCA降维算法就是无
监督
学习中的一种,
聚类
算法,也是无
监督
学习的代表算法之一。
聚类
算法又叫做“无
监督
分类”,其目的是将数据划分成有意义或有用的组(或簇)。这种划分可以基于我们
KMeans重要参数:n_
cluster
s
参数n_
cluster
s 是 KMeans 中的 K,表示我们告诉模型要分几类。这是 Kmeans 当中唯一一个必填的参数,默认为 8 类,但通常我们的
聚类
结果会是一个小于 8 的结果。通常,在开始
聚类
之前,并不知道n_
cluster
s 究竟是多少,因此我们要对它进行探索。
当拿到一个数据集,如果可能的话,希望能够通过绘图先观察一下这个数据集的数据分布,以此为
聚类
时输入的 n_
cluster
s 做一个参考。
尝试在代码框执行以下代码:
首先,我们来自己创建一个数据
n_
cluster
s 是用于
聚类
算法的参数,表示要将数据分为多少个簇(
cluster
s)。
聚类
算法是一种无
监督
学习技术,它将相似的数据分为一组,而不需要事先知道组的数量或每组的组成情况。n_
cluster
s 参数指定了算法需要将数据分成多少组。
它的值需要人为确定,不同的数据集可能需要不同的 n_
cluster
s 值。在实际使用中,通常需要通过试验不同的值,并通过可视化或评估指标等方法来评估结果...
from sklearn.
cluster
import KMeans
from sklearn.metrics import silhouette_samples, silhouette_score
import matplotlib.pyplot as plt
import matplotlib.cm as cm # colormap
import numpy as np
# 基于我们的轮廓系数来选择最佳的n_
cluster
s
# 想要知道每个聚出来的类的轮廓系数是多少,还想要一个.
对于均值分布,其中每个均值都是样本量为 n 的均值,该分布的标准偏差就等于总体标准偏差除以平方根 n,这就叫做中心极限定理,数学公式表达为
M = ( X1 + X2 + … + Xn ) / n
M ~ N(μ,σ²/n)
中心极限定理适用于任何总体,总体可以是任何形状。
假设我们从中抽取一个样本并计算出均值,然后再抽取出一个样本并计算出均值,持续这么操...