本文主要借鉴了下面文章,对下文的一些代码在本文进行了详细解释
K近邻(有监督算法,分类算法)逻辑回归(分类算法)决策树(有监督算法,概率算法)随机森林(集成算法中最简单的,模型融合算法)朴素贝叶斯EM算法Adaboost(集成算法之一)SVM马尔可夫一、算法过程(1)随机选择...
K:有k个质心(簇)。
means:质心是一个簇所有点的均值。
K-means属于硬聚类。硬聚类指数据只能属于一个簇,与软聚类:数据可以不同程度的属于多个类相反。
S1:选取初始质心:从样本点中随机抽取K个点作为质心。
S2:所有样本点归类:计算所有样本点到K个质心的距离,将其划分到与其距离最近的簇中心所在簇。
S3:重新确定质心:新质心 = 簇内所有点的均值。
S4:循环更新:重复步骤S2,S3,直到质心不再变化。
# 1.随机产生初始簇心第一步,需要把待分割图片放入项目文件,like this:
第二步,代码的第三行:'img = plt.imread()',在括号里加入图片路径:“图片名.文件格式”,比如,1.jpeg、2.bmp等等。
2.迭代10次,簇总数=2
新增1列用来存储分类信息
只返回所有像素点的分类结果
一维数组[R, G, B]就可以表示一个像素点,数组内容是三原色的取值,数组元素大小∈[0, 255]。
一个三维数组就可表示一张图片,如果图片的分辨率为m*n,那么数组形状为(n, m, 3)。这个三维数组描述了图片所有像素点(共m*n个)的RGB信息。
把图片的信息提取到数组中(将图片转化为数组)。
返回值类型:numpy数组
假设图片分辨率=m*n,宽*高
读取照片,并获取包含该图片所有信息的3维矩阵。
输出:img记录着所有像素点的RGB值:将数组存储的RGB信息映射为彩色图片。
img是包含图片所有信息的三维数组。
(1)三维:从图片提取的数组是三维,可以由plt.imshow()正常显示。
(2)二维: 图像分割的结果是二维数组,数组每个元素对应一个像素点的种类。如果图像有3种簇,那么二维数组的取值是[0, 1, 2],代表归属不同的种类。
7.4.4不同数组形状显示的图片特点
不论是二维还是三维数组,用plt.imshow(img)表示时,如果不设置cmap参数,默认都是hsv。
特别地,二维数组显示的图片的颜色种类和二维数组元素可取值的数量是一样的,这样就可以区分分割的结果。下面,是两种簇的分割。
plt.show()被执行时,程序就被阻塞在这一行不向下进行,直到图像窗口被关闭时,程序才往下进行。
一般情况下,对于二维数组,用1个或者1对数字分别索引数组某行或者某个元素。
也可以用向量进行索引,得到的是指定行构成的数组。
下面,用向量对二维数组进行索引:
先从[0, row*col-1]中随机产生长度为k的向量,再在data中索引该向量,得到k个随机点
计算图片RGB数组和一个簇心距离,二者形状分别为:[n, 3]和[1, 3]。
将三维数组另起一列,放像素点的归类信息。属于第k个簇,归类信息就存储为k。
最终K-means返回的结果:每个像素点对应的信息只有它属于哪个类,取值范围为[0, k-1]。
np.argmin:返回一行/列中最小元素的索引。
簇心 = 簇内所有点的平均值,簇心并不一定是实际存在的像素点的RGB取值。
在词法分析中,我们扫描输入源程序的每个字符,得到多种类型的单词(token),一系列的单词就构成了一条单词流。可以设想,单词流的某个部分有多个并排的单词,它们可...
普遍的观点认为,前端就是打好 HTML、CSS、JS 三大基础,深刻理解语义化标签,了解 N 种不同的布局方式,掌握语言的语法、特性、内置 API。再学习一些主...
Hiphop是Facebook开发一款PHP二进制化的一个工具,最开始是由php转为C++,但是后来发现编译为c++的话,许多的时间会花费在编译代码上面,调试不...
基本方法:对任何输入串,试图从文法的开始符号出发, 自上而下地为输入串建立一棵语法树,或者说为输入串寻找一个最左推导。
以及各大书本上写的“将计算机语言翻译成计算机能识别的语言”,栏主这几个星期消失的时间段里,从编译原理基础开始,到理解正则,文法,优化,错误处理等各个方面为各位理...
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。