k means聚类算法_K-Means 聚类算法 20210108

本文介绍了K-Means聚类算法的基本原理和应用,强调了其与分类的区别,指出K-Means算法简单易懂,运行效率高,但需要预先指定类别数量。同时,文中提到了K-Means的实现方式,包括调用库和自建代码,并提及了数据读取和可视化的重要性。
摘要由CSDN通过智能技术生成

说到聚类,应先理解聚类和分类的区别

聚类和分类最大的不同在于:分类的目标是事先已知的,而聚类则不一样,聚类事先不知道目标变量是什么,类别没有像分类那样被预先定义出来。

K-Means

聚类算法有很多种(几十种),K-Means是聚类算法中的最常用的一种,算法最大的特点是简单,好理解,运算速度快,但是只能应用于连续型的数据,并且一定要在聚类前需要手工指定要分成几类。

9b7c1113c876104a55114fecb5e4fcf1.png

K-means可以自己写也可以调用库来实现

调用库的实现方式为:

# 使用sklearn实现
from sklearn.cluster import KMeans      #导入kmeans库

model = KMeans(n_clusters=16, n_init=100, n_jobs=-1)   
model.fit(data)                         #用数据拟合分类器模型
centroids = model.cluster_centers_
C = model.predict(data)                 #输出输入数据的预测结果

自己构建的方式为:

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

def find_closest_centroids(X, centroids):
    m = X.shape[0]
    k = centroids.shape[0]
    idx = np.zeros(m)              # idx[i]为距离样本i最近的集聚中心的索引
    
    for i in range(m):
        min_dist = 1000000         #每计算完一个样本点后需要将最短距重新初始化  
        for j in range(k):
            dist = np.sum((X[i,:] - centroids[j,:]) ** 2)  #代价函数
            if dist < min_dist:
                min_dist = dist
                idx[i] = j
    return idx

def compute_centroids(X, idx, k):           #k为聚类中心个数
    m,n = X.shape                          
    centroids = np.zeros((k, n))            #聚类中心为(k,n)
    
    for i in range(k):
        indices = np.where(idx == i)        #为i簇的各样本点的索引
        centroids[i,:] = (np.sum(X[indices,:], axis=1) / len(indices[0])).ravel()  #len(indices[0])为样本点的数量,axis=1为按列相加    
    return centroid

def init_centroids(X, k):
    m, n = X.shape
    centroids = np.zeros((k, n))
    idx = np.random.randint(0, m, k)
    
    for i in range(k):
        centroids[i,:] = X[idx[i],:]  #随机选择训练示例作为聚类中心
    return centroids

def run_k_means(X, initial_centroids, max_iters):
    m, n = X.shape
    k = initial_centroids.shape[0]
    idx = np.zeros(m)
    centroids = initial_centroids
    
    for i in range(max_iters):
        idx = find_closest_centroids(X, centroids)
        centroids = compute_centroids(X, idx, k)

    return idx, centroids

主要分为以下几个模块:

b8d16d5eed18d4820c023669e02e2ffd.png

88fc9eb2126004fb5b52145109294649.png

afd60e1fadaa26996e46a6648999e9b8.png

bcf1bc39ea72429ea632446e2620ad17.png

需要加的模块就是,前面加上读取excel的模块,后面加上画图可视化的模块

2021.01.08

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值