聚类
1.概念
聚类,简单来说,就是将一个庞杂数据集中具有相似特征的数据自动归类到一起,称为一个簇,簇内的对象越相似,聚类的效果越好。它是一种无监督的学习(Unsupervised Learning)方法,不需要预先标注好的训练集。聚类与分类最大的区别就是分类的目标事先已知,例如猫狗识别,你在分类之前已经预先知道要将它分为猫、狗两个种类;而在你聚类之前,你对你的目标是未知的,同样以动物为例,对于一个动物集来说,你并不清楚这个数据集内部有多少种类的动物,你能做的只是利用聚类方法将它自动按照特征分为多类,然后人为给出这个聚类结果的定义(即簇识别)。例如,你将一个动物集分为了三簇(类),然后通过观察这三类动物的特征,你为每一个簇起一个名字,如大象、狗、猫等,这就是聚类的基本思想。
2.K-means(k-均值)
KMeans 算法通过把样本分离成 n 个具有相同方差的类的方式来聚集数据,最小化称为 惯量(inertia) 或 簇内平方和(within-cluster sum-of-squares)的标准(criterion)。该算法需要指定簇的数量。它可以很好地扩展到大量样本(large number of samples),并已经被广泛应用于许多不同领域的应用领域。
K-means(K-均值)算法旨在选择一个质心, 能够最小化惯性或簇内平方和的标准:
3.算法的实现步骤
(1)随机选取 n 个质心(不必是数据中的点)
(2)然后将数据集中的每个点分配到一个簇中, 具体来讲, 就是为每个点找到距其最近的质心, 并将其分配到该质心所对应的簇. 这一步完成之后, 每个簇的质心更新为该簇所有点的平均值.
(3)重复上述过程直到数据集中的所有点都距离它所对应的质心最近时结束。
4.优缺点
优点:
1. 属于无监督学习,无须准备训练集
2.原理简单,实现起来较为容易
3.结果可解释性较好
缺点:
1. 需手动设置k值。 在算法开始预测之前,我们需要手动设置k值,即估计数据大概的类别个数,不合理的k值会使结果缺乏解释性
2. 可能收敛到局部最小值, 在大规模数据集上收敛较慢
3. 对于异常点、离群点敏感
5.K-Means 场景
kmeans,如前所述,用于数据集内种类属性不明晰,希望能够通过数据挖掘出或自动归类出有相似特点的对象的场景。其商业界的应用场景一般为挖掘出具有相似特点的潜在客户群体以便公司能够重点研究、对症下药。
6.代码实现
from sklearn.cluster import KMeans
from sklearn import preprocessing
import pandas as pd
import numpy as np
help(preprocessing)
# 数据加载
data = pd.read_csv('team_cluster_data.csv', encoding='gbk')
train_x = data[["2019国际排名","2018世界杯排名","2015亚洲杯排名"]]
kmeans = KMeans(n_clusters=3)
# 规范化到 [0,1] 空间
min_max_scaler=preprocessing.MinMaxScaler()
train_x=min_max_scaler.fit_transform(train_x)
#print(train_x)
# kmeans 算法
kmeans.fit(train_x)
predict_y = kmeans.predict(train_x)
# 合并聚类结果,插入到原数据中
result = pd.concat((data,pd.DataFrame(predict_y)),axis=1)
result.rename({0:u'聚类结果'},axis=1,inplace=True)
print(result)
# 将结果导出到CSV文件中
#result.to_csv("team_cluster_result.csv")
7.数据规范化的方式
(1).Min-max规范化
将原始数据投射到指定的空间[min,max]
新数值 = (原数值-极小值)/ (极大值 - 极小值)
当min=0, max=1时,为[0,1]规范化
sklearn中的MinMaxScaler 就是 [0,1] 规范化的具体实现。
而且进行[0, 1]规范化之后,可以让不同维度的特征数据,在同一标准下可以进行比较。
(2).Z-Score规范化
将原始数据转换为正态分布的形式
其具体实现 是:新数值 = (原数值 - 均值)/ 标准差
是当前用得最多的数据标准化方式。
并且该方法回答了这样一个问题:"给定数据距离其均值多少个标准差"
sklearn中的preprocessing.scale() 就是该方法的实现
(3).小数定标规范化
通过移动小数点的位置来进行规范化