聚类算法:K-Means和DBSCAN

        聚类是一个将数据对象集划分为多个组或簇的过程,使得簇内的数据对象具有很高的相似性,但不同簇间的对象具有很高的相异性。

        K-Means等基于划分的方法是简单、常用的一种聚类方法,是基于距离的,它的基本思想是使簇内的点距离尽量近、簇间的点距离尽量远。基于划分聚类的方法在聚类过程中根据距离来划分类簇,因此只能够用于挖掘球状簇。

        DBSCAN等基于密度的聚类算法是根据密度而不是距离来计算样本相似度,所以基于密度的聚类算法能够用于挖掘任意形状的簇,并且能够有效过滤掉噪声样本对于聚类结果的影响。

聚类算法的实现与应用

1.1 K-Means算法实现

样本点分簇函数:实现了一个函数assignment,用于计算数据点到各个质心的距离,并根据距离最短原则分配到最近的质心。

簇心更新函数:实现了一个函数update,用于根据分配给质心的数据点更新质心的位置。

聚类demo与可视化:通过一个小数据集演示了K-Means算法的执行过程,并使用matplotlib库进行了结果的可视化。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from sklearn.cluster import KMeans
from sklearn import datasets
import pandas as pd
import copy

def assignment(df, centroids):
    for i in centroids.keys():
        # sqrt((x1 - x2)^2 + (y1 - y2)^2)
        df['distance_from_{}'.format(i)] = ((df['x'] - centroids[i][0])**2 + (df['y'] - centroids[i][1])**2)**0.5
    centroid_distance_cols = ['distance_from_{}'.format(i) for i in centroids.keys()]
    df['closest'] = df.loc[:, centroid_distance_cols].idxmin(axis=1)
    df['closest'] = df['closest'].map(lambda x: int(x.lstrip('distance_from_')))
    df['color'] = df['closest'].map(lambda x: colmap[x])
    return df

def update(centroids):
    for i in centroids.keys():
        centroids[i][0] = np.mean(df[df['closest']==i]['x'])
        centroids[i][1] = np.mean(df[df['closest']==i]['y'])
    return centroids

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值