机器学习知识点相关总结(七)——k-means相关

机器学习知识点相关总结(一)——基础

机器学习知识点相关总结(二)——决策树相关

机器学习知识点相关总结(三)——LR相关

机器学习知识点相关总结(四)——SVM相关

机器学习知识点相关总结(五)——CNN相关

机器学习知识点相关总结(六)——RNN,LSTM相关

机器学习知识点相关总结(七)——k-means相关

​​​​​​1.如何定义K-Means聚类算法中K的值?

原理:kmeans算法通过预先设定的k值以及初始质心对相似的数据点进行划分,划分后根据一个类簇内所有点重新计算中心点,再迭代进行分配和更新簇中心点的步骤,直至簇的中心点变化很小,或者达到给定的迭代次数。

选择k值:根据经验,

手肘法:随着聚类数k的增大,样本会被划分的更加精细,每个簇的聚合程度会逐渐提高,误差平方和SSE会逐渐变小。给定一个合适的类簇指标,比如平均半径或直径,当k小于真实聚类数时,由于k的增大会大幅增加每个簇的聚合程度,故SSE的下降幅度会很大,而当k到达真实聚类数时,再增加k所得到的聚合程度回报会迅速变小,所以SSE的下降幅度会骤减,然后随着k值的继续增大而趋于平缓,也就是说SSE和k的关系图是一个手肘的形状,而这个肘部对应的k值就是数据的真实聚类数。

轮廓系数法:求出所有样本的轮廓系数后再求平均值就得到了平均轮廓系数。平均轮廓系数的取值范围为[-1,1],且簇内样本的距离越近,簇间样本距离越远,平均轮廓系数越大,聚类效果越好。那么,很自然地,平均轮廓系数最大的k便是最佳聚类数。

 

Kmeans算法对数据集要求:

数值型数据

不能计算缺失值,数据有缺失必须进行缺失值替换

运行效率不高,对于大数据集处理效率比较慢

对维度敏感,一般在算法运行前进行特征选择或者主成分分析。

 

2.列举至少3中定义K-Means聚类算法中K的方法。

手肘法,轮廓系数法,经验法,kalinski-harabasz方法

 

3.除此之外你还知道哪些聚类算法?

原型聚类:kmeans

密度聚类:DBSCAN

层次聚类:自上而下,自下而上(时间复杂度高)

基于模型、网络

 

4.介绍一下DBSCAN算法。

从样本密度的角度来考察样本之间的可连接性,并基于可连接样本不断扩展聚类簇以获得最终的聚类结果。先任选数据集中一个核心对象为种子,再由此出发确定相应的聚类簇。

从任一对象p开始,寻找并合并核心p对象直接密度可达的对象;如果p是一个核心点,则找到了一个聚类,如果是一个边界点,则找寻下一个对象点。直到所有点都被处理。

需要输入半径和领域内最少点数。

 

5.简述下分层凝聚聚类(Hierarchical Agglomerative clustering)的工作原理。

首先把每一个样本点当做一个聚类,然后不断重复将其中距离最近的两个聚类进行合并。直到满足迭代终止条件。

 

6.解释一下主成分分析算法(PCA),简述下使用PCA算法的数学步骤。

PCA是一种数据降维算法,主要思想是将n维特征映射到k维上,这k维是全新的正交特征也就是主成分,是在原有n维特征的基础上重新构造出来的k维特征。

过程就是首先选择第一个坐标轴为原始数据中方差最大的方向,第二个为与第一个坐标轴正交的平面中方差最大的方向;第三个是与前两个正交中方差最大的方向,以此类推得到n个这样的坐标轴。发现大部分方差都包含在前k个坐标轴中,后面的坐标轴所含的方差基本为0。相当于只保留包含绝大部分方差的维度特征,实现对数据特征的降维处理。

数学步骤:基于特征值分解协方差矩阵实现PCA

去平均值;计算协方差矩阵;用特征值分解的方式求协方差矩阵的特征值与特征向量;对特征值从大到小排序,选择其中最大的k个,然后将其对应的k个特征向量分别作为行向量组成特征向量矩阵P;将数据转换到k个特征向量构建成的新空间中。

 

 

7.使用 PCA算法有哪些缺点?

主成分其解释含义往往具有一定的模糊性。

贡献率较小的成分往往可能含有对样本差异的重要信息。

特征值矩阵的正交向量空间是否唯一有待讨论。

无监督学习。

 

8.kmeans代码实现

import numpy as np

 

def loadDataSet(filename):

           data = np.loadtxt(filename, delimiter = '\t')

           return data

 

def distEclud(x, y):

           return np.sqrt(np.sum((x-y)**2))

 

def randCent(dataSet, k):

           m, n = dataSet.shape

           centoids = np.zeros((k, n))

           for i in range(k):

                     index = int(np.random.uniform(0, m))

                     centoids[i,:] = dataSet[index, :]

           return centoids

 

def KMeans(dataSet, k):

           m = np.shape(dataSet)[0] #numbers of row

           #第一列存储属于哪一簇,第二列存储到中心点的误差

           clusterAssment = np.mat(np.zeros((m, 2)))

           clusterChange = True

 

           #第一步:初始化中心点

           centoids = randCent(dataSet, k)

           while clusterChange:

                     clusterChange = False

 

                     #遍历所有样本(行数)

                     for i in range(m):

                                minDist = 100000.0

                                minIndex = -1

 

                                #第二步:遍历所有的质心,找出最近的质心

                                for j in range(k):

                                          distance = distEclud(centoids[j, :], dataSet[i,:])

                                          if distance < minDist:

                                                     minDist = distance

                                                     minIndex = j

 

                                #第三步:更新每一行样本所属的簇

                                if clusterAssment[i, 0] != minIndex:

                                          clusterChange = True

                                          clusterAssment[i, :] = minIndex, minDist**2

 

                     #第四步:更新质心

                     for j in range(k):

                                pointsInCluster = dataSet[np.nonzero(clusterAssment[:,0].A == j)[0]]

                                centoids[j,:] = np.mean(pointsInCluster, axis = 0)

 

           return centoids, clusterAssment

 

9.DBSCAN半径的确定:

K距离曲线

绘制所有点计算其对应的第k个最近邻域距离,所有点的k距离将序排列,第一个谷值点对应的选为k,一般取k=4.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值