文章目录
1、监督学习和无监督学习
1.1 监督学习
- 监督学习:训练数据包含我们要预测的结果(训练数据中含有样本的标签),我们对含有标签的训练集建立模型,从而能够对未知标签的样本进行预测。
- 线性回归、逻辑回归、KNN、朴素贝叶斯、决策树等算法都属于监督学习。
1.2 非监督学习
- 非监督学习是与监督学习相对应的
- 非监督学习:训练数据中不包含标签
2、聚类
- 聚类属于无监督学习
- 聚类的目的是根据样本数据内部的特征,将数据划分为若干个类别,每个类别就是一个簇,结果使得同一个簇内的数据,相似度较大,而不同簇内的数据,相似度较小。
- 聚类也称为“无监督的分类”,其样本的相似性是根据距离来度量的。
3、K-Means算法
- K-Means算法,即K均值算法,是最常见的一种聚类的算法。
- K-Means算法会将数据集分为K个簇,每个簇使用簇内的所有样本的均值来表示,我们将该均值称为“质心”。
3.1 算法步骤
(1)从样本中选择K个点作为初始质心
(2)计算每个样本到各个质心的距离,将样本划分到距离最近的质心所对应的簇中。
(3)计算每个簇内所有样本的均值,并使用该均值更新簇的质心。
(4)重复步骤(2)、(3),直到达到以下条件之一结束:
- 质心的位置变化小于指定的阈值
- 达到最大迭代次数
3.2 算法优化目标
- K-Means算法的目标就是选择合适的质心,使得每个簇内,样本距离质心的距离尽可能的小,这样就可以保证簇内样本具有较高的相似性。
- 可以使用最小化簇内误差平方和(SSE)来作为优化算法的量化目标(目标函数),簇内误差平方和也称为簇惯性。
3.3 算法优缺点
K-Means算法优点:
- 理解和实现简单
- 可以很好的扩展到大量样本中
- 广泛应用于不同领域,如发现不同的用户群体进行有效的商品推荐等。
K-Means算法缺点:
- 需要事先指定K值,如果K值选择不当,聚类效果可能不佳。
- 聚类结果受初始化质心的影响,可能会收敛到局部最小值。
- 适用于凸形的数据分布,对于条形或不规则形状的数据,效果较差。
3.4 K-Means实践
假设班级有50名学生参加期末考试,考试科目为语文和数学,分数在70-100分之间,现在想根据分数将学生分成若干个类别。
用np.random.ranint(),随机生成成绩,并绘制学生成绩的散点图:
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams["font.family"] = "SimHei"
plt.rcParams["axes.unicode_minus"] = False
plt.rcParams["font.size"] = 12
np.random.seed(1)
X = np.random.randint(70, 100, size=(50, 2)) # 生成样本数据
plt.scatter(X[:, 0], X[:, 1])
plt.xlabel("语文")
plt.ylabel("数学")
使用scikit-learn中提供的KMeans类,实现K均值聚类,并在训练完成后,获取相关属性值:
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=4) # n_clusters:簇的数量。
kmeans.fit(X)
print("质心:", kmeans.cluster_centers_) # 获取聚类后的质心。
print("标签:", kmeans.labels_) # 获取每个样本所属的簇。标签的数值对应所属簇的索引。
print