主要参考来自于:https://blog.csdn.net/weixin_41848012/article/details/103310827?utm_source=app
# -*- coding: utf-8 -*-
# @FileName: K-means聚类
# @Software: PyCharm
# @Author : Li Xu
# @Time :2020//12//20 15:10
'''
K-Means聚类
西瓜书(课后9.4)
'''
import math
import random
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
class KMeans():
'''
定义一个类的构造器
'''
def __init__(self, dataset, K):
'''
初始化各个参数
:param dataset:数据集
:param K:聚类簇数
'''
self.dataset = dataset # 数据集
self.K = K # 聚类簇数
self.vector = 0 # 初始向量的维数
self.mean_vector = [] # 均值向量
self.count = 0 # 循环次数
self.max_iteration = 500 # 最大迭代次数
self.C = [[] for i in range(K)] # 簇
self.update_flag = 0 # 记录均值向量是否被更新
def loaddateset(self):
'''
加载数据集
:return:
'''
# 初始化数据集的维数
self.vector = len(self.dataset[0])
def InitMean_vetor(self):
'''
初始化均值向量
:return:
'''
# 随机产生K个均值向量
means = random.sample(range(0, len(self.dataset)), self