
聚类算法:一种无监督学习算法 - 没有标签根据样本特征之间的相似性, 将样本划分到不同的类别中, 不同相似度计算方法, 会得到不同的聚类结果, 常用的相似度计算方法有欧氏距离法聚类算法的目的是在没有先验知识的情况下, 自动发现数据集中的内在结构和模式相似度度量:原理: 距离越近, 相似度越高; 越远- 越低注意: 不同相似度计算方法会导致不同的聚类结果使用不同的聚类准则, 产生的聚类结果也不同聚类分类:不同的聚类方法对颗粒度的控制程度不同根据实现方法进行分类:K-means: 按照质心分类,主要介绍K-means, 通用, 普遍层次聚类: 对数据进行逐层划分, 直到达到聚类的类别个数DBSCAN聚类是一种基于密度的聚类算法谱聚类是一种基于图论的聚类算法聚类算法API:sklearn.cluster.KMeans(n_clusters8)参数: n_clusters: 开始的聚类中心数量整形,缺省值8(默认), 生成的聚类数, 即产生的质心数方法estimator.fit(x)estimator.predict(x)estimator.fit_predict(x)计算聚类中心并预测每个样本属于哪个类别, 相当于先调用fit(x), 然后再调用predict(x)calinski_harabasz_sorce(x, y_pred) - 用来评估聚类效果, 数值越大越好使用KMeans模型数据探索聚类:1 导包sklearn.clusters.KMeanssklearn.datasets.make_blobs2 创建数据集3 实例化Kmeans模型并预测4 展示聚类结果5 评估聚类效果好坏Kmeans实现流程:算法步骤:1, 初始化从数据集中随机选择K个点样本作为初始簇质心 ( 这一步对最终结果有重大影响, 是算法随机性的主要来源)2,分配数据点到簇对于数据集中的每一个数据点, 计算其到当前所有K个质心的距离(通常用欧氏距离), 根据最近邻原则, 将该点分配到距离最近的质心所对应的簇中 (所有数据点都被分配到一个且仅一个簇中)3,重新计算质心对于上一步形成的每一个簇, 计算所有数据点各维度的算术平均值, 这个平均值向量即为该簇新的质心4, 迭代与收敛判断比较新计算的质心与上一轮的质心如果所有质心的移动距离都小于一个预设的阈值, 或者达到了预设的最大迭代次数, 则算法终止, 输出当前的簇划分结果否则, 使用新的质心集合, 跳转第二部, 开始新一轮的分配-更新 循环K-Means 特点:一定会收敛对初始中心点敏感适合球形簇, 对噪声和异常值敏感Sklearn API 使用:from sklearn.cluster import KMeans # 1. 实例化模型 # n_clusters: 聚类个数 (K值)默认8 model KMeans(n_clusters5, random_state22) # 2. 训练并预测 # fit_predict: 等价于先 fit() 再 predict()返回每个样本的类别标签 (0, 1, 2...) y_pred model.fit_predict(X) # 3. 获取聚类中心 centers model.cluster_centers_ # 4. 获取 SSE (惯性) sse model.inertia_模型评估方法:误差平方和SSE(Sum of Squared Errors)SSE:总误差平方和 (簇内平方和)表示簇k表示聚类中心的个数p表示某个簇内的样本m表示质心点SSE越小, 表示数据点越接近他们各自的中心, 聚类效果越好此时k越多, 聚类越多, 从而每个数据点能找到更近的聚类中心(k太大, 容易过拟合)肘方法-K值确定肘方法通过SSE确定n_clusters的值随着K增加, SSE下降趋缓的拐点为最佳K值SC轮廓系数法:轮廓系数法考虑簇内的内聚程度, 簇外的分离程度对计算每一个样本i到同簇内其他样本的平均距离ai, 该值越小, 说明簇内的相似程度越大计算每一个样本i到最近簇j内的所有样本的平均距离bi j, 该值越大, 说明该样本越不属于其他簇j数字定义:ai : 样本i到同簇其他点的平均距离 (越小越好, 代表簇内紧密)bi : 样本i到其他簇所有点的平均距离 (越大越好, 代表与其他簇分得开)取值范围: [-1, 1]最佳K值: SC系数取最大值时的K通常认为:0.7 : 强聚类结构0.5~0.7 : 合理聚类0.25 : 可能没有明显簇结构CH指数(Calinski-Harabasz Index)CH指数考虑每个簇内的内聚程度, 每个簇之间的离散程度宗旨:类内离散度要小: 同一个簇内的数据点应该尽可能的相似 (彼此接近) Wk类间离散度要大: 不同簇之间的数据点应该尽可能的不同 (相互远离) Bk类内离散度:衡量所有簇内部数据的紧凑程度他是每个簇内所有点到其簇中心距离平方的总和2Wk 越小, 说明簇内点越紧密类间离散度:衡量不同簇之间的分离程度他是每个簇的簇中心到全局中心距离的平方, 按该簇大小加权后的总和2Bk 越大,说明簇中心彼此相距越远, 与全局中心差异越大对比:特性CH 指数 (Calinski-Harabasz)SC 系数 (Silhouette)SSE (肘部法)计算原理基于质心距离 (方差比)基于样本点到邻近簇的距离仅基于簇内误差平方和取值范围[0, ∞) (无上限)[-1, 1][0, ∞)优劣判断越大越好越大越好越小越好 (需找拐点)计算速度极快 O(n * d)较慢 O(n2) (需算两两距离)快适用场景大规模数据、K-Means 类算法中小规模数据、任意形状簇初步探索、配合肉眼观察缺点倾向于偏好凸形簇 (如球形)对非凸簇效果一般数据量大时计算耗时严重拐点有时不明显主观性强条件概率:定义: 在事件B已经发生的条件下, 事件A发生的概率, 记作P(A|B)公式:联合概率:定义: 多个时间同时发生的概率, 记作P(A|B)一般公式: P(AB) P(A)*P(B|A) P(B)*P(A|B)独立事件: 若A 和B 独立, 则P(AB)P(A)P(B)条件概率与联合概率示例P(程序员|喜欢) 2/4 0.5P(程序员且匀称) 3/7 *1/3 1/7P(程序员且超重|喜欢) 0.5*0.5 0.25 (在独立假设下)朴素贝叶斯朴素贝叶斯在贝叶斯的基础上增加: 特征条件独立假设, 即: 给定条件下, 特征之间是相互独立的基本定义:学习类型: 有监督学习, 主要用于分类问题核心思想: 基于贝叶斯定理与特征条件独立假设贝叶斯定理: 利用先验概率和似然度计算后验概率朴素含义: 假设所有特征之间是相互独立的(即一个特征的出现不影响其他特征)输出结果: 样本属于各个类别的概率, 最终选择概率最大的类别作为预测结果 (最大后验概率估计, MAP)核心公式:P(C|X): 后验概率, 在已知特征X的情况下, 样本属于类别C的概率P(C): 先验概率, 类别C在训练集中出现的概率P(X|C): 似然度, 在类别C已知的情况下, 特征X出现的概率P(X): 证据因子, 特征X出现的总概率,对于所以类别, 分母P(X)相同, 因此比较时可以忽略拉普拉斯平滑系数定义:为了避免概率值为0, 我们在分子和分母分别加上一个数值, 这就是拉普拉斯平滑系数的作用公式:作用:拉普拉斯平滑保证了每个特征-类别组合的概率都大于0, 使得模型更具应对异常数据和噪声的抵抗能力(避免了零概率)朴素贝叶斯APIsklearn.naive_bayes.MultinomialNB(alpha1.0)朴素贝叶斯分类alpha: 拉普拉斯平滑系数