" M; z5 T* _- l+ G& f0 m( [在无监督、非监督学习中了,学习过程仅使用输入数据,没有更多的指导信息,要求从这些数据中提取知识。我们已经讨论了非监督学习众多形式的一种降维。另一个普及的领域就是聚类分析。他的目的是吧数据分为相似元素组成的不同区域中。: b) f. @. t3 |( k
3 X5 f4 r% s/ ^ K% P在本章中,我们想要理解不同的聚类算法如何从简单到,无标记的数据集中提取特征。这些结构特征,可以用于特征处理,图像处理,甚至是作为无监督学习任务的预处理步骤。 " G8 ^& [- B( h; e! O8 d, y作为一个具体的例子,我们将对图像进行聚类,将色彩空间降到16位数。) P2 p: A. h v1 B) E1 I: u
' R- S9 U- a5 p' X- X解决的问题/ X/ A0 o7 V. Y" \( C [
1.K-means聚类和期望最大化是什么?如何在opencv中实现这些算法。 - }+ T5 V. {2 S$ v2.如何在层次树中使用聚类算法。他带来的好处有哪些。% T9 p; u+ q; T* d& }: _$ B
3.如何使用无监督学习,进行预处理,图像处理,分类。 / T' o. H h" M5 N' K# F ) `+ K- r: V# k7 S) w( e& h5 L1 理解无监督学习 " S, X. M: `5 D! W' n无监督学习可能有很多形式,但是他们的目标总是把原始数据转化为更加丰富,更加有意义的表示,这么做可以让人们更容易理解,也可以更方便的使用机器学习算法进行解析。 , B" M8 s* G/ M) X/ ~! b5 A9 \9 u% k1 F无监督学习的应用包括一下应用: - H: ^* v0 b) p1降维:他接受一个许多特征的高维度数据表示,尝试对这些数据进行压缩,以使其主要特征,可以使用少量的携带高信息量的数据来表示。 - {+ k8 u# A* @, ^1 `& Q, {2因子分析:用于找到导致被观察的到的数据的隐含因素或者未观察到的方面。 * J. Z/ ~2 L" y0 ]7 _3聚类分析:* U: \5 d! d# }% a
尝试把数据分成相似元素组成的不同组。 * ?# O3 M) ^( @6 z7 { $ G6 j2 T4 i" Q3 Q' w( g- n无监督学习主要的挑战就是,如何确定一个算法是否出色,或者学习到什么有用内容,通常评估一个无监督学习算法结果的唯一方式是手动检查,并确定结果是否有意义。 + ]4 S- D# D. t0 {8 o: S8 J & p1 M4 v4 n: i' F9 M话虽然如此,但是非监督学习,可以非常有,比如作为预处理或者特征提取的步骤。$ h7 G1 B0 j4 ~/ E* S
1 [3 |0 L O |: x2 q" l4 s2理解K-means聚类% ^! ^/ |" c& y z! {" f/ ]4 t* F
Opencv 提供最有用的聚类算法是k-means,因为它会从一个没有标记的多维度数据集中搜寻预设的K个聚类结果。 3 [1 M2 g. n& n* X: a6 T; k0 f8 _' j8 t- b9 L7 O
它通过两个简单的假设来完成最佳聚类了。 $ d5 T0 j1 [- U" [) l O% V1 每个聚类中心都是属于该类别的所有数据点的算术平均值 * [+ |) D' a1 `( | s6 }1 B2 聚类中的每一个点相对其他聚类中心,更靠近本类别的中心。4 Y3 z) t/ T( A5 b! O
6 e" O! K) d9 d4 q$ J
2.1 实现第一个kmeans例子" z. @. u L3 V m7 `# G
首先,生成一个包含四个不同点集合的数据集。为了强调这是一个非监督的方法,我门在可视化将忽略哪些标签。使用matplotlib进行可视化。 : V2 i, R' @5 e' J % B$ L1 U/ D9 u' p" yimport matplotlib.pyplot as plt 0 U0 J2 J* `9 `, s& i6 `import pylab f2 |5 L1 e: `" w! C5 e- ^% `5 [0 cfrom sklearn.datasets._samples_generator import make_blobs, ~- \: F* [2 i2 H