机器学习之聚类分析

聚类

监督学习:线性回归 逻辑回归 KNN(这里引入KNN是为了与Kmeans进行区分)

非监督学习:聚类 (Kmeans Mean-shit)

无监督学习(unsupervised learning)

无监督学习:机器学习的一种方法,没有给定事先标记过的训练实例,自动对输入的数据进行分类或分群

优点:

  • 算法不受监督信息(偏见)的约束,可能考虑到新的信息
  • 不需要标签,极大程度扩大数据样本

主要应用: 聚类分析、关联规则、维度缩减

聚类分析(clustering):聚类分析又称为群分析,根据对象某些属性的相似度,将其自动划分为不同的类别。

KMeans聚类

KMeans Analysis: 以空间中k个点为中心进行聚类,对最靠近他们的对象归类,是聚类算法中最为基础但也最为重要的算法。

过程:

  • 根据数据与中心点距离划分类别
  • 基于类别数据更新中心点
  • 重复过程直到收敛

公式
机器学习之聚类分析_第1张图片

算法流程:

  • 选取聚类个数k
  • 确定聚类中心
  • 根据点到聚类中心聚类确定各个点所属类别
  • 根据各个类别数据数据更新聚类中心
  • 重复以上步骤直到收敛(中心点不再变化)

代码实现

# 模型训练
from sklearn.cluster import KMeans
KM = KMeans(n_cluster = 3, random_state = 0)
KM.fit(X)

#获取模型确定的中心点
centers = KM.cluster_centers_

#准确率计算
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y,y_predict)

#预测结果矫正
y_cal = []
for i in y_predict:
    if i == 0:
        y_cal.append(2)
    elif i == 1:
        y_cal.append(1)
    else:
        y_cal.append(0)
    print(y_predict,y_cal)

特点:

  • 优:原理简单,实现容易,收敛速度快
  • 优:参数少,方便使用(需要指定类别数量
  • 缺:必须设置簇的的数量
  • 缺:随机选择初始聚类中心,结果可能缺乏一致性

K近邻分类模型(KNN)

KNN:给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例(也就是K个邻居),这k个实例的多数属于某个类,就把该输入实例分类到这个类中。是最简单的机器学习算法之一。

代码实现

#模型训练
from sklearn.neighbors import KNeighborsClassifier
KNN = KNeighborsClassifier(n_neighbors = 3)
KNN.fit(X,y)

均值漂移聚类(Meanshift)

Meanshift: 一种基于密度梯度上升的聚类算法(沿着密度上升方向寻找聚类中心点)

过程:

  • 随机均匀的选取样本点
  • 在中心点一定区域检索数据点
  • 更新数据中心
  • 重复流程到中心点稳定

公式:
机器学习之聚类分析_第2张图片

算法流程:

  • 随机选择未分类点作为中心点
  • 找出离中心点距离在带宽之内的点,记作集合S
  • 计算从中心点到集合S中每个元素的偏移向量M
  • 中心点以向量M移动
  • 重复步骤2-4,直到收敛
  • 重复1-5直到所有的点都被归类
  • 分类:根据每个类,对每个点的访问频率,取访问频率最大的那个类,作为当前点集的所属类

代码实现

# 自动计算带宽(区域半径)
from sklearn.cluster import
MeanShift,estimate_bandwidth
#detect bandwidth
bandwidth = estimate_bandwidth(X,n_samples=500)

# 模型建立与训练
ms = MeanShift(bandwidth = bandwidth)
ms.fit(X)

特点:

  • 自动发现类别数量,不需要人工选择
  • 需要选择区域半径

DBSCAN算法(基于密度的空间聚类算法)

过程

  • 基于区域点密度筛选有效数据
  • 基于有效数据向周围扩张,直到没有新点加入

特点

  • 过滤噪声数据
  • 不需要认为选择类别数量
  • 数据密度不同时影响结果

你可能感兴趣的:(machineLearning,机器学习,python,深度学习,聚类,算法)