面试题:手写Kmeans

Kmeans聚类:将相似对象归入同一类,将不相似对象归到不同类。

Kmeans的基本流程:

面试题:手写Kmeans_第1张图片

 

Kmeans的优点:容易首先

缺点:可能收敛到局部最小值,在大规模数据集上收敛较慢。

 

实现:

# --*--coding:utf-8 --*--
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

def distance(vec1,vec2):
    return np.sqrt(np.sum(np.square(vec1-vec2)))

def kmeans(data,k):
    '''

    :param data: dataframe:需要聚类的数组
    :param k: 聚类目标数
    :return:
    '''
    # 初始化质心
    K=np.random.uniform(0,10,(k,data.shape[1]))
    print("初始化质心:{}".format(k))
    #创建一个数组用来存储聚类结果
    ret=np.zeros((data.shape[0],2))
    flag=True
    while flag:
        flag=False
        for i in range(data.shape[0]):
            print("数据的每一行:{}".format(data[i]))
            minDist=np.inf
            minIndex=-1
            print(K.shape[1])
            for j in range(K.shape[0]):
                print("第{}个质心点{}".format(j,K[j]))
                #计算数据中的每个点到聚类中心的距离
                ds=distance(data[i],K[j])
                print("距离:{}".format(ds))
                if ds

面试题:手写Kmeans_第2张图片

你可能感兴趣的:(面经)