【机器学习】基础+数据预处理+分类与聚类算法
机器学习入门
1. 基础
1.1 机器学习任务
- 分类(Classification)、回归(Regression)、聚类(Clustering)
- 降维(Dimensionality Reduction)、去噪(Denoising)
- 机器翻译(Machine Translation)、异常检测(Anomaly Detection)等
1.2 基本流程
1.3 概念
特征值
- 特征值(Eigenvalue):将数据的特征用数值表达的结果即为该数据的特征值。
数据集划分
- 训练集(Training Set):包含待训练数据的所有特征以及该数据的标签,用于训练模型。
- 验证集:包含待验证数据的所有特征以及该数据的标签,用于调整模型,验证模型的精确度。
- 测试集(Test Set):包含待测试数据的所有特征以及该数据的标签,用于评估模型,检测模型是否符合要求。
模型效果描述
- 拟合(Fitting):指模型与训练数据和测试数据具有较好的拟合性。
- 欠拟合(Underfitting):指在训练数据和预测结果时,模型精确度均不高的情况。
- 过拟合(Overfitting):指模型出现拟合过度的情况。表现为模型在训练数据中表现良好,在预测时却表现较差。
机器学习类型
- 监督学习(Supervised Learning):指从带有标注的训练数据中学习到如何对训练数据的特征进行判断,即已经知道输入和输出结果之间的关系,并根据已知的关系训练得到一个最优的模型。主要用于分类和回归。
- 无监督学习(Unsupervised Learning):指从没有标注的训练数据中学习数据的特征或信息。主要用于聚类和降维。
- 半监督学习(Semi-Supervised Learning):介于监督学习和无监督学习之间,往往都是利用额外信息,在监督学习和无监督学习的基础上进行扩展的学习。
- 强化学习:通常用马尔可夫决策过程来描述:就是一个智能体采取行动从而改变自己的状态获得奖励与环境发生交互的循环过程。
1.4 性能评估
-
准确率(Accuracy):指分类正确的样本占总样本的比例。
\[Accuracy = \frac{n_{correct}}{n_{total}} \] -
查准率(Precision,P):指正确被检索的样本占所有实际被检索到的样本的比例。
\[P = \frac{TP}{TP + FP} \] -
查全率(Recall,R):指正确被检索的样本占所有应该检索到的样本的比例。
\[R = \frac{TP}{TP + FN} \] -
综合评价指标(F1):是查准率和查全率之间的一个平衡点,是查准率P和查全率R的调和均值。
\[F1 = \frac{2\times P\times R}{P+R} = \frac{2TP}{样例总数 + TP - TN} \]
P-R图
样本模型类别 | 判断是对的(True) | 判断是错的(False) |
---|---|---|
肯定的(Positives) | TP | FP |
否定的(Negatives) | TN | FN |
TP(True Positive): 真正例,即把正例正确预测为正例
FP(False Positive): 假正例,即把负例错误预测为正例
FN(False Negative): 假负例,即把正例错误预测为负例
TN(True Negative): 真负例,即把负例正确预测为负例
2. 数据预处理
2.1 定义
数据预处理(Data Preprocessing)是指在对数据进行数据挖掘的主要处理以前,先对原始数据进行必要的清理、集成、转换、离散、归约、特征选择和提取等一系列的处理工作,以达到挖掘算法进行知识获取研究所要求的最低规范和标准。
常见问题
- 数据采样(Data Sampling)
- 数据清理(Data Cleaning)
- 数据集成(Data Integration)
- 数据变换(Data Transformation)
- 数据归约(Data Reduction)
- 数据选择(Feature Selection)
- 特征提取(Feature Extraction)
2.2 数据采样
- 加权采样
- 随机采样
- 分层采样
2.3 数据清理
2.3.1 填充缺失值
- 忽略元组
- 人工填写缺失值
- 使用一个全局常量填充缺失值
- 用属性的均值填充缺失值
- 用同类样本的属性均值填充缺失值
- 使用最可能的值填充缺失值
2.3.2 光滑噪声数据
噪声(Noise)是指被测量变量的随机误差或方差。
- 分箱
- 回归
- 聚类
2.3.3 数据清理过程
- 偏差检测(Discrepancy Detection)
- 偏差纠正(Discrepancy Correction)
2.4 数据集成
考虑问题:
- 模式集成和对象匹配问题
- 冗余问题
- 数据值冲突的检测与处理
常用方法:
- 联邦数据库系统
- 中间件模式
- 数据仓库
2.5 数据变换
2.5.1 介绍
数据变换的目的是将数据转换或统一成适合于挖掘的形式。
涉及内容:
- 光滑
- 聚集
- 数据泛化
- 数据规范化
- 属性构造(或特征构造)
2.5.2 数据规范化
最小-最大规范化(min-max规范化)
【+】例:使用min-max方法规范化数据组:200,300,400,600,1000的结果分别是0
、0.125
、0.25
、0.5
、1
。
z-score规范化
【+】例:假定属性平均家庭总收入的均值和标准差分别为9000元和2400元,值12600元使用z-score规范化转换结果为:1.5
。
按小数定标规范
【+】例:假定A的取值范围是-1075~923。使用十进制缩放规范化方法转换-1075结果为:-0.1075
,923转换结果为:0.0923
。
3. 分类算法
3.1 朴素贝叶斯分类算法
介绍
朴素贝叶斯(Naive Bayes)分类算法是利用概率统计进行分类的算法。该算法基于贝叶斯定理。
步骤
【+】例:表1是购买汽车的顾客分类训练样本集。假设顾客的属性集家庭经济状况、信用级别和月收入之间条件独立,则对于某顾客(测试样本),已知其属性集X=<一般,优秀,12K>,利用朴素贝叶斯分类器计算这位顾客购买汽车的概率。
【-】解:
P(是)=7/10
P(否)=3/10
P(X|是)=P(一般|是)*P(优秀|是)*P(12K|是)=4/7*4/7*1/7=12/343
P(是|X)=P(是)*P(X|是) = 7/10*16/343=112/3430=0.033
P(X|否)= P(一般|否)*P(优秀|否)*P(12K|否)=3/3*0/3*0/3=0
P(否|X)=P(否)*P(X|否)= 3/10*0=0
因为 P(是|X)>P(否|X)
所以购买汽车,概率为0.033
特点
优点
- 逻辑简单、易于实现、分类过程中算法的时间空间开销比较小;
- 算法比较稳定、分类性能对于具有不同数据特点的数据集合其差别不大,即具有比较好的健壮性。
缺点
假设所有特征属性对分类的影响是相互独立的,当这些特征属性存在关联性时分类效果会变差。
3.2 KNN分类算法
介绍
KNN(k-Nearest Neighbor,K最近邻)分类算法是最简单的机器学习算法之一。该算法最初由Cover和Hart于1968年提出,它根据距离函数计算待分类样本X和每个训练样本的距离(作为相似度),选择与待分类样本距离最小的K个样本作为X的K个最近邻,最后以X的K个最近邻中的大多数样本所属的类别作为X的类别。
步骤
- 初始化距离为最大值;
- 计算测试样本和每个训练样本的距离dist;
- 得到目前K个最近邻样本中的最大距离maxdist;
- 如果dist小于maxdist,则将该训练样本作为K最近邻样本;
- 重复步骤2、3和4,直到测试样本和所有训练样本的距离都计算完毕;
- 统计K个最近邻样本中每个类别出现的次数;
- 选择出现频率最大的类别作为测试样本的类别。
【+】例:使用KNN算法对两个未知类型的样本进行分类(冰川水或者湖泊水),样本数据如下表所示,其中K=3,即选择最近的3个邻居,试问表中样本G的类型是 湖泊水
,H的类型是 冰川水
。
样本 | Ca+浓度 | Mg+浓度 | Na+浓度 | Cl-浓度 | 类型 |
---|---|---|---|---|---|
A | 0.2 | 0.5 | 0.1 | 0.1 | 冰川水 |
B | 0.4 | 0.3 | 0.4 | 0.3 | 湖泊水 |
C | 0.3 | 0.4 | 0.6 | 0.3 | 冰川水 |
D | 0.2 | 0.6 | 0.2 | 0.1 | 冰川水 |
E | 0.5 | 0.5 | 0.1 | 0 | 湖泊水 |
F | 0.3 | 0.3 | 0.4 | 0.4 | 湖泊水 |
G | 0.3 | 0.3 | 0.3 | 0.2 | ? |
H | 0.1 | 0.5 | 0.2 | 0.2 | ? |
【-】解:
dist(G,A)^2=0.1
dist(G,B)^2=0.03
dist(G,C)^2=0.11
dist(G,D)^2=0.12
dist(G,E)^2=0.16
dist(G,F)^2=0.05
G的三个最近的邻居是B、F、A,因此G的类型是湖泊水
dist(H,A)^2=0.03
dist(H,B)^2=0.18
dist(H,C)^2=0.22
dist(H,D)^2=0.03
dist(H,E)^2=0.21
dist(H,F)^2=0.16
H的三个最近的邻居是A、D、F,因此H的类型是冰川水
特点
优点
- 简单,易于理解,易于实现,无需估计参数;
- 当有新样本要加入训练集中时,无需重新训练(即重新训练的代价低);
- 计算时间和空间线性于训练集的规模,对某些问题而言这是可行的;
- 适合对稀有事件进行分类;
- 特别适合于多分类问题。
缺点
- 分类速度慢;
- 各属性的权重相同,影响准确率;
- 样本库容量依赖性较强;
- K值不好确定。
改进策略
- 从降低计算复杂度的角度
- 进行特征选择。使用KNN算法之前对特征属性进行约简,删除那些对分类结果影响较小(或不重要)的特征,则可以加快KNN算法的分类速度。
- 缩小训练样本集的大小。在原有训练集中删除与分类相关性不大的样本。
- 通过聚类,将聚类所产生的中心点作为新的训练样本。
- 从优化相似性度量方法的角度
- 基于欧几里得距离来计算样本的相似度可能会对噪声特征非常敏感。
- 可以在度量相似度距离公式中给特征赋予不同权重,特征的权重一般根据各个特征在分类中的作用而设定。
- 从优化判决策略的角度
- 传统KNN算法存在缺点:当样本分布不均匀(训练样本各类别之间数目不均衡,或者即使基本数目接近,由于其所占区域大小的不同)时,只按照前K个近邻顺序而不考虑它们的距离会造成分类不准确。
- 可以采用均匀化样本分布密度的方法加以改进。
- 从选取恰当K值的角度
- 目前为止,没有成熟的方法和理论来指导K值的选择,大多数情况需要通过反复试验来调整K值的选择。
3.3 决策树分类算法
介绍
决策树(Decision Tree)是一类常见的机器学习方法,可应用于分类与回归任务。决策树是基于树结构来进行决策的。
ID3算法
介绍
基本决策树构造算法是一个贪心算法,它采用自顶向下递归的方法构造决策树,著名的决策树算法ID3算法的基本策略如下。
- 树以代表训练样本的单个节点开始;
- 如果样本都在同一个类中,则这个节点成为树叶结点并标记为该类别;
- 否则算法使用信息熵(称为信息增益)作为启发知识来帮助选择合适的将样本分类的属性,以便将样本集划分为若干子集,该属性就是相应节点的“测试”或“判定”属性,同时所有属性应当是离散值。
- 对测试属性的每个已知的离散值创建一个分支,并据此划分样本;
- 算法使用类似的方法,递归地形成每个划分上的样本决策树,一个属性一旦出现在某个结点上,那么它就不能再出现在该结点之后所产生的子树结点中;
- 整个递归过程在下列条件之一成立时停止。
- 给定结点的所有样本属于同一类;
- 没有剩余属性可以用来进一步划分样本,这时候该结点作为树叶,并用剩余样本中所出现最多的类型作为叶子结点的类型;
- 某一分枝没有样本,在这种情况下以训练样本集中占多数的类创建一个树叶
相关定义
-
信息熵:设S是训练样本集,它包括n个类别的样本,那么S的熵(entropy)或者期望信息为:
\[entropy(S)=-\sum_{i=0}^{n}p_ilog_2{p_i} \]设属性A将S划分成m份,根据A划分的子集的熵或期望信息为:
\[entropy(S,A)=\sum_{i=0}^{m}\frac{|S_i|}{|S|}entropy(S_i) \]其中,\(S_i\) 表示根据属性A划分的S的第i个子集, \(|S|\) 和 \(|S_i|\)分别表示 \(S\)和 \(S_i\)中的样本数目。
-
信息增益:使用属性A对S进行划分获得的信息增益为:
\[gain(S,A)=entropy(S)-entropy(S,A) \]
步骤
【+】例:表1给出了一个可能带有噪音的数据集合。它有四个属性:Outlook、Temperature、Humidity和Windy。它们分别为No和Yes两类。通过ID3算法构造用于分类的决策树。 表1 样本数据集
属性 | Outlook | Temperature | Humidity | Windy | 类 |
---|---|---|---|---|---|
1 | Overcast | Hot | High | Not | No |
2 | Overcast | Hot | High | Very | No |
3 | Overcast | Hot | High | Medium | No |
4 | Sunny | Hot | High | Not | Yes |
5 | Sunny | Hot | High | Medium | Yes |
6 | Rain | Mild | High | Not | No |
7 | Rain | Mild | High | Medium | No |
8 | Rain | Hot | Normal | Not | Yes |
9 | Rain | Cool | Normal | Medium | No |
10 | Rain | Hot | Normal | Very | No |
11 | Sunny | Cool | Normal | Very | Yes |
12 | Sunny | Cool | Normal | Medium | Yes |
13 | Overcast | Mild | High | Not | No |
14 | Overcast | Mild | High | Medium | No |
15 | Overcast | Cool | Normal | Not | Yes |
16 | Overcast | Cool | Normal | Medium | Yes |
17 | Rain | Mild | Normal | Not | No |
18 | Rain | Mild | Normal | Medium | No |
19 | Overcast | Mild | Normal | Medium | Yes |
20 | Overcast | Mild | Normal | Very | Yes |
21 | Sunny | Mild | High | Very | Yes |
22 | Sunny | Mild | High | Medium | Yes |
23 | Sunny | Hot | Normal | Not | Yes |
24 | Rain | Mild | High | Very | No |
【-】解:
对样本集X,计算其熵
\(entropy(X)=-\frac{12}{24}log_2{\frac{12}{24}} - \frac{12}{24}log_2{\frac{12}{24}} = 1.0\)
分别计算Outlook、Temperature、Humidity、Windy对于样本集X划分的熵。
(1)计算
\(entropy(X, Outlook)\)
\(=\frac{9}{24}(-\frac{4}{9}log_2{\frac{4}{9}}-\frac{5}{9}log_2{\frac{5}{9}})+\frac{7}{24}(-\frac{7}{7}log_2{\frac{7}{7}}-0)+\frac{8}{24}(-\frac{1}{8}log_2{\frac{1}{8}}-\frac{7}{8}log_2{\frac{7}{8}})\)
\(= 0.5528\)
\(gain(X, Outlook) = entropy(X) - entropy(X, Outlook) = 0.4472\)(2)计算
\(entropy(X, Temperature)\)
\(=\frac{8}{24}(-\frac{4}{8}log_2{\frac{4}{8}}-\frac{4}{8}log_2{\frac{4}{8}})+\frac{11}{24}(-\frac{4}{11}log_2{\frac{4}{11}}-\frac{7}{11}log_2{\frac{7}{11}})+\frac{5}{24}(-\frac{4}{5}log_2{\frac{4}{5}}-\frac{1}{5}log_2{\frac{1}{5}})\)
\(= 0.9172\)
\(gain(X, Temperature) = entropy(X) - entropy(X, Temperature) = 0.0828\)(3)计算
\(entropy(X, Humidity)\)
\(=\frac{12}{24}(-\frac{4}{12}log_2{\frac{4}{12}}-\frac{8}{12}log_2{\frac{8}{12}})+\frac{12}{24}(-\frac{8}{12}log_2{\frac{8}{12}}-\frac{4}{12}log_2{\frac{4}{12}}))\)
\(= 0.9183\)
\(gain(X, Humidity) = entropy(X) - entropy(X, Humidity) = 0.0817\)(4)计算
\(entropy(X, Windy)\)
\(=\frac{8}{24}(-\frac{4}{8}log_2{\frac{4}{8}}-\frac{4}{8}log_2{\frac{4}{8}})+\frac{6}{24}(-\frac{3}{6}log_2{\frac{3}{6}}-\frac{3}{6}log_2{\frac{3}{6}})+\frac{10}{24}(-\frac{5}{10}log_2{\frac{5}{10}}-\frac{5}{10}log_2{\frac{5}{10}})\)
\(= 1.0\)
\(gain(X, Windy) = entropy(X) - entropy(X, Windy) = 0\)因为gain(X, Outlook)最大,所以选取Outlook属性对样本集进行划分,根据Outlook的取值将样本集划分为三个子集:
X1:
属性 Temperature Humidity Windy 类 1 Hot High Not No 2 Hot High Very No 3 Hot High Medium No 4 Mild High Not No 5 Mild High Medium No 6 Cool Normal Not Yes 7 Cool Normal Medium Yes 8 Mild Normal Medium Yes 9 Mild Normal Very Yes X2:
属性 Temperature Humidity Windy 类 1 Hot High Not Yes 2 Hot High Medium Yes 3 Cool Normal Very Yes 4 Cool Normal Medium Yes 5 Mild High Very Yes 6 Mild High Medium Yes 7 Hot Normal Not Yes X3:
属性 Temperature Humidity Windy 类 1 Mild High Not No 2 Mild High Medium No 3 Hot Normal Not Yes 4 Cool Normal Medium No 5 Hot Normal Very No 6 Mild Normal Not No 7 Mild Normal Medium No 8 Mild High Very No 对样本集X1,计算其熵
\(entropy(X1)=-\frac{4}{9}log_2{\frac{4}{9}}-\frac{5}{9}log_2{\frac{5}{9}}=0.991\)分别计算Temperature、Humidity、Windy对于样本集X1划分的熵。
(1)计算
\(entropy(X1, Temperature)\)
\(=\frac{3}{9}(-0-\frac{3}{3}log_2{\frac{3}{3}})+\frac{4}{9}(-\frac{2}{4}log_2{\frac{2}{4}}-\frac{2}{4}log_2{\frac{2}{4}})+\frac{2}{9}(-\frac{2}{2}log_2{\frac{2}{2}}-0)\)
\(= 0.444\)
\(gain(X1,Temperature) = entropy(X1) - entropy(X1, Temperature) = 0.547\)(2)计算
\(entropy(X1, Humidity)\)
\(=\frac{5}{9}(-0-\frac{5}{5}log_2{\frac{5}{5}})+\frac{4}{9}(-\frac{4}{4}log_2{\frac{4}{4}}-0)\)
\(= 0\)
\(gain(X1,Humidity) = entropy(X1) - entropy(X1, Humidity) = 0.991\)(3)计算
\(entropy(X1, Windy)\)
\(=\frac{3}{9}(-\frac{1}{3}log_2{\frac{1}{3}}-\frac{2}{3}log_2{\frac{2}{3}})+\frac{4}{9}(-\frac{2}{4}log_2{\frac{2}{4}}-\frac{2}{4}log_2{\frac{2}{4}})+\frac{2}{9}(-\frac{1}{2}log_2{\frac{1}{2}}-\frac{1}{2}log_2{\frac{1}{2}})\)
\(= 0.973\)
\(gain(X1,Windy) = entropy(X1) - entropy(X1, Windy) = 0.018\)因为gain(X1, Humidity)最大,所以选取 Humidity 属性对样本集X1进行划分,Humidity 的取值将样本集划分成两个子集,各个子集中的样本均已属于同一类别,分类完毕。
对样本集X2,由于所有样本均已属于同一类别,分类完毕。
对样本集X3,计算其熵
\(entropy(X3)=-\frac{1}{8}log_2{\frac{1}{8}}-\frac{7}{8}log_2{\frac{7}{8}}=0.544\)分别计算Temperature、Humidity、Windy对于样本集X3划分的熵。
(1)计算
\(entropy(X3, Temperature)\)
\(=\frac{5}{8}(-0-\frac{5}{5}log_2{\frac{5}{5}})+\frac{2}{8}(-\frac{1}{2}log_2{\frac{1}{2}}-\frac{1}{2}log_2{\frac{1}{2}})+\frac{1}{8}(-0-\frac{1}{1}log_2{\frac{1}{1}})\)
\(= 0.250\)
\(gain(X3,Temperature) = entropy(X3) - entropy(X3, Temperature) = 0.294\)(2)计算
\(entropy(X3, Humidity)\)
\(=\frac{3}{8}(-0-\frac{3}{3}log_2{\frac{3}{3}})+\frac{5}{8}(-\frac{1}{5}log_2{\frac{1}{5}}-\frac{4}{5}log_2{\frac{4}{5}})\)
\(= 0.451\)
\(gain(X3,Humidity) = entropy(X3) - entropy(X3, Humidity) = 0.093\)(3)计算
\(entropy(X3, Windy)\)
\(=\frac{3}{8}(-\frac{1}{3}log_2{\frac{1}{3}}-\frac{2}{3}log_2{\frac{2}{3}})+\frac{3}{8}(-0-\frac{3}{3}log_2{\frac{3}{3}})+\frac{2}{8}(-0-\frac{2}{2}log_2{\frac{2}{2}})\)
\(= 0.344\)
\(gain(X3,Windy) = entropy(X3) - entropy(X3, Windy) = 0.200\)因为gain(X3, Temperature)最大,所以选取 Temperature 属性对样本集X3进行划分,根据 Temperature 的取值将样本集划分成三个子集:
X3_1:
属性 Humidity Windy 类 1 High Not No 2 High Medium No 3 Normal Not No 4 Normal Medium No 5 High Very No X3_2:
属性 Humidity Windy 类 1 Normal Not Yes 2 Normal Very No X3_3:
属性 Humidity Windy 类 1 Normal Medium No 对样本集X3_1和样本集X3_3,由于所有样本均已属于同一类别,分类完毕。
对样本集X3_2,选取Windy属性进行划分,Windy的取值将样本集划分成两个子集,各个子集中的样本均已属于同一类别,分类完毕。
C4.5算法
介绍
与ID3算法的不同点包括:
(1)分支指标采用增益比例,而不是ID3所使用的信息增益;
(2)按照数值属性值的大小对样本排序,从中选择一个分割点,划分数值属性的取值区间,从而将ID3的处理能力扩充到数值属性上来;
(3)将训练样本集中的位置属性值用最常用的值代替,或者用该属性的所有取值的平均值代替,从而处理缺少属性值的训练样本;
(4)使用K次迭代交叉验证,评估模型的优劣程度;
(5)根据生成的决策树,可以产生一个if-then规则的集合,每一个规则代表从根节点到叶节点的一条路径。
相关定义
-
训练样本关于属性值的信息量(熵)split_info(S,A):
\[split_{info}(S,A)=-\sum_{i=1}^{m}\frac{|S_i|}{|S|}log_2{\frac{|S_i|}{|S|}} \]其中,S_i 表示根据属性A划分的第i个样本子集,样本在A上的取值分布越均匀,split_info的值也就越大。split_info用来衡量属性分裂数据的广度和均匀性。
-
增益比例:属性A的增益比例:
\[gain_{ratio}(S,A)=\frac{gain(S,A)}{split_{info}(S,A)}=\frac{entropy(S)-entropy(S,A)}{split_{info}(S,A)} \]
步骤
【+】例:见ID3算法例
【-】解:
在ID3算法计算的基础上
(1)计算
\(split_{info}(X, Outlook)\)
\(=-\frac{9}{24}log_2{\frac{9}{24}}-\frac{7}{24}log_2{\frac{7}{24}}-\frac{8}{24}log_2{\frac{8}{24}}\)
\(= 1.577\)gain_ratio(X, Outlook) = (entropy(X) - entropy(X, Outlook)) / split_info(X, Outlook)) = 0.2835
(2)计算
\(split_{info}(X, Temperature)\)
\(=-\frac{8}{24}log_2{\frac{8}{24}}-\frac{11}{24}log_2{\frac{11}{24}}-\frac{5}{24}log_2{\frac{5}{24}}\)
\(= 1.516\)gain_ratio(X, Temperature) = (entropy(X) - entropy(X, Temperature)) / split_info(X, Temperature)) = 0.0547
(3)计算
\(split_{info}(X, Humidity)\)
\(=-\frac{12}{24}log_2{\frac{12}{24}}-\frac{12}{24}log_2{\frac{12}{24}}\)
\(= 1.0\)gain_ratio(X, Humidity) = (entropy(X) - entropy(X, Humidity)) / split_info(X, Humidity)) = 0.0817
(4)计算
\(split_{info}(X, Windy)\)
\(=-\frac{8}{24}log_2{\frac{8}{24}}-\frac{6}{24}log_2{\frac{6}{24}}-\frac{10}{24}log_2{\frac{10}{24}}\)
\(= 1.555\)gain_ratio(X, Windy) = (entropy(X) - entropy(X, Windy)) / split_info(X, Windy)) = 0
因为 gain_ratio(X, Outlook) 最大,所以选取Outlook属性对样本集进行划分,根据Outlook的取值将样本集划分为三个子集X1、X2、X3,操作与ID3算法相同。
X1:
计算其熵
\(entropy(X1)=-\frac{4}{9}log_2{\frac{4}{9}}-\frac{5}{9}log_2{\frac{5}{9}}=0.991\)(1)计算
\(split_{info}(X1, Temperature)\)
\(=-\frac{3}{9}log_2{\frac{3}{9}}-\frac{2}{9}log_2{\frac{2}{9}}-\frac{4}{9}log_2{\frac{4}{9}}\)
\(= 1.530\)gain_ratio(X1, Temperature) = (entropy(X1) - entropy(X1, Temperature)) / split_info(X1, Temperature)) = 0.357
(2)计算
\(split_{info}(X1, Humidity)\)
\(=-\frac{4}{9}log_2{\frac{4}{9}}-\frac{5}{9}log_2{\frac{5}{9}}\)
\(= 0.991\)gain_ratio(X1, Humidity) = (entropy(X1) - entropy(X1, Humidity)) / split_info(X1, Humidity)) = 1.0
(3)计算
\(split_{info}(X1, Windy)\)
\(=-\frac{3}{9}log_2{\frac{3}{9}}-\frac{2}{9}log_2{\frac{2}{9}}-\frac{4}{9}log_2{\frac{4}{9}}\)
\(= 1.530\)gain_ratio(X1, Windy) = (entropy(X1) - entropy(X1, Windy)) / split_info(X1, Windy)) = 0.012
因为 gain_ratio(X1, Humidity) 最大,所以选取 Humidity 属性对样本集进行划分,根据 Humidity 的取值将样本集划分为两个子集,各个子集中的样本均已属于同一类别,分类完毕。
X2:
由于所有样本均已属于同一类别,分类完毕。X3:
计算其熵
\(entropy(X3)=-\frac{1}{8}log_2{\frac{1}{8}}-\frac{7}{8}log_2{\frac{7}{8}}=0.544\)(1)计算
\(split_{info}(X3, Temperature)\)
\(=-\frac{1}{8}log_2{\frac{1}{8}}-\frac{2}{8}log_2{\frac{2}{8}}-\frac{5}{8}log_2{\frac{5}{8}}\)
\(= 1.299\)gain_ratio(X3, Temperature) = (entropy(X3) - entropy(X3, Temperature)) / split_info(X3, Temperature)) = 0.226
(2)计算
\(split_{info}(X3, Humidity)\)
\(=-\frac{3}{8}log_2{\frac{3}{8}}-\frac{5}{8}log_2{\frac{5}{8}}\)
\(= 0.954\)gain_ratio(X3, Humidity) = (entropy(X3) - entropy(X3, Humidity)) / split_info(X3, Humidity)) = 0.097
(3)计算
\(split_{info}(X3, Windy)\)
\(=-\frac{3}{8}log_2{\frac{3}{8}}-\frac{2}{8}log_2{\frac{2}{8}}-\frac{3}{8}log_2{\frac{3}{8}}\)
\(= 1.561\)gain_ratio(X3, Windy) = (entropy(X3) - entropy(X3, Windy)) / split_info(X3, Windy)) = 0.128
因为 gain_ratio(X3, Temperature) 最大,所以选取 Temperature 属性对样本集进行划分,根据 Temperature 的取值将样本集划分为三个子集,与ID3算法中操作相同。
对样本集X3_1和样本集X3_3,由于所有样本均已属于同一类别,分类完毕。
对样本集X3_2,选取 Windy 属性进行划分,Windy 的取值将样本集划分成两个子集,各个子集中的样本均已属于同一类别,分类完毕。
特点
优点
- 产生的分类规则易于理解,准确率较高。
缺点
- 在构造树的过程中,需要对数据集进行多次的顺序扫描和排序,因而导致算法的低效。
CART算法
介绍
以基尼指数最小的属性做为当前节点的划分属性。
相关定义
-
基尼值:对于任意给定的一个m分类问题,假设样本点属于第k类的概率为p_k,则关于这个概率分布p的基尼指数定义为:
\[Gini(p)=\sum_{k=1}^{m}p_k(1-p_k)=1-\sum_{k=1}^{m}p_k^2 \] -
基尼指数:
\[Gini_{index}(D,f)=\sum_{v=1}^{V}\frac{|D^v|}{|D|}Gini(D^v) \]
步骤
【+】例:对于表给出的豌豆数据集:
编号 | 形状 | 颜色 | 大小 | 土壤 | 水份 | 日照 | 发芽 |
---|---|---|---|---|---|---|---|
1 | 圆形 | 灰色 | 饱满 | 酸性 | 多 | 12小时以上 | 否 |
2 | 圆形 | 白色 | 缢缩 | 碱性 | 少 | 12小时以上 | 是 |
3 | 皱形 | 白色 | 饱满 | 碱性 | 多 | 12小时以上 | 否 |
4 | 皱形 | 灰色 | 饱满 | 酸性 | 多 | 12小时以下 | 是 |
5 | 圆形 | 白色 | 缢缩 | 碱性 | 少 | 12小时以下 | 是 |
6 | 皱形 | 灰色 | 缢缩 | 酸性 | 少 | 12小时以上 | 是 |
7 | 圆形 | 白色 | 饱满 | 酸性 | 少 | 12小时以下 | 是 |
8 | 皱形 | 灰色 | 缢缩 | 碱性 | 多 | 12小时以下 | 否 |
9 | 圆形 | 灰色 | 缢缩 | 碱性 | 少 | 12小时以上 | 否 |
测试1 | 圆形 | 白色 | 饱满 | 碱性 | 多 | 12小时以下 | ? |
以大小作为划分属性把集合划分:D(饱满)和D(溢缩)
分别计算这两个子集的基尼指数:
Gini(D(饱满)) = 1 − [(2/4)^2 + (2/4)^2] = 0.5
Gini(D(溢缩)) = 1 − [(3/5)^2 + (2/5)^2] = 0.48
由此可得在大小属性条件下D的基尼指数为:Gini(D,大小) = 4/9 Gini(D(饱满)) + 5/9 Gini(D(溢缩)) = 0.489
同理可得:
Gini(D,形状)=0.489
Gini(D,颜色)=0.433
Gini(D,土壤)=0.433
Gini(D,水份)=0.344
Gini(D,日照)=0.433
水份属性的基尼指数最小,将水份作为第一个划分属性,将集合D划分为D(多)和D(少),分别对样本集合D(多)和D(少)递归调用以上步骤,最后可得完整决策树。
--
【+】例:使用CART决策树算法对两个未知类型的样本进行分类。
Ca+浓度 | Mg+浓度 | Na+浓度 | Cl-浓度 | 类型 |
---|---|---|---|---|
低 | 高 | 高 | 高 | 冰川水 |
高 | 低 | 高 | 高 | 冰川水 |
低 | 高 | 低 | 低 | 冰川水 |
高 | 高 | 低 | 低 | 冰川水 |
低 | 低 | 低 | 低 | 湖泊水 |
高 | 低 | 低 | 低 | 湖泊水 |
低 | 高 | 高 | 低 | 湖泊水 |
高 | 低 | 高 | 低 | 湖泊水 |
低 | 高 | 高 | 低 | ?湖泊水 |
高 | 高 | 低 | 高 | ?冰川水 |
【-】解:
对样本集S,计算其在各个属性划分上的基尼指数:
1)Gini(S, Ca+浓度)=4/8[1-(2/4)^2-(2/4)^2] + 4/8[1-(2/4)^2-(2/4)^2] = 0.5
2)Gini(S, Mg+浓度)=4/8[1-(3/4)^2-(1/4)^2] + 4/8[1-(1/4)^2-(3/4)^2] = 0.375
3)Gini(S, Na+浓度)=4/8[1-(2/4)^2-(2/4)^2] + 4/8[1-(2/4)^2-(2/4)^2] = 0.5
4)Gini(S, Cl-浓度)=6/8[1-(2/6)^2-(4/6)^2] + 2/8[1-(2/2)^2] = 0.333Cl-属性的基尼指数最小,将Cl-属性作为第一个划分属性,将集合S划分为以下两个子集:
S1(高):
Ca+浓度 Mg+浓度 Na+浓度 类型 低 高 高 冰川水 高 低 高 冰川水 S2(低):
Ca+浓度 Mg+浓度 Na+浓度 类型 低 高 低 冰川水 高 高 低 冰川水 低 低 低 湖泊水 高 低 低 湖泊水 低 高 高 湖泊水 高 低 高 湖泊水 对样本集S1,所有样本均属于同一类型:冰川水。
对样本集S2,计算其在各个属性划分上的基尼指数:
1)Gini(S2, Ca+浓度)=3/6[1-(1/3)^2-(2/3)^2] + 3/6[1-(1/3)^2-(2/3)^2] = 0.444
2)Gini(S2, Mg+浓度)=3/6[1-(3/3)^2] + 3/6[1-(3/3)^2] =0.222
3)Gini(S2, Na+浓度)=4/6[1-(2/4)^2-(2/4)^2] + 2/6[1-(2/2)^2] =0.333
可以看出Gini(S2, Mg+浓度)最小,所以应该选择 Mg+浓度属性作为测试属性。Mg+浓度属性将样本集划分为两个子集:
S21:
Ca+浓度 Na+浓度 类型 低 低 冰川水 高 低 冰川水 低 高 湖泊水 S22:
Ca+浓度 Na+浓度 类型 低 低 湖泊水 高 低 湖泊水 高 高 湖泊水 对样本集S21,计算其在各个属性划分上的基尼指数:
1)Gini(S21, Ca+浓度)=2/3[1-(1/2)^2-(1/2)^2] + 1/3[1-(1/1)^2] = 0.333
2)Gini(S21, Na+浓度)=2/3[1-(2/2)^2] + 1/3[1-(1/1)^2] = 0
可以看出Gini(S21, Na+浓度)最小,所以应该选择 Na+浓度属性作为测试属性。
Na+浓度属性将样本集划分为两个子集, 并且各个子集中的样本都属于同一个类型。对样本集S22,所有样本均属于同一类型湖泊水。
决策树构造完毕,如下图所示。
由上面决策树得,第一个待识别样本类型为湖泊水;第二个待识别样本类型为冰川水。
4. 聚类算法
4.1 K-means聚类算法
介绍
K-means聚类算法由 J.B.MacQueen 在1967年提出,是最为经典也是使用最为广泛的一种基于划分的聚类算法,它属于基于距离的聚类算法。
K-means聚类算法的最终目标就是根据输入参数k(这里的k表示需要将数据对象聚成几簇),把数据对象分成k个簇。
K-means聚类算法的基本思想:首先指定需要划分的簇的个数k值;然后随机地选择k个初始数据对象点作为初始的聚类中心;第三,计算其余的各个数据对象到这k个初始聚类中心的距离(这里一般采用距离作为相似性度量),把数据对象划归到距离它最近的那个中心所处在的簇类中;最后,调整新类并且重新计算出新类的中心。如果两次计算出来的聚类中心未曾发生任何的变化,那么就可以说明数据对象的调整己经结束,也就是说聚类采用的准则函数(这里采用的是误差平方和的准则函数)是收敛的,表示算法结束。
流程描述
输入:初始数据集DATA和簇的数目k
输出:k个簇,满足平方误差准则函数收敛
(1)任意选择k个数据对象作为初始聚类中心
(2)计算各个数据到所选出来的各个中心的距离,将数据对象指派到最近的簇中。然后计算每个簇的均值
(3)根据簇中对象的平均值,将每个对象赋给最类似的簇
(4)更新簇的平均值,即计算每个对象簇中对象的平均值
(5)计算聚类准则函数E
(6)直到准则函数E值不再进行变化
步骤
【+】例:数据集如下表:
A1 | A2 | A3 | B1 | B2 | B3 | B4 | C1 | C2 | C3 | |
---|---|---|---|---|---|---|---|---|---|---|
x | 1 | 9 | 7 | 5 | 9 | 6 | 2 | 7 | 2 | 8 |
y | 2 | 5 | 9 | 8 | 2 | 9 | 4 | 7 | 1 | 3 |
以A1、B1、C1为初始簇中心,利用曼哈顿距离的K-means算法计算:最后的三个簇中心,以及各簇包含的对象。(要有计算步骤)
【-】解:
(1)第一次分类排序:
M1:A1(1,2) M2:B1(5,8) M3:C1(7,7)
A1 A2 A3 B1 B2 B3 B4 C1 C2 C3 x 1 9 7 5 9 6 2 7 2 8 y 2 5 9 8 2 9 4 7 1 3 到M1距离 0 11 13 10 8 12 3 11 2 8 到M2距离 10 7 3 0 10 2 7 3 10 8 到M3距离 11 4 2 3 7 3 8 0 11 5 归属 M1 M3 M3 M2 M3 M2 M1 M3 M1 M3 分类及中心:
M1’ (A1,B4,C2)= (1.67,2.33)
M2’ (B1,B3)= (5.5,8.5)
M3’ (A2,A3,B2,C1,C3)= (8,5.2)(2)第二次分类排序:
A1 A2 A3 B1 B2 B3 B4 C1 C2 C3 x 1 9 7 5 9 6 2 7 2 8 y 2 5 9 8 2 9 4 7 1 3 到M1’距离 1 10 12 9 7.66 11 2 10 1.66 7 到M2’距离 11 7 2 1 10 1 8 3 11 8 到M3’距离 10..2 1.2 4.8 5.8 4.2 5.8 7.2 2.8 10.2 2.2 归属 M1 M3 M2 M2 M3 M2 M1 M3 M1 M3 分类及中心:
M1’’(A1,B4,C2)=(1.67,2.33)
M2’’(A3,B1,B3)=(6,8.67)
M3’’(A2,B2,C1,C3)=(8.25,4.25)(3)第三次分类排序:
A1 A2 A3 B1 B2 B3 B4 C1 C2 C3 x 1 9 7 5 9 6 2 7 2 8 y 2 5 9 8 2 9 4 7 1 3 到M1’’距离 1 10 12 9 7.66 11 2 10 1.66 7 到M2’’距离 11.67 6.67 1.33 1.67 9.67 0.33 8.67 2.67 11.67 7.67 到M3’’距离 9.5 1.5 6 7 3 7 6.5 4 9.5 1.5 归属 M1 M3 M2 M2 M3 M2 M1 M2 M1 M3 分类及中心:
M1’’’(A1,B4,C2)=(1.67,2.33)
M2’’’(A3,B1,B3,C1)=(6.25,8.25)
M3’’’(A2,B2,C3)=(8.67,3.33)(4)第四次分类排序:
A1 A2 A3 B1 B2 B3 B4 C1 C2 C3 x 1 9 7 5 9 6 2 7 2 8 y 2 5 9 8 2 9 4 7 1 3 到M1’’’距离 1 10 12 9 7.66 11 2 10 1.66 7 到M2’’’距离 11.5 6 1.5 1.5 9 1 8.5 2 11.5 7 到M3’’’距离 9 2 7.34 8.34 1.66 8.34 7.34 5.34 9 1 归属 M1 M3 M2 M2 M3 M2 M1 M2 M1 M3 分类及中心:
M1'(A1,B4,C2)=(1.67,2.33)
M2'(A3,B1,B3,C1)=(6.25,8.25)
M3'(A2,B2,C3)=(8.67,3.33)第三次与第四次结果相同,故最后的三个簇中心及包含对象分别为
M1'(1.67,2.33):A1,B4,C2;
M2'(6.25,8.25):A3,B1,B3,C1;
M3'(8.67,3.33):A2,B2,C3。
特点
优点
- K-means聚类算法是解决聚类问题的一种经典算法,算法简单、快速;
- 通常这个算法经常以局部最优结束;
- 算法尝试找出使平方误差函数值最小的k个划分。当簇是密集的、球状或团状的,而簇与簇之间区别明显时,它的聚类效果较好。
缺点
- K-means聚类算法只有在簇的平均值被定义的情况下才能使用,不适用于某些应用,如涉及有分类属性的数据不适用;
- 要求用户必须事先给出要生成的簇的数目k;
- 对初值敏感,对于不同的初始值,可能会导致不同的聚类结果;
- 不适合于发现非凸面形状的簇,或者大小差别很大的簇;
- 对于“噪声”和孤立点数据敏感,少量的该类数据能够对平均值产生极大影响。
4.2 K-中心点聚类算法
介绍
与K-means算法相比,K-中心点聚类算法在每个簇中选出一个实际的对象来代表该簇,其余的每个对象聚类到与其最相似的代表性对象所在的簇中,降低了离群点的敏感性。
K-中心点聚类算法的基本思想为:选用簇中位置最中心的对象,试图对n个对象给出k个划分,代表对象也被称为是中心点,其他对象则被称为非代表对象。最初随机选择k个对象作为中心点,该算法反复地用非代表对象来代替代表对象,试图找出更好的中心点,以改进聚类的质量;在每次迭代中,所有可能的对象对被分析,每个对中的一个对象是中心点,而另一个是非代表对象。每当重新分配发生时,平方误差所产生的差别对代价函数有影响。因此,如果一个当前的中心点对象被非中心点对象所代替,代价函数将计算平方误差值所产生的差别。替换的总代价是所有非中心点对象所产生的代价之和。如果总代价是负的,那么实际的平方误差将会减小,代表对象可以被非代表对象替代。如果总代价是正的,则当前的中心点被认为是可接受的,在本次迭代中没有变化。
一般情况下,数据对象为数值型,选用曼哈顿距离:
\(d(i,j)=|x_{i1}-x_{j1}|+|x_{i2}-x_{j2}|+......+|x_{in}-x_{jn}|\)
具体应用中应根据不同的数据类型选用不同的距离函数。
对于每一个非中心点对象,有以下四种情况需要考虑:
- 第一种情况:假设Oi被Oh代替作为新的中心点,Oj当前隶属于中心点对象Oi。如果Oj离某个中心点Om最近,i≠m,那么Oj被重新分配给Om,替换代价为:Cjih = d(j,m)-d(j,i)
- 第二种情况:假设Oi被Oh代替作为新的中心点,Oj当前隶属于中心点对象Oi。如果Oj离这个新的中心点Oh最近,那么Oj被分配给Oh,替换代价为:Cjih = d(j,h)-d(j,i)
- 第三种情况:假设Oi被Oh代替作为新的中心点,Oj当前隶属于中心点对象Om。如果Oj离某个中心点Om最近,i≠m,那么对象的隶属不发生变化,替换代价为:Cjih = 0
- 第四种情况:假设Oi被Oh代替作为新的中心点,Oj当前隶属于中心点对象Om。如果Oj离某个中心点Oh最近,那么Oj被分配给Oh,替换代价为:Cjih = d(j,h)-d(j,m)
流程描述
输入:簇的数目k和包含n个对象的数据库
输出:k个簇,使得所有对象与其最近中心点的相异度总和最小
(1)任意选择k个对象作为初始的簇中心点
(2)Repeat
(3)指派每个剩余对象给离它最近的中心点所表示的簇
(4)Repeat
(5)选择一个未被选择的中心点
(6)Repeat
(7)选择一个未被选择过的非中心点对象
(8)计算用 代替 的总代价并记录在S中
(9)Until 所有非中心点都被选择过
(10)Until 所有的中心点都被选择过
(11)If 在S中的所有非中心点代替所有中心点后的计算出总代价有小于0的存在,then找出S中的用非中心点替代中心点后代价最小的一个,并用该非中心点替代对应的中心点,形成一个新的k个中心点的集合
(12)Until 没有再发生簇的重新分配,即所有的S都大于0
步骤
【+】例:数据集如下表:
A | B | E | G | |
---|---|---|---|---|
x | 2 | 2 | 2 | 3 |
y | 1 | 3 | 5 | 7 |
以A、B为初始簇中心,利用曼哈顿距离的K-中心点算法计算第一次迭代后的簇中心和两个簇包含的对象。
【-】解:
计算距离:
A B E G A 0 2 4 7 B 2 0 2 5 E 4 2 0 3 G 7 5 3 0 以A、B为初始簇中心,划分:{A}和{B,E,G}
交换:
A—>E:
Caae = d(A,B) - d(A,A) = 2 - 0 = 2
Cbae = 0
Ceae = d(E,E) - d(E,B) = 0 - 2 = -2
Cgae = d(G,E) - d(G,B) = 3 - 5 = -2
TCae = Caae + Cbae + Ceae +Cgae = 2 + 0 - 2 - 2 = -2A—>G:
Caag = d(A,B) - d(A,A) = 2 - 0 = 2
Cbag = 0
Ceag = 0
Cgag = d(G,G) - d(G,B) = 0 - 5 = -5
TCag = Caag + Cbag + Ceag + Cgag = 2 + 0 + 0 - 5 = -3B—>E:
Cabe = 0
Cbbe = d(B,A) - d(B,B) = 2 - 0 = 2
Cebe = d(E,E) - d(E,B) = 0 - 2 = -2
Cgbe = d(G,E) - d(G,B) = 3 - 5 = -2
TCbe = Cabe + Cbbe + Cebe + Cgbe = 0 + 2 - 2 - 2 = -2B—>G:
Cabg = 0
Cbbg = d(B,A) - d(B,B) = 2 - 0 = 2
Cebg = d(E,G) - d(E,B) = 3 - 2 = 1
Cgbg = d(G,G) - d(G,B) = 0 - 5 = -5
TCbg = Cabg + Cbbg + Cebg + Cgbg = 0 + 2 + 1 - 5 = -2选取代价最小的,即 簇中心由 A 替换为 G ,这样第一次迭代后的簇中心为 B、G,包含对象划分为:{G},{B、A、E}。
特点
优点
- 对噪声点/孤立点不敏感,具有较强的数据鲁棒性;
- 聚类结果与数据对象点输入顺序无关;
- 聚类结果具有数据对象平移和正交变换的不变性等。
缺点
在于聚类过程的高耗时性。
对于大数据集,K-中心点聚类过程缓慢的主要原因在于:通过迭代来寻找最佳的聚类中心点集时,需要反复地在非中心点对象与中心点对象之间进行最近邻搜索,从而产生大量非必需的重复计算。
4.3 DBSCAN聚类算法
介绍
DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一个基于高密度连接区域的密度聚类算法,该算法将簇定义为密度相连的点的最大集,将具有高密度的区域划分为簇。
相关定义
DBSCAN将样本分为三类:
- 核心点:在半径Eps内含有超过MinPts数目的点。N(X_i)>=MinPts
- 边界点: 在半径Eps内点的数量小于MinPts,但是落在核心点的邻域内的点。N(X_i)<MinPts
- 噪声点:既不是核心点也不是边界点的点。
流程描述
步骤
【+】例:如下表所示的数据集,其在二维空间中的分布情况如图1所示,用户输入ε=1,MinPts=5,采用DBSCAN算法对表中数据进行聚类。
【-】解:
序号 属性1 属性2 序号 属性1 属性2 1 1 0 7 4 1 2 4 0 8 5 1 3 0 1 9 0 2 4 1 1 10 1 2 5 2 1 11 4 2 6 3 1 12 1 3 第一类:{1,3,4,5,10}
第二类:{2,6,7,8,11} .
--
【+】例:下面给出一个样本数据集,如表 1 所示,并对其实施 DBSCAN 算法进行聚类,取 Eps=3,MinPts=3。
数据集中的样本数据在二维空间内的表示如图所示。
【-】解:
第一步,顺序扫描数据集的样本点,首先取到 p1(1,2)。
1)计算 p1 的邻域,计算出每一点到 p1 的距离,如 d(p1,p2)=sqrt(1+1)=1.414。
2)根据每个样本点到 p1 的距离,计算出 p1 的 Eps 邻域为 {p1,p2,p3,p13}。
3)因为 p1 的 Eps 邻域含有 4 个点,大于 MinPts(3),所以,p1 为核心点。
4)以 p1 为核心点建立簇 C1,即找出所有从 p1 密度可达的点。
5)p1 邻域内的点都是 p1 直接密度可达的点,所以都属于C1。
6)寻找 p1 密度可达的点,p2 的邻域为 {p1,p2,p3,p4,p13},因为 p1 密度可达 p2,p2 密度可达 p4,所以 p1 密度可达 p4,因此 p4 也属于 C1。
7)p3 的邻域为 {p1,p2,p3,p4,p13},p13的邻域为 {p1,p2,p3,p4,p13},p3 和 p13 都是核心点,但是它们邻域的点都已经在 Cl 中。
8)P4 的邻域为 {p3,p4,p13},为核心点,其邻域内的所有点都已经被处理。
9)此时,以 p1 为核心点出发的那些密度可达的对象都全部处理完毕,得到簇C1,包含点 {p1,p2,p3,p13,p4}。第二步,继续顺序扫描数据集的样本点,取到p5(5,8)。
1)计算 p5 的邻域,计算出每一点到 p5 的距离,如 d(p1,p8)-sqrt(4+1)=2.236。
2)根据每个样本点到 p5 的距离,计算出p5的Eps邻域为{p5,p6,p7,p8}。
3)因为 p5 的 Eps 邻域含有 4 个点,大于 MinPts(3),所以,p5 为核心点。
4)以 p5 为核心点建立簇 C2,即找出所有从 p5 密度可达的点,可以获得簇 C2,包含点 {p5,p6,p7,p8}。第三步,继续顺序扫描数据集的样本点,取到 p9(9,5)。
1)计算出 p9 的 Eps 邻域为 {p9},个数小于 MinPts(3),所以 p9 不是核心点。
2)对 p9 处理结束。第四步,继续顺序扫描数据集的样本点,取到 p10(1,12)。
1)计算出 p10 的 Eps 邻域为 {p10,pll},个数小于 MinPts(3),所以 p10 不是核心点。
2)对 p10 处理结束。第五步,继续顺序扫描数据集的样本点,取到 p11(3,12)。
1)计算出 p11 的 Eps 邻域为 {p11,p10,p12},个数等于 MinPts(3),所以 p11 是核心点。
2)从 p12 的邻域为 {p12,p11},不是核心点。
3)以 p11 为核心点建立簇 C3,包含点 {p11,p10,p12}。第六步,继续扫描数据的样本点,p12、p13 都已经被处理过,算法结束。
特点
优点
- 无需预设聚类数 K ,可以划分具有复杂形状的簇,还可以找出不属于任何簇的点;
- 可以对任意形状的稠密数据集进行聚类,相对的,K-Means之类的聚类算法一般只适用于凸数据集;
- 可以在聚类的同时发现异常点,对数据集中的异常点不敏感。
缺点
- 当空间聚类的密度不均匀、聚类间距差相差很大时,聚类质量较差,因为这种情况下参数MinPts和Eps选取困难;
- 对于边界样本的处理不明确。在两个聚类交界边缘的点会视乎它在数据库的次序决定加入哪个聚类;
- 计算效率偏低。当数据量增大时,对内存消耗也较大;
- 维度灾难。
本文来自博客园,作者:0dot7,转载请注明原文链接:https://www.cnblogs.com/0dot7/p/16862584.html
文章如有错误,欢迎各位师傅指正!!!
免责声明请勿利用文章内的相关技术从事非法测试,由于传播、利用文章所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任,一旦造成后果请自行承担!