数学建模社区-数学中国

标题: 【机器学习】无监督学习的概念,使用无监督学习发现数据的特点 [打印本页]

作者: 杨利霞    时间: 2022-9-14 16:37
标题: 【机器学习】无监督学习的概念,使用无监督学习发现数据的特点
【机器学习】无监督学习的概念,使用无监督学习发现数据的特点5 Q, d& p9 D& V% T$ ~

2 F% O" L2 x1 p! K: D9 M到目前位置,我们主要把注意力集中在监督学习的问题上,数据集中的每个数据点都有一个已知的标签或者目标值。然而如果面对没有已知的输出结果,或者没有人监督学习算法,我们要怎么做。
* c8 a: r5 f( u. y; O$ P6 T+ G5 q2 T- C7 C5 l9 t
这就是无监督学习 。8 f9 Q& [+ E/ @$ k
1 _( F; u  B$ I- W. o! g
在无监督、非监督学习中了,学习过程仅使用输入数据,没有更多的指导信息,要求从这些数据中提取知识。我们已经讨论了非监督学习众多形式的一种降维。另一个普及的领域就是聚类分析。他的目的是吧数据分为相似元素组成的不同区域中。) X6 W# y/ z  ]% H; b$ J  }
3 S! r3 M2 h  H2 J
在本章中,我们想要理解不同的聚类算法如何从简单到,无标记的数据集中提取特征。这些结构特征,可以用于特征处理,图像处理,甚至是作为无监督学习任务的预处理步骤。
1 {" h1 _; W2 [$ v作为一个具体的例子,我们将对图像进行聚类,将色彩空间降到16位数。% x) \  w4 e$ K6 e

+ U! P! Z" y; b) k0 M+ r+ K解决的问题
9 K  o3 K2 A' ?/ H$ d0 Q8 G$ @1.K-means聚类和期望最大化是什么?如何在opencv中实现这些算法。; p+ f1 p4 Z* s1 M$ M4 r2 M. ?( R. `
2.如何在层次树中使用聚类算法。他带来的好处有哪些。7 c# {) L# j3 I* O$ J! e
3.如何使用无监督学习,进行预处理,图像处理,分类。
5 D( R, S: p3 I) H' H6 q$ V$ _( p4 Y
1 理解无监督学习% T9 L; ~/ m3 ?2 n$ q
无监督学习可能有很多形式,但是他们的目标总是把原始数据转化为更加丰富,更加有意义的表示,这么做可以让人们更容易理解,也可以更方便的使用机器学习算法进行解析。' e( d/ E# D- h& o3 W/ O
无监督学习的应用包括一下应用:6 T9 w6 @/ L& l% K
1降维:他接受一个许多特征的高维度数据表示,尝试对这些数据进行压缩,以使其主要特征,可以使用少量的携带高信息量的数据来表示。
2 o# X. k" ]4 ^5 {+ b2因子分析:用于找到导致被观察的到的数据的隐含因素或者未观察到的方面。) t4 J6 R; u& h- R" E6 X# w2 l
3聚类分析:
% g; \5 K: d% k4 k( [4 ^1 i尝试把数据分成相似元素组成的不同组。- P6 X# ?' g6 U' K9 Y9 t

. j4 j: a) L- E$ w1 ?  O9 T无监督学习主要的挑战就是,如何确定一个算法是否出色,或者学习到什么有用内容,通常评估一个无监督学习算法结果的唯一方式是手动检查,并确定结果是否有意义。
4 G) F3 E' e1 K8 l5 S; s$ S, C+ L* P( T( H7 v# b8 O
话虽然如此,但是非监督学习,可以非常有,比如作为预处理或者特征提取的步骤。* g% F2 p- o% i: v9 R
2 _9 I6 Z" b% E+ A
2理解K-means聚类# Z5 ^- Y3 n( }7 P5 g. z/ o
Opencv 提供最有用的聚类算法是k-means,因为它会从一个没有标记的多维度数据集中搜寻预设的K个聚类结果。+ d4 B3 S/ E- r7 t

, P8 z1 o$ Q2 }$ q% K; j: Z( c; u: t它通过两个简单的假设来完成最佳聚类了。$ ~. F. i( z0 m9 y' T9 Y
1 每个聚类中心都是属于该类别的所有数据点的算术平均值
8 ~" h/ ]  |8 U% A. U2 聚类中的每一个点相对其他聚类中心,更靠近本类别的中心。; P1 V& V' c# W. L0 o

4 x' s6 q0 e1 p3 t- ~6 Z, N/ P2.1 实现第一个kmeans例子
0 y2 C1 W! D2 V- B& {首先,生成一个包含四个不同点集合的数据集。为了强调这是一个非监督的方法,我门在可视化将忽略哪些标签。使用matplotlib进行可视化。: d$ L6 J: l: e  T
; \+ i% B- q1 p$ \
import matplotlib.pyplot as plt+ i( D+ H4 [/ N3 a8 |  j4 u
import pylab
3 h+ O7 `$ }( G/ j0 F7 c: W* T7 ^from sklearn.datasets._samples_generator import make_blobs$ T! t+ R" h$ T& g

& Q0 _) ^2 l" }2 O  ~9 o. a/ g1 u, oplt.style.use('ggplot')
) n  V# k4 A1 V' j5 }5 Mx,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)
% O+ i( |, m6 {+ Rplt.scatter(x[:,0],x[:,1],s=100)
6 e$ x$ K2 y, `! Rpylab.show()
2 Y$ j( w! p- v: r" j6 |6 t! \/ o! p2 g1 G7 H
' l( ?& b8 U1 [8 w8 b4 B$ E: `( b
1/ R! d" O- G5 S8 {6 q- [7 e: I
2! h9 [! T1 d- o8 D/ u6 y, I& k
39 A) S# e% L" s3 q* H
4
3 V- u! V# N5 K7 n+ s( r: s0 U+ W, H58 ]; T8 q& U  F& `% `0 w  X# @
6. M, v4 [( W! w# v
7- \7 W6 ?7 C7 k, d% c
8
7 d, A) z$ e& f( n9' y3 w$ e( k* {: J5 T
10
$ w1 v4 Y% P5 S' }& ?' F  G
5 |) B# W! U" D我们创建一个四个不同区域的聚类,centers=4,一共300节点。' o; W, K" ]0 J
如上程序生成图像所示结果。; \% Y" k9 Y5 J. ]
尽管没有给数据分配目标标签,但直接使用肉眼还是可以看出来一共是四类。/ [8 {0 y" w9 @* V. v7 X
kmeans就可以通过算法办到,无需任何关于目标的标签或者潜在的数据分布的信息。/ _. c$ H/ V% Y1 A% u/ f1 U
当然尽管,kmeans在opencv中是一个统计模型,不能调用api中的train和predict。相反,使用cv2.kmeans可以直接使用这个算法。。为了使用这个模型,我们需要指定一些参数,比如终止条件,和初始化标志。8 E3 V5 ~+ t1 |2 Z) i, _( B0 I% L
; v3 Z; s1 w, ?
我们让算法误差小于1.0(cv2.TERM_CRITERIA_EPS),或者已经 执行了十次迭代(cv2.TERM_CITTERIA_MAX_ITER)时候终止。4 {* H3 a9 ?6 F' x  v2 {9 C
& y% Q) j; T& Z8 D7 i

, Z0 d+ E) A1 E3 J0 A9 i
0 C7 Q  J: \: }, Q- \; w) `7 mimport matplotlib.pyplot as plt
9 m6 ~5 L; ?" U% H' B4 Z/ X' P! Yimport pylab
( ]4 [% ?9 O) M7 H) yfrom sklearn.datasets._samples_generator import make_blobs4 b( z8 E" D, f' ]& y- r
import cv2
4 Y4 F1 _% y( Z, }* @$ kimport numpy as np( Z! f2 g7 C: f* [! t1 o7 I! C
, t/ W  N) c, K- K4 A! C
plt.style.use('ggplot')/ f: h4 ~3 p8 A( R" I  A- e- w
x,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)0 ], @! o' J: D* T
plt.scatter(x[:,0],x[:,1],s=100); B- i( l. e4 i9 q2 ^: M
& c7 R' i! g: n: B' M, M
/ t7 j/ r- v5 ^8 P2 T1 L& F; U
criteria=(cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER,10,1.0)
6 h/ ]. z, z% x& ]& o. cflags=cv2.KMEANS_RANDOM_CENTERS
1 |, \1 _7 L% x& L) Q- U, U9 b$ Tcompactness,labels,centers=cv2.kmeans(x.astype(np.float32),4,None,criteria,10,flags)6 G4 r& h9 o, `) Q
print(compactness)* F7 ^' r  C/ y
1 u0 J( A) I. ~2 V) I
plt.scatter(x[:,0],x[:,1],c=labels,s=50,cmap='viridis')
) q- B' B  Q$ j* r& {2 gplt.scatter(centers[:,0],centers[:,1],c='black',s=200,alpha=0.5)# @5 P8 h- N- k$ f, U
* u7 @( k% }! P1 r
pylab.show()
5 s$ ~. D& x2 r6 [5 d, k3 I- E& ^" t8 O
" C/ t+ C+ ^( s) B5 e
% R# u  P; ]% p4 n

  L, O1 [# V9 q( g
: K& u7 w2 O% O9 G/ z
  N- F& z7 e" m5 B7 ^0 r
  V& K# v+ O  S1* F8 n/ {+ _. V9 n
2
/ h- Q3 u: r: [- b" h% i" k32 L' k+ V9 `$ V  \! H8 r
4
( ~5 y- y, N" Z: ]6 p) d9 y5, k6 J: i6 K. I* y  }' g
6
- O( Q7 B& m0 Y. A( F75 C0 K' d( R- I2 |( n9 Z
8
8 x# u$ _$ t, L2 _, n  {8 r95 r' Z' R% \) m: b8 J+ H, h' ]2 G0 d
102 b8 \: K8 |3 ~) Q" {
11
7 k% `/ K, h2 \- U  ?. y12" M: h. V1 ~6 M% r
13) H# y, Q2 a- N- u1 y
14, Y1 z3 r' n1 P2 B: @
15' q0 S( m" W3 D" h
16
0 t; ]# o: U8 }) s5 J" f* u170 X1 l" _; m( W6 w( K3 w8 c6 I
18' @5 X+ G2 s5 _4 s! h7 m& f
19
0 c8 E0 Q  _( r7 s6 K20  }4 s  I% _( g* }% D$ q. p, u7 e" {
21
8 {& X, {1 g% y2 O22  L& I' V2 u" @; U
23( L9 i4 `' ], v; a* {" S$ v5 e, c
24
7 e+ r. n" s! J) D3 w25
0 F) F6 n, u: {' Y; q9 n268 B# `2 Y. x4 Q( A
上面程序结果可以产生图2的效果。; D# f( O- T, h1 ~5 s$ \2 H  l! E
, h7 {0 W& P$ Y  E( y6 U9 J7 s
print(compactness)这个变量,表示每个点到它聚类中心的距离平方和。较高紧凑都表明所有的点更靠近他们的聚类中心,较低 的紧凑度表明不同的聚类可能无法的很好区分。
3 e8 Q: Q* V1 F
; N. f: J9 ]' M* I& i当然,这个是非常依赖于x中的真实值。如果点与点之间最初的距离比较大,那我们就很难得到一个非常小的紧凑度。因此,把数据画出来,并按照聚类标签分配不同颜色,可以显示更多信息。" u8 m5 l1 b, X
3 b. l' F, j! T+ R6 [+ P0 U
3理解kmeans. M; n' J# D% I8 @
kmeans是聚类众多常见期望最大化中一个具体的例子。简单来说,算法处理的过程如下所示:
# l( L1 Y7 t0 j( y6 j3 [1.从一些随机的聚类中心开始
0 J( Z- E% d8 }/ e. K2.一种重复直到收敛% M4 D) u- a! i+ w: h+ W0 Y9 t
" W) X+ x0 T- ^4 J0 W& B
期望步骤:把所有的数据点分配到离他们最近的聚类中心。9 S: F$ B! v7 @; Y
最大化步骤:通过取出聚类中所有点的平均来更新聚类中心。  z1 f6 {2 m( n* y
& v: i0 M& \( N- Z7 w3 u0 B2 h7 a
它涉及到一个定义聚类中心位置的适应性函数最大化的过程。对于kmeans最大化是计算一个聚类中所有数据点的算数平均得到。, j" q! i' w, W- ?
————————————————
+ I9 `3 l/ F; |2 p' O6 P  d版权声明:本文为CSDN博主「紫钺-高山仰止」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。4 ?. w; c! V3 Y
原文链接:https://blog.csdn.net/qq_43158059/article/details/126789000  d% Y' g% ?: B: u5 p

+ H8 l6 a' L8 M" s2 `0 L6 `2 F% x% g9 z: E0 Y/ R  ~0 D- I4 R0 x





欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5