kmeas算法,最菜学法,一点一点注释学习

EAS调度算法介绍 介绍能量感知调度(EAS)使调度程序能够预测其决策对 CPU 消耗的电量的影响。EAS 依赖于 CPU 的能量模型 (EM) 来为每个任务选择省电的 CPU,同时要求对执行任务的吞吐量的影响最小。本文档介绍 EAS 的工作原理、它背后的主要设计决策是什么,并说明让它运行所需的条件。 阅读详情
# K-means Algorithm is a clustering algorithm

import matplotlib.pyplot as plt
from matplotlib import colors as mcolors
import math
import random


class Cluster(object):
	def __init__(self, samples):
		if len(samples) == 0:
			raise Exception("错误,样本数为0,为空聚类")
		self.samples = samples
		self.n_dim = samples[0].n_dim

		# 检查是否所有样本点的纬度数都一样
		for sample in samples:  # 这里的 sample 相当于新定义的变量名,类似于int i,再加上for循环
			if sample.n_dim != self.n_dim:
				raise Exception("错误,聚类中的样本点的纬度数不一致")

		self.centroid = self.cal_centroid()  # 初始化聚类中心

	def __repr__(self):
		return str(self.samples)

	def update(self, samples):
		old_centroid = self.centroid
		self.samples = samples
		self.centroid = self.cal_centroid()  # 牛逼!又学了一招https://www.cnblogs.com/IT-LearnHall/p/9426327.html
		# 报错原因1.调用方法时忘记加上括号,导致参数无法传入
		# 一、不带括号时,调用的是这个函数本身 ,是整个函数体,是一个函数对象,不须等该函数执行完成
		# 二、带括号(参数或者无参),调用的是函数的执行结果,须等该函数执行完成的结果

		shift = get_distance(old_centroid, self.centroid)
		return shift

	def cal_centroid(self):  # 对于一组样本点,计算其样本中心点
		n_samples = len(self.samples)
		coords = [sample.coords for sample in self.samples]  # a.coords[i] 包含的是该层维度的具体数值
		unzipped = zip(*coords)
		centroid_coords = [math.fsum(d_list) / n_samples for d_list in unzipped]

		return Sample(centroid_coords)


class Sample(object):
	def __init__(self, coords):
		self.coords = coords  # 参数个数
		self.n_dim = len(coords)  # 维度

	def __repr__(self):
		return str(self.coords)


def get_distance(a, b):
	if a.n_dim != b.n_dim:
		raise Exception("错误!样本点纬度不同")

	acc_diff = 0.0
	for i in range(a.n_dim):
		square_diff = pow(a.coords[i] - b.coords[i], 2)
		acc_diff += square_diff

	distance = math.sqrt(acc_diff)

	return distance


def gen_random_sample(n_dim, low, high):  # 产生随机样本点
	sample = Sample([random.uniform(low, high) for _ in range(n_dim)])
	return sample


def kmeans(samples, k, cutoff):
	init_samples = random.sample(samples, k)  # 初始化K个样本中心点,从samples中选择K个样本点
	clusters = [Cluster([sample]) for sample in init_samples]  # 以init_sample中的样本点作为聚类中心,先创建K个聚类

	num_loop = 0.0  # Q:python 中这里写为0和0.0有什么区别呢?
	while True:
		lists = [[] for _ in clusters]  # 创建K个空列表待用

		num_loop += 1  # 循环次数计数
		for sample in samples:
			min_distance = get_distance(sample, clusters[0].centroid)
			cluster_index = 0

			for i in range(k - 1):
				distance = get_distance(sample, clusters[i + 1].centroid)
				if distance < min_distance:
					min_distance = distance
					cluster_index = i + 1

			lists[cluster_index].append(sample)

		max_shift = 0
		for i in range(k):
			shift = clusters[i].update(lists[i])
			# if shift > max_shift:
			#     max_shift = shift
			# 可再优化:
			max_shift = max(shift, max_shift)

		if max_shift < cutoff:
			print("第{}次迭代后,聚类稳定".format(num_loop))
			break

	return clusters


def run_main():

	# 这些main函数里面的参数名都是自己定义的,和上面的类还有方法都没有关系,只要在对应位置放进去就ok
	n_samples = 1000  # 样本数
	n_feat = 2        # 样本维度
	n_cluster = 100   # 聚类个数 <=> K
	cutoff = 0.2      # 聚类结束标志
	lower = 0         # 样本空间范围
	upper = 200

	samples = [gen_random_sample(n_feat, lower, upper) for _ in range(n_samples)]  # 创造样本列表
	clusters = kmeans(samples, n_cluster, cutoff)  # 对创造出来的样本点列表进行第一次聚类

	for i, c in enumerate(clusters):  # i:簇编号,c:簇集合
		for sample in c.samples:
			print("聚类--{},样本点--{}".format(i, sample))

	plt.subplot()
	color_names = list(mcolors.cnames)  # 元组转化为列表
	for i, c in enumerate(clusters):
		x = []
		y = []
		color = [color_names[i]] * len(c.samples)
		for sample in c.samples:  # 报错原因 2.这里也别忘记了 c. ,因为这里的元素是从当前c簇中选取的
			x.append(sample.coords[0])
			y.append(sample.coords[1])
		plt.scatter(x, y, c=color)  # 必须严格写 c = color,不然就有错误
		# 实际上,c=color 这里不写也可以,采用默认值,但是有一个不好的地方就是,有可能会出现各种相同颜色的簇,不利于分类效果的显示
	plt.show()


if __name__ == '__main__':
	run_main()


借鉴的版本

# K-means Algorithm is a clustering algorithm

import matplotlib.pyplot as plt
from matplotlib import colors as mcolors
import math
import random


class Cluster(object):
    # 类继承了object对象,拥有了好多可操作对象,这些都是类中的高级特性
    # https: // blog.youkuaiyun.com / DeepOscar / article / details / 80947155
    """
        聚类
    """

    def __init__(self, samples):
        if len(samples) == 0:
            # 如果聚类中无样本点
            raise Exception("错误:一个空的聚类!")
        # 类中的非静态方法第一个参数是 self 的才可以被实例调用
        # 类中带 self 的参数都是 实例 的,实例对这个参数拥有所有权,即实例中所有的方法都可以使用实例的参数
        # raise 手动抛出一个异常

        # 属于该聚类的样本点
        self.samples = samples

        # 该聚类中样本点的维度
        self.n_dim = samples[0].n_dim  # samples 是一个簇的样本点集合,其中每一个的取值通过[i]来索引查阅

        # 判断该聚类中所有样本点的维度是否相同
        for sample in samples:
            if sample.n_dim != self.n_dim:
                raise Exception("错误: 聚类中样本点的维度不一致!")

        # 设置初始化的聚类中心
        self.centroid = self.cal_centroid()

    def __repr__(self):
        """
            输出对象信息
        """
        return str(self.samples)

    def update(self, samples):
        """
            计算之前的聚类中心和更新后聚类中心的距离
        """

        old_centroid = self.centroid
        self.samples = samples
        self.centroid = self.cal_centroid()
        shift = get_distance(old_centroid, self.centroid)
        return shift

    def cal_centroid(self):
        """
           对于一组样本点计算其中心点
        """
        n_samples = len(self.samples)  # 求样本点总数

        # 获取所有样本点的坐标(特征),并用列表给它装起来[];
        coords = [sample.coords for sample in self.samples]  # 列表; coords : 坐标;
        unzipped = zip(*coords)  # zip <=> 压缩;  zip(*)<=> 解压
        # 计算每个维度的均值

        centroid_coords = [math.fsum(d_list) / n_samples for d_list in unzipped]
        #  math.fsum() 对迭代器里的每个元素进行求和操作

        return Sample(centroid_coords)


class Sample(object):
    """
        样本点类
    """

    def __init__(self, coords):  # coords相当于一个参数,因为这一层是函数,是包在class里面的!
        self.coords = coords  # 样本点包含的坐标: 这里是在 初始化属性 coords 和 n_dim
        self.n_dim = len(coords)  # 样本点维度

    def __repr__(self):  #  如果用户需要自定义类能实现“自我描述”的功能,就必须重写 __repr__() 方法
        """
            输出对象信息
        """
        return str(self.coords)  # 表明在调用该方法时,会返回;;转化成字符串


def get_distance(a, b):
    """
        返回样本点a, b的欧式距离
        参考:https://en.wikipedia.org/wiki/Euclidean_distance#n_dimensions
    """
    if a.n_dim != b.n_dim:
        # 如果样本点维度不同
        raise Exception("错误: 样本点维度不同,无法计算距离!")

    acc_diff = 0.0
    for i in range(a.n_dim):  # 对点坐标的每一个纬度进行遍历,其中a.coords[i]包含的是该层维度的数值
        square_diff = pow((a.coords[i] - b.coords[i]), 2)
        acc_diff += square_diff
    distance = math.sqrt(acc_diff)

    return distance


def gen_random_sample(n_dim, lower, upper):
    """
        生成随机样本
    """
    # 下面 [ ] 中是一个链表推导式
    # 下面的lower和upper是对应这个函数的形参来讲的,所以同名;
    sample = Sample([random.uniform(lower, upper) for _ in range(n_dim)])  # Sample()是一个类,在上一个类中,是样本电类
    return sample
# uniform() 方法将随机生成下一个实数,它在 [x, y) 范围内(左闭右开)
# '_'是一个循环标志,也可以用i,j 等其他字母代替,下面的循环中不会用到,起到的只是控制循环次数的作用


def kmeans(samples, k, cutoff):
    # kmeans函数

    # 随机选k个样本点作为初始聚类中心
    # random.sample(list, 5)  # 从list中随机获取5个元素,作为一个片断返回;(前提是list必须已知);
    # 变形:random.sample(range(0, 9), 4)  => 使得能够满足 从选定范围中选取任意个元素 的需求
    init_samples = random.sample(samples, k)    # random.sample 是一个固定方法,学一下

    # 创建k个聚类,聚类的中心分别为随机初始的样本点
    # 总的clusters结果是一个列表,每个 Cluster类 的参数是一个列表[sample];最后相当于"列表中含列表"?[ [] [] []...]
    clusters = [Cluster([sample]) for sample in init_samples]  # 初始聚类,每类中只含有一个点,最后输出的时候是分类好的样子

    # 迭代循环直到聚类划分稳定
    n_loop = 0
    while True:  # while循环体中使用 True 或者 False ,首字母大写~
        # 初始化一组空列表用于存储每个聚类内的样本点
        lists = [[] for _ in clusters]  # ***************************************

        # 开始迭代
        n_loop += 1
        # 遍历样本集中的每个样本
        for sample in samples:
            # 计算样本点sample和 第一个聚类の中心 的距离
            smallest_distance = get_distance(sample, clusters[0].centroid)
            # 初始化属于聚类 0
            cluster_index = 0

            # 计算和其他聚类中心的距离
            for i in range(k - 1):  # 从0到(k-1),相比于外层的0地址,要再加一,等价于<=>地址从1到k;
                # 计算样本点sample和聚类中心的距离(欧式距离)
                distance = get_distance(sample, clusters[i + 1].centroid)
                # 如果存在更小的距离,更新距离
                if distance < smallest_distance:
                    smallest_distance = distance
                    cluster_index = i + 1  # 这是用来定位的,表明最后会把这个点归类到哪一个样本中心点去,
                    # 这里i因为是第二层循环的缘故,所以0实际对应着下标1,物理实际位置为2

            # 找到最近的聚类中心,更新所属聚类
            lists[cluster_index].append(sample)  # list.append 方法

        # 初始化最大移动距离
        biggest_shift = 0.0

        # 计算本次迭代中,聚类中心移动的距离
        # range(k)是左闭右开:[0,k)
        for i in range(k):  # 对 K 个聚类都更新一下聚类中心,并求出K个聚类中,聚类中心移动距离最大的一个

            # update() (line44) : 计算之前的聚类中心和更新后聚类中心的距离
            # line128:clusters就是由Cluster而定义的列表,所以应该能直接用Cluster类里面的方法吧???
            # update方法 是求取一组样本点的样本中心点,所以参数是一簇样本点;line134,lists结构为[ [][][]... ]的形式
            shift = clusters[i].update(lists[i])  #

            # 记录最大移动距离
            biggest_shift = max(biggest_shift, shift)

        # 如果聚类中心移动的距离小于收敛阈值,即:聚类稳定
        if biggest_shift < cutoff:
            print("第{}次迭代后,聚类稳定。".format(n_loop))
            break  # 跳出while True这一循环体
    # 返回聚类结果
    return clusters


def run_main():
    """
        主函数
    """
    # 样本个数
    n_samples = 1000

    # 特征个数 (特征维度)
    n_feat = 2

    # 特征数值范围
    lower = 0
    upper = 200

    # 聚类个数
    n_cluster = 100

    # 生成随机样本   '_'是个"占位符",循环中不关心具体的元素内容,就是简单的“让它循环这么多次”
    samples = [gen_random_sample(n_feat, lower, upper) for _ in range(n_samples)]

    # 收敛阈值
    cutoff = 0.2

    clusters = kmeans(samples, n_cluster, cutoff)

    # 输出结果 enumerate(sequence, [start=0])
    # 用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,
    # 同时列出数据和数据下标,一般用在 for 循环当中 : (下标,数据)
    #
    # 格式化字符串的函数 str.format()
    # "{1} {0} {1}".format("hello", "world")  # 设置指定位置
    for i, c in enumerate(clusters):  # 按簇,把每一簇内含有的元素都打印出来;enumerate:枚举
        for sample in c.samples:
            print('聚类--{},样本点--{}'.format(i, sample))  # 这里不设置指定位置

    # 可视化结果,直接学就好了
    # https://blog.youkuaiyun.com/tefuirnever/article/details/88944438
    # c可以是一个RGB或RGBA二维行数组
    plt.subplot()  # subplot() 函数允许你在同一图中绘制不同的东西:matplotlib.pyplot
    color_names = list(mcolors.cnames)  # list() 方法用于将 元组 转换为 列表 ,所以这里现在是一个列表 [ i ]
    for i, c in enumerate(clusters):
        x = []  # 学习python中数组的定义方式
        y = []
        # random.choice
        color = [color_names[i]] * len(c.samples)
        # 这里按照当前簇c中的元素个数,对color列表进行增殖
        # 以期在plt.scatter函数中,对应的是一组x和对应的一组y,则带入一个颜色列表,方能使得最后画图时,同一组点都是同颜色的
        # 用一个列表list1乘一个数字n 会得到一个新的列表list2, 这个列表的元素是list1的元素重复n次

        for sample in c.samples:
            x.append(sample.coords[0])  # 用于在列表末尾添加新的对象
            y.append(sample.coords[1])  # coords是坐标,后面的 [] 是指维度
        plt.scatter(x, y, c=color)  # 绘制散点图,其中X、Y是相同长度的数组序列;  一簇一簇地画
    plt.show()


if __name__ == '__main__':
    run_main()

 

详解k-means++ 一、概述 定义:k-means++是一种为k-means聚类算法选择初始值(或“种子”)的算法。它是NP-hard k-means问题的一种近似算法,它是一种避免标准k-means算法有时发现的较弱聚类的方法。 K-means与K-means++:原始K-means算法最开始随机选取数据集中K个点作为聚类中心,而K-means++按照如下的思想选取K个聚类中心:假设已经选取了n个初始聚类中心(0<n<K),则在选取第n+1个聚类中心时:距离当前n个聚类中心越远的点会有更高的概率被选为第n+1个聚 阅读详情

相关推荐

QUIC 协议域名封堵:核心原理、关键技术与实现路径(C/C++代码实现)

随着 QUIC 协议在互联网领域的广泛应用,其基于 UDP 的传输特性与加密设计,打破了传统 TCP 协议下的域名封堵逻辑,给网络合规管理与安全防护带来新的技术难题。本文将脱离具体代码实现,聚焦 QUIC 协议域名封堵的核心原理、关键技术环节与实际落地路径,从协议特性本质出发,解析如何在遵循 RFC 9000、RFC 9001 等规范的前提下,实现对 QUIC 流量的精准域名封堵。

chen1415886044的博客 1466

python深入学习笔记5-装饰器

作者:Vamei 出处:http://www.cnblogs.com/vamei05、装饰器装饰器用于对一个函数、方法或者类进行加工。装饰函数和方法我们先定义两个简单的数学函数,一个用来计算平方和,一个用来计算平方差:# get square sum def square_sum(a, b): return a**2 + b**2 # get square diff def square

DXT的博客 204

离合器KP点自学习:从原理到工程实践的全景解析

本文全面解析了离合器KP点自学习的原理与工程实践,详细介绍了KP点的物理本质、控制价值及自学习方法。通过扭矩增量式和转速变化式学习法,结合不同变速箱构型的适配策略,提升离合器控制的精度与效率。文章还探讨了液压系统迟滞补偿和摩擦材料老化应对方案,为工程实践提供可靠保障。

weixin_33717117的博客 287

医学图像优化常用的评价指标(包含Matlab代码)

医学图像优化常用的评价指标(包含Matlab代码)

m0_57704424的博客 5251

从零到一:EHB-电机复合制动系统的Simulink仿真实战指南

本文详细介绍了EHB-电机复合制动系统在纯电动汽车中的Simulink仿真实战指南。通过系统概述、建模核心模块解析、控制策略开发及典型问题排查,帮助读者掌握从零到一的开发流程。重点讲解了液压子系统建模、电机再生制动模型及整车动力学集成,为开发者提供了一套完整的解决方案。

hh234的博客 1008

【智能体评测】BrowserUse:一款超越 Anthropic Computer Use 的开源智能体

本文将全面介绍 BrowserUse 的核心功能、配置与使用方法,以及通过多场景测试评估其性能。

surfirst的博客 4099

人工智能算法一&无监督学习(Kmeas聚类)

人工智能算法一&无监督学习(Kmeas聚类)

S1124654的博客 2296

组态王通过以太网与西门子S7-200 SMART PLC通讯案例详解

通过以上步骤,我们成功实现了组态王与西门子S7-200 SMART PLC的以太网通讯。这一技术不仅提高了工业自动化系统的灵活性和可靠性,还为初学者提供了一个实用的学习案例。希望本文能帮助您快速掌握组态王与西门子S7-200 SMART PLC的通讯技术。如有任何疑问,欢迎留言讨论!

2401_88785500的博客 2004

KMean算法精讲

  KMeas算法是一种聚类算法,同时也是一种无监督的算法,即在训练模型时并不需要标签,其主要目的是通过循环迭代,将样本数据分成K类。

chenjunheaixuexi的博客 5730

在AutoDL的A100云服务器上,用Docker搞定Sapien+RobotWin环境(附完整conda list)

本文详细介绍了在AutoDL的A100云服务器上使用Docker构建Sapien+RobotWin环境的完整指南。通过配置Vulkan渲染管线、精确复现Conda环境以及解决常见问题,帮助研究人员高效搭建稳定的机器人仿真开发环境,特别适合需要高性能GPU加速的复杂仿真任务。

weixin_30689307的博客 431

模拟IC版图DRC实战:手把手教你搞定MIM电容天线错误和ESD.10g违例

本文深入解析模拟IC版图中的MIM电容天线错误和ESD.10g违例问题,提供从错误解码到实战修复的完整指南。通过电路图修改、版图优化和验证闭环等步骤,帮助工程师高效解决DRC错误,特别适用于ADC等精密模拟电路设计。文章还分享了高级排错技巧和预防性设计策略,大幅提升流片成功率。

weixin_27697385的博客 295

K-meas聚类算法

** K-meas聚类算法 1 K-means算法简介 k-means算法是一种聚类算法,所谓聚类,即根据相似性原则,将具有较高相似度的数据对象划分至同一类簇,将具有较高相异度的数据对象划分至不同类簇。聚类与分类最大的区别在于,聚类过程为无监督过程,即待处理数据对象没有任何先验知识,而分类过程为有监督过程,即存在有先验知识的训练数据集。 2 K-means算法原理 k-means算法中的k代表类簇...

Yep_Ying的博客 2300

【3D Slicer】的小白入门使用指南一

3D Slicer 是一个免费的开源软件平台,用于医学、生物医学和其他 3D 图像的可视化、处理、分割、配准和分析。Slicer 的功能包括:读/写。

图挖掘领域,新晋砖家 ☞ 未来可期,欢迎和静静一起学习交流吖 5554

机器学习-聚类之K均值(K-means)算法原理及实战

K-means算法 前言 机器学习方法主要分为监督学习和非监督学习两种。监督学习方法是在样本标签类别已知的情况下进行的,可以统计出各类样本的概率分布、特征空间分布区域等描述量,然后利用这些参数进行分类器设计。在实际应用中,很多情况是无法预先知道样本标签的,因而只能利用非监督机器学习方法进行分析。聚类分析就是典型的非监督学习方法,它在没有给定划分类别的情况下,根据数据自身的距离或者相似度进行样本...

周先森爱吃素的博客 1605

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

【机器学习算法】K均值(K-means)

非监督算法是机器学习研究的一大领域,它适用于不带标签的样本数据,采取一定的算法,将样本分成自动分类成不同的簇。 K均值(K-meas)   K均值算法接收两个输入,一个是K,表示簇的数量,另一个是不带标签的训练集{x1,x2,..xmx_1,x2,..x_mx1​,x2,..xm​}。   算法过程如下: 随机初始化K个聚类中心μ1,μ2,...μK\mu_1,\mu_2,...\mu_Kμ...

Mankind的博客 1020

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

无监督学习(K-Means)的认识

无监督学习是一种机器学习的方法,与监督学习不同,无监督学习不需要标记好的训练数据作为输入。在无监督学习中,算法根据输入数据的内在结构和模式来自动学习。这种学习的目标是发现数据中的隐藏模式、结构或关系,而不是根据预定义的标签进行分类或预测。无监督学习算法可以用于聚类、降维、异常检测等任务,可以帮助我们理解数据的特点和相似性,挖掘数据的潜在知识,以及发现数据中的异常情况。

qq_74156152的博客 1896

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

k-means聚类算法详解

K-means 是我们最常用的基于欧式距离的聚类算法,其认为两个目标的距离越近,相似度越大。

magicmens的博客 1万+

机器学习算法之K-means(K均值聚类)算法

聚类 聚类,简单来说,就是将一个庞杂数据集中具有相似特征的数据自动归类到一起,称为一个簇,簇内的对象越相似,聚类的效果越好。它是一种无监督的学习(Unsupervised Learning)方法,不需要预先标注好的训练集。聚类与分类最大的区别就是分类的目标事先已知,例如猫狗识别,你在分类之前已经预先知道要将它分为猫、狗两个种类;而在你聚类之前,你对你的目标是未知的,同样以动物为例,对于一个动物集来...

tttaeyang的博客 8853

KMeans算法

聚类是一种非监督学习方法,而K均值聚类(K-Means Clustering)是最基础和最常用的聚类算法。它的基本思想是:通过迭代方式寻找K的簇(Cluster)的一种划分方案,使得聚类结果对应的代价函数最小。特别的,代价函数可以定义为各个样本点到距离其所属簇中心点的误差的平方和: J(c,μ)=∑i=1M∣∣xi−μci∣∣J(c,\mu) = \sum_{i=1}^M||x_i-\mu_{c_i}||J(c,μ)=i=1∑M​∣∣xi​−μci​​∣∣ 其中xix_ixi​代表第iii个样本,cic_

Steve Wang's blog 459

聚类算法:Kmeans和Kmeans++算法精讲

一文带你搞懂Kmeans和Kmeans++聚类算法

路人贾的博客 7336

优化进化算法

进化算法(Evolutionary Algorithms, EAs)是受自然选择和生物进化机制启发而发展起来的一类优化算法。它们使用模拟生物进化的技术来解决复杂的优化问题,其核心思想是通过选择(Selection)、遗传(Crossover)和变异(Mutation)等操作,对候选解进行迭代优化,以期寻找到问题的最优解或足够好的解。进化算法广泛应用于工程优化、机器学习、人工智能、经济模型、生态模型、机器人控制和其他领域的问题求解。

weixin_39699362的博客 3229

【机器学习】K-means聚类的最优k值的选取(含代码示例)

【机器学习】K-means聚类的最优k值的选取

努力才是唯一的入场券。 3万+

K-means++算法思想

转自:http://www.cnblogs.com/yixuan-xu/p/6272208.htmlK-说在前面:在网上找了很多关于k-means++的中文文章,基本上就两个版本。这篇文章算一个(这个版本也就只有一篇);另外一个版本应该来自同一人所写(其他几乎都是复制粘贴),但总觉得不怎么对劲。还好本文原博客贴出了一篇论文,以及笔者参考了维基百科。这个版本应该更让人信服一点。一、概述 meas

空字符 1万+

kmeans算法性能改进_kmeans++算法+kmeans++优化算法+距离计算优化

***题记:*我一直在路上,害怕停下 在我的另一篇博客里《读sklearn源码学机器学习——kmeans聚类算法》我详细的阐述了kmeans算法的工作过程。截至目前为止,还没有深入的刨析kmeans算法的工作原理(会用和知道怎么用,跟理解背后深刻的数学原理是有本质区别的,我对此深感敬畏)。今天站在工程应用的角度,刨析kmeans在应用过程的应用和优化。主要是弥补我上篇博客中没有说明白的两个函数(elativeDist,squaredNorna)和一个初始化。 1、kmeans++算法 kmeans++是D

铁血军的小博客 1万+

K-Means聚类算法

什么是聚类分析聚类分析是数据挖掘中一个重要概念,其核心是寻找数据对象中隐藏的有价值的信息,根据相似性原则,把具有较高相似度的数据对象划分到同一类簇,把具有较高相异度的数据对象划分到不同类簇,从而使相同组中的数据点之间比其他组中的数据点更具有相似性。聚类算法典型的聚类算法分为三个阶段,主要包括特征选择和特征提取、数据对象间相似度计算以及根据相似度将数据对象分组。聚类算法可以分为两大类:层次聚类算法和划分聚类算法。层次聚类算法通过不同类别间的数据对象的相似度试图构建一个高层次的嵌套聚类树结构,聚类树的构建有两种

软件工程小施同学 的专栏 6万+

kmeans++

kmeans++是kmean算法的改进,原来kmean算法在原始数据的最小、最大区间内均等的选择K个聚类中心,然而kmeans++却是从原始数据中选择K个作为初始聚类中心,这种思路的效果优于kmean.下面是kmeas++的matlab代码,后面实例中使用的Gauss_sample函数是我的上一篇博文。 1.函数 function [K_center,seed]=kmeans_plus(dat

cutelily2014的博客 2062
上一篇: HDU 1002 (高精度加法运算)
下一篇: (真)n选m排列算法next_permutation() 非递归版本
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值