一、聚类
聚类是将数据对象的集合分成相似的对象类的过程,使得同一个簇或者类中的对象之间有较高的相似性,而不同簇中的对象具有较高的相异性。
分类与聚类的区别:
①分类是为了建立分类模型而分析的数据对象,其类别是已知的;而聚类处理的所有数据对象的类别都是未知的。
②分类是具有指导的,是通过例子学习的过程,而聚类是无指导的,通过观察学习的过程。
距离相似性的测量:
聚类过程:
准备数据-属性选取以及提取-某种聚类算法-评估结果(后三个可互相迭代)
二、k-均值算法(k-means)
过程:
①首先输入k的值,既希望将数据集经过聚类得到k个分类或者分组。
②从数据集中随机选择k个数据点作为簇质心,每个簇质心代表一个簇。
③对每个数据集中的每个数据计算到质心的距离(取绝对值),得到一组距离值,找出最小距离值对应簇质心,将其划分到该簇中。
④根据每个簇包含的对象集合,重新计算得到一个新的簇质心(计算平均值)
⑤不断迭代3-5步骤,直到簇不变。通常目标函数设定为所有簇中各个对象与均值之间的误差平方和小于某个阈值。
举例:
假设给定如下,要使用K-均值聚类方法进行聚类:
{4,9,13,23,5,11,16,7,20} 并假设k =3。
m1 | m2 | m3 | k1 | k2 | k3 |
4 | 9 | 13 | {4,5} | {9,11,7} | {13,23,16,20} |
4.5 | 9 | 18 | {4,5} | {9,13,11,7} | {23,16,20} |
4.5 | 10 | 19.66 | {4,5,7} | {9,11,13} | {23,16,20} |
5.33 | 11 | 19.66 | {4,5,7} | {9,11,13} | {23,16,20} |
三、使用sklearn转换器处理数据
scikit-learn是python中强大的机器学习工具包,依赖于python的numpy,scipy和matplotlib库。
提供了估计机器学习统计模型的功能,包括回归、分类、聚类,以及数据处理、数据降维和模型选择等功能。
内容 | 应用(Applications) | 算法(Algorithm) |
回归(regression) | 价格预测、趋势预测等 | 线性回归,SVR等 |
降维 (Dimension Reduction) | 可视化 | PCA,NMF等 |
分类(Classification) | 异常检测、图像识别等 | KNN、SVM等 |
聚类(Clustering) | 图像分割、群体划分等 | K-means,谱聚类等 |
1、datasets模块常用的数据集加载函数以及解释
sklearn库的datasets模块集成了部分数据分析的经典数据集,可以使用这些数据集进行数据的预处理、建模等操作。
①使用sklearn进行数据预处理会用到sklearn提供的统一接口——转换器(Transformer)
②加载之后的数据集可以视作为一个字典,几乎所有的sklearn数据集均可以用data(数据)、target(标签)、feature_names(特征名称)、DESCR(描述)获取相应信息。
③sklearn除了提供分类、聚类、回归,还提供了模型选择模块(model_selection)、数据预处理模块(preprocessing)、特征分解模块(decompisition),通过这三个模块能够实现数据的预处理和模型构建前对数据的标准化、二值化、数据集的分割、交叉验证和pca降维等。
2、数据集的划分
一般分为:①训练集②验证集③测试集
经典划分方式是训练集占样本50%,验证集和测试集各占25%
k折交叉验证法:当数据量少的时候就不适合划分三部分了,常用的是留少部分做测试集,其他采用k折交叉验证法。
①将样本打乱,均分为k份
②轮流选择其中k-1份作为训练,剩余一份做验证
③计算预测误差平方和,把k次的预测误差平方和的均值作为选择最优模型结构的依据
from sklearn.model_selection import train_test_split
sklearn.model_selection.train_test_split(*arrays, **options)
# 使用 train_test_split 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42)
sklearn把相关的功能封装为转换器(transformer)。使用sklearn转换器能够实现对传入的NumPy数组进行标准化处理,归一化处理,二值化处理,PCA降维等操作。转换器主要包括三个方法:
方法名称 | 说明 |
fit | fit方法主要通过分析特征和目标值,提取有价值的信息,这些信息可以是统计量,也可以是权值系数等。 |
transform | transform方法主要用来对特征进行转换。从可利用信息的角度可分为无信息转换和有信息转换。无信息转换是指不利用任何其他信息进行转换,比如指数和对数函数转换等。有信息转换根据是否利用目标值向量又可分为无监督转换和有监督转换。无监督转换指只利用特征的统计信息的转换,比如标准化和PCA降维等。有监督转换指既利用了特征信息又利用了目标值信息的转换,比如通过模型选择特征和LDA降维等。 |
fit_transform | fit_transform方法就是先调用fit方法,然后调用transform方法。 |
预处理部分:
函数名称 | 说明 |
MinMaxScaler | 对特征进行离差标准化。 |
StandardScaler | 对特征进行标准差标准化。 |
Normalizer | 对特征进行归一化。 |
Binarizer | 对定量特征进行二值化处理。 |
OneHotEncoder | 对定性特征进行独热编码处理。 |
FunctionTransformer | 对特征进行自定义函数变换。 |
3、聚类方法类别
四类:①划分方法②层次分析方法③基于密度的方法④基于网格的方法
算法类别 | 包括的主要算法 |
划分(分裂)方法 | K-Means算法(K-平均),K-MEDOIDS算法(K-中心点)和 CLARANS算法(基于选择的算法)。 |
层次分析方法 | BIRCH算法(平衡迭代规约和聚类),CURE算法(代表点聚类)和 CHAMELEON算法(动态模型)。 |
基于密度的方法 | DBSCAN算法(基于高密度连接区域),DENCLUE算法(密度分布函数)和 OPTICS算法(对象排序识别)。 |
基于网格的方法 | STING算法(统计信息网络),CLIOUE算法(聚类高维空间)和 WAVE-CLUSTER算法(小波变换)。 |
sklearn估计器:
方法名称 | 说明 |
fit | fit方法主要用于训练算法。该方法可接收用于有监督学习的训练集及其标签两个参数, 也可以接收用于无监督学习的数据。 |
predict | predict用于预测有监督学习的测试集标签,亦可以用于划分传入数据的类别。 |
4、聚类模型评价指标
聚类评价的标准是组内的对象相互之间是相似的,而不同组中的对象是不同的。即组内相似性越大,组间差别越大,聚类效果就越好。sklearn中的metrics模块提供了聚类模型评价指标。
方法名称 | 真实值 | 最佳值 | sklearn函数 |
ARI评价法(兰德系数) | 需要 | 1.0 | adjusted_rand_score |
AMI评价法(互信息) | 需要 | 1.0 | adjusted_mutual_info_score |
V-measure评分 | 需要 | 1.0 | completeness_score |
FMI评价法 | 需要 | 1.0 | fowlkes_mallows_score |
轮廓系数评价法 | 不需要 | 畸变程度最大 | silhouette_score |
Calinski-Harabasz指数评价法 | 不需要 | 相较最大 | calinski_harabaz_score |
score = fowlkes_mallows_score(iris_target, kmeans.labels_)