机器学习——详解经典聚类算法Kmeans

K-means聚类的实现以及案例讲解 1 k-means聚类步骤 1、 随机设置K个特征空间内的点作为初始的聚类中⼼ 2、 对于其他每个点计算到K个中⼼的距离, 未知的点选择最近的⼀个聚类中⼼点作为标记类别 3、 接着对着标记的聚类中⼼之后, 重新计算出每个聚类的新中⼼点(平均值) 4、 如果计算得出的新中⼼点与原中⼼点⼀样(质⼼不再移动) , 那么结束, 否则重新进⾏第⼆步过程 通过下图解释实现流程: 2. 案例联系 1、 随机设置K个特征空间内的点作为初始的聚类中⼼(本案例中设置p1和p2) 2、 对于其他每个点. 阅读详情

本文始发于个人公众号:TechFlow,原创不易,求个关注


今天是机器学习专题的第12篇文章,我们一起来看下Kmeans聚类算法。

在上一篇文章当中我们讨论了KNN算法,KNN算法非常形象,通过距离公式找到最近的K个邻居,通过邻居的结果来推测当前的结果。今天我们要来看的算法同样非常直观,也是最经典的聚类算法之一,它就是Kmeans。

我们都知道,在英文当中Means是平均的意思,所以也有将它翻译成K-均值算法的。当然,含义是一样的,都是通过求均值的方式来获取样本的类簇。

既然知道Kmeans算法和均值和类簇有关,那么剩下的问题就只有两个:首先,我们应该怎么来计算均值,其次当我们获取了均值之后,又是怎么来聚类的呢?

聚类算法

上面的两个问题我们先放一放,我们先来看一个例子,假设我们有一系列用户的收入样本,我们想要将这批用户根据他们的收入、居住地以及消费情况分成富人阶级、中产阶级和工薪阶级。

在这个问题当中,我们只知道我们希望把样本分成三类,但是怎么来分,我们并不清楚,这是我们希望模型替我们完成的。也就是说我们希望模型能够自动识别这些样本之间的关联性,把关联性强的样本聚在一起,成为一个类簇。在这个问题当中,我们希望模型替我们把数据分成三个类别。

如果让我们人工来划分这个问题当然很简单,我们直接根据这些用户的收入来分。直接将用户的收入画一个折线图,然后来寻找最佳的两个切分点,三下五除二很快就搞定了。但如果我们的特征当中没有用户的收入呢?如果我们能知道用户有没有车,有没有房,家里的存款和所有外债,这就没那么直观了,不过也容易,我们简单地建模也容易解决。再如果我们连车房的信息都没有,只能拿到用户在哪里上班,用户住在哪里呢?这个问题是不是就更抽象了?

在特征比较抽象和隐晦的时候,我们想直接划分往往不太容易,由于不知道真实的标签,我们也没有办法用上监督模型。为了解决问题,Kmeans只能反其道而行之,我们不再对数据进行划分了,而让比较接近的数据自己聚集在一起。Kmeans算法正是基于这一思想而生,让数据通过某种算法聚集,不再进行划分的方法称为聚类算法。

在聚类问题当中,一系列样本被模型根据数据的属性聚合在了一起,成为了同一个类别。这里的类别就称为这些样本的类簇(cluster)。每一个簇的中心点称为簇中心。所以,KMeans算法,顾名思义,就是将样本根据用户设置的K值,一共聚类成K个类簇。

Kmeans原理

不知道大家有没有听说过这么一个理论,人类和计算机其实是相反的。一些对于人类来说困难的问题,对于计算机非常简单。比如记忆,人类很难瞬间记忆大量的东西,而计算机不是,只要带宽和容量足够,再多的数据都能记住。不但能记住,而且绝不会出错。再比如计算,人类很难快速计算复杂的公式,基本上两位数以上的乘除就必须要借助工具了。但计算机不是,只要CPU资源足够,再大量的计算都可以进行。

但是呢,人类觉得很简单的东西,对计算机来说非常困难。比如视觉,我们人类可以很轻易地分辨图片上的猫和狗,但是计算机不行。即使是深度学习和AI大行其道的今天,我们也要专门设计复杂的模型和大量数据进行训练才能让计算机学会分辨图片的内容。再比如创作,人类可以创作出前人没有的东西,计算机则不能,所谓的计算机谱曲、写作只不过是程序按照固定的模式加上一些随机波动的值综合作用的结果而已。再比如思考,人类可以思考之前从未见过的问题,计算机显然不能。

比如上图,我们人类一眼看去这是三个类别,但是计算机不行。数据在计算机当中是离散的,计算机也没有视觉,看不到数据之间的联系。所以我们看着简单的问题,其实并没有那么简单,但其实刚才的分析当中我们已经道出了本质:既然计算机看不到联系,那么我们就要想办法让它能够“看到”,说看到应该不够准确,准确地说是算到。

回想一下,我们刚才是怎么快速分辨出图上有三个类别的?你会说很简单嘛,因为三个区域内点最多啊。这个说法很正确,但是不够量化,如果我们量化一下,应该是存在三个区域密度最大。一旦量化表达以后,问题就清楚了,我们正是要通过密度来进行聚类。Kmeans正是基于这一朴素的思想,但是它过于朴素,并没有设计计算类簇数量的算法,所以这个类别数量K,是要用户提供的。

也就是说算法并不知道要聚成几类,我们说是几类就是几类。

我们忽略这一细节,假设我们通过某种奇怪的方法知道了数据一共分成三类,那么Kmeans怎么进行划分呢?

我们深入思考会发现我们虽然说是要量化密度,但是密度很难量化。因为密度的定义本身就是基于聚类之后的结果的,我们肯定是已经知道了这样一批数据聚集在了一起才能算它们的密度,而不是相反。所以这个思路是靠谱的,但是直接这么做是不行的。但是直接做不行,不意味着倒着不可以,这个思路在数学上很常见,在这里我们又遇到了。

既然我们通过密度来聚类不行,那么我们能不能先聚类再算密度,根据密度的结果调整呢?

我Google了好久也没找到Kmeans原作者的信息,但我想能想出这么天才想法的人,他一定很机智。Kmeans正是基于这么朴素又机智的思路衍生的。

初始化

在算法运行的伊始,Kmeans会在数据集的范围当中随机选择K个中心点,然后依据这K个中心点进行聚类。中心点有了聚类其实很容易,对于每一个样本来说我们只需要计算一下它和所有中心的距离,选择最近的那个就好了。

当然,这样得到的结果肯定很不准,但是没关系,即使依据不靠谱的中心,我们也可以完成聚类,我们把随机到的中心点的位置和最后的聚类结果都画在一张图上,可以看到虽然一开始选的位置看起来不是那么靠谱,但是我们一样可以达成一个不错的结果。

初始的聚类结果肯定是不准的,但是没有关系,我们不怕不准,就怕没有结果。有了结果就好办了,我们可以针对这个结果进行分析来查看优化的方向。有了优化的方向就可以让结果变得越来越准,就好像在线性回归当中,我们也不是第一下就搞定最佳参数的选值的,也是通过梯度下降一点一点迭代出来的。

迭代

在我们介绍具体的迭代方法之前,先来分析下情况。显然由于随机选取的关系,聚类的结果肯定是不准的,不准的原因是由于我们随机选取的中心和类簇距离太远导致的。也就是说我们要想办法让中心向着类簇靠近。

那怎么才能靠近呢,我们先来看一下完美聚类之后的情况。

我们来观察一下,完美聚类时中心点和类簇重叠。那么这个中心点有什么性质呢?如果对物理熟悉的话,应该能联想到,这个中心点应该是这个类样本的质心。即使不熟悉这个概念也没关系,我们通过上图可以观察出来,样本点均匀地分散在中心的四周。均匀地分散会有一个什么特点?也容易想到,就是出现在中心点左侧和右侧,上侧和下侧,以及其他各个方向上的点数量和分布都差不多。我们量化一下这个概念,可以得到类别当中所有点的坐标均值就是中心点的位置。

那么问题来了,在一个聚类错误的情况下,样本坐标的均值(即质心)和我们选取的中心点会重合吗?如果不重合会有怎样的偏差呢?

我们从上图其实可以猜出来,由于我们选的中心点位置不对,所以它和聚类之后样本的质心肯定是不重合的。两者偏差的方向,就是它距离质心的方向。

这个结论也很朴素,因为距离真实的类簇越近,点越密集,那么算出来的质心显然会更靠近真实类簇的方向。有了这个结论,就很简单了,我们只要每次聚类之后计算一下各个类的质心,然后将算出来的质心作为下一次聚类的中心点重新聚类,一直重复上面的过程就行了。当聚类之前的中心和聚类之后的质心重叠的时候,就说明聚类收敛,我们找到了类簇。

下图展现了一个类别中心随着迭代而变化的情况,我们可以很直观地看到,随着我们的迭代,我们的类中心距离真正的簇中心越来越近,经过了三次迭代,就已经非常接近最后

KMeans聚类算法思想与可视化 1.聚类分析1.0 概念聚类分析简称聚类(clustering),是一个把数据集划分成子集的过程,每一个子集是一个簇(cluster),使得簇中的样本彼此相似,但与其他簇中的样本不相似。聚类分析不需要事先知道样本的类别,甚至不用知道类别个数,因此它是一种无监督的学习算法,一般用于数据探索,比如群组发现和离群点检测,还可以作为其他算法的预处理步骤。下面的动图展示的是一个聚类过程,感受一下:1.1 基本 阅读详情

相关推荐

Kmeans聚类算法 python sklearn 用户画像

1、基本概念; 聚类分析简称聚类(clustering),是一个把数据集划分成子集的过程,每一个子集是一个簇(cluster),使得簇中的样本彼此相似,但与其他簇中的样本不相似。 聚类分析不需要事先知道样本的类别,甚至不用知道类别个数,因此它是一种典型的无监督学习算法,一般用于数据探索,比如群组发现和离群点检测,还可以作为其他算法的预处理步骤。 在工作中遇到用户画像、群组划分问题

liuaaawen的博客 1万+

机器学习:基于Kmeans聚类算法对银行客户进行分类

K-means算法是一种常用的聚类算法,用于将数据集划分成k个不重叠的簇。其主要思想是通过迭代的方式将样本点划分到不同的簇中,使得同一簇内的样本点相似度较高,不同簇之间的相似度较低。

阿极的博客 1万+

数据挖掘实战-基于KMeans算法对超市客户进行聚类分群

本实验基于KMeans算法对超市客户进行了聚类分群。通过对客户购物数据进行聚类,我们成功将客户分为不同的群体。每个群体代表了具有相似购物行为和偏好的客户群体。通过实验结果,我们发现了客户群体之间的明显差异和共性。不同群体的客户在购买频率、购物金额和购买种类等方面有所区别。这为超市提供了重要的市场细分信息,帮助超市经营者更好地了解不同客户群体的需求和喜好,制定有针对性的营销策略和商品推荐,提高客户满意度和忠诚度。此外,实验还揭示了超市客户的购物行为规律,为超市优化商品陈列和促销策略提供了指导。

m0_64336780的博客 2万+

k-means算法实例

一个聚类算法(k-means)实例,对想实践一下K_means算法的朋友很实用

Python实现K-means聚类算法

用python写的一个k-means聚类算法的实现,测试数据在压缩包的data.txt中,结果通过图示的方法进行直观展示。

python实现k-means聚类

python实现k-means聚类,利用的库有numpy sklearn,利用matplot绘图

k-means聚类算法实现

1.首先,我们选择一些类/组来使用并随机地初始化它们各自的中心点。要想知道要使用的类的数量,最好快速地查看一下数据,并尝试识别任何不同的分组。中心点是与每个数据点向量相同长度的向量,在上面的图形中是“X”。 2.每个数据点通过计算点和每个组中心之间的距离进行分类,然后将这个点分类为最接近它的组。 3.基于这些分类点,我们通过取组中所有向量的均值来重新计算组中心。 4.对一组迭代重复这些步骤。你还可以选择随机初始化组中心几次,然后选择那些看起来对它提供了最好结果的来运行

基于K-means聚类算法的图像分割及其MATLAB实现

基于K-means聚类算法的图像分割 算法的基本原理:  基于K-means聚类算法的图像分割以图像中的像素为数据点,按照指定的簇数进行聚类,然后将每个像素点以其对应的聚类中心替代,重构该图像。 算法步骤: ①随机选取K个初始聚类中心; ②计算每个样本到各聚类中心的距离,同时将每个样本归到与其距离最近的聚类中心; ③对每个簇,以所有样本的均值作为该簇新的聚类中心; ④重复第②~③步,直到聚类中心不再变化; ⑤结束,得到K个聚类。

TI毫米波雷达人体生命体征(呼吸、心跳)信号提取算法(IWR6843ISK+DCA1000EVM)

本篇内容介绍的算法主要为传统的提取算法,但可实现在1m内呈现良好的检测效果,能够提取出非常可观的呼吸和心跳波形,但在超出1m的距离后便不适用这个算法了。远距离检测呼吸和心跳始终是这个领域一个很大的挑战。要实现远距离检测可在提取相位信号、分离呼吸和心跳信号上进行改进处理,例如线性解调提取相位、改进的VMD分离呼吸和心跳算法。

m0_61934621的博客 3万+

告别乱码!ESP32+LVGL显示中文的保姆级教程(基于ESP-IDF,附7000字库生成)

本文详细介绍了如何在ESP32上使用LVGL显示中文的完整解决方案,包括中文字库生成、ESP-IDF工程集成和优化技巧。通过7000字库生成和实战案例,帮助开发者彻底解决中文乱码问题,适用于智能家居、智能手表等嵌入式设备开发。

weixin_28740299的博客 396

从像素到光影:解析《黑神话:悟空》中Nanite与Lumen的协同渲染革命

本文深度解析了《黑神话:悟空》如何利用Unreal Engine 5的Nanite与Lumen技术实现渲染革命。Nanite处理亿级多边形几何细节,无需传统LOD优化;Lumen提供全动态全局光照,实现实时光线反弹。两者协同工作,为游戏带来电影级视觉体验,重塑了实时渲染的技术标准与工作流程。

f6g7h8i9j的博客 424

YOLO11涨点优化:原创自研 | 魔改Bottleneck,具备多尺度和特征通道融合的结构

可以将C3k2_MSAMCS放在neck,或者backbone和neck同时修改,具体看自己数据集的涨点情况决定

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 1645

三维重建(十八)——colmap的使用(粗浅)

三维重建(十八)——colmap的使用(粗浅)

河海大学研究生在读的学习笔记 1372

【WRF湿度调整策略】WRF/ERA5湿度数据对比

【WRF湿度调整策略】WRF/ERA5湿度数据对比

WW、forever的博客 117

把机器学习“搬进”数据库:SAP HANA PAL 快速上手与 ABAP AMDP 实战

摘要:本文探讨了SAP HANA PAL(Predictive Analysis Library)在企业数据分析中的实践应用。PAL通过将机器学习算法下推到数据库内部执行,有效解决了大数据量场景下的数据搬运瓶颈和治理成本问题。文章详细介绍了PAL的核心功能(包括聚类、分类、回归等10类算法)、使用前提(版本、组件和权限要求)以及通过AMDP实现ABAP与PAL集成的技术方案。重点阐述了参数表设计理念和两个典型应用场景:利用PageRank算法分析企业权限网络关系,以及通过PAL_SCALE进行特征预处理。文

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 5736

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

上一篇: Python专题——五分钟带你了解map、reduce和filter
下一篇: 动态规划入门——详解经典问题零一背包
TechFlow
博客等级 码龄7年 347粉丝 276原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值