# -*- coding: utf-8 -*-
# @Author: xiaodong
# @Date : 2021/4/6
import math
import random
import logging
from typing import List
logger = logging.getLogger("kmeans")
class KMeans:
def __init__(self, dataset: List[float], k: int, iteration: int = 10):
"""
实现简单 K-means
:param dataset: 数据集
:param k: 分簇的个数
:param iteration: 最大迭代次数
"""
self.k = k
self.n = len(dataset)
self.dim = len(dataset[0])
self.dataset = dataset
self.iteration = iteration
self.center = self._center()
self.last_centers = None
self.no_change = 0 # 用来记录迭代中簇心未发生变化的连续个数,用于提前终止
def distance(self, p1: List[float], p2: List[float]) -> float:
04-15
8776