数学建模社区-数学中国

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

作者: 杨利霞    时间: 2022-9-14 16:37
标题: 【机器学习】无监督学习的概念,使用无监督学习发现数据的特点
【机器学习】无监督学习的概念,使用无监督学习发现数据的特点
% g  R+ T) b: m* o+ c/ J( h4 A5 [! Y" M) N8 c( D
到目前位置,我们主要把注意力集中在监督学习的问题上,数据集中的每个数据点都有一个已知的标签或者目标值。然而如果面对没有已知的输出结果,或者没有人监督学习算法,我们要怎么做。6 ?/ F6 ]. n' \& F( W7 k
8 L! i( j# o, ~; Q/ Q" K
这就是无监督学习 。
  g4 q( i( Z+ \0 W  r, E0 s3 P; C  R4 h$ j1 O& M
在无监督、非监督学习中了,学习过程仅使用输入数据,没有更多的指导信息,要求从这些数据中提取知识。我们已经讨论了非监督学习众多形式的一种降维。另一个普及的领域就是聚类分析。他的目的是吧数据分为相似元素组成的不同区域中。
3 _+ E0 W# [( _, g( }7 T/ h; X
0 A1 K4 O/ G0 B$ k+ C在本章中,我们想要理解不同的聚类算法如何从简单到,无标记的数据集中提取特征。这些结构特征,可以用于特征处理,图像处理,甚至是作为无监督学习任务的预处理步骤。- Z1 A, ~* m/ g3 j9 E. F
作为一个具体的例子,我们将对图像进行聚类,将色彩空间降到16位数。& y" L' p! P6 e* t: j+ p
/ ~0 x. m( v% V) ^8 Z) ~
解决的问题1 S; R' B0 x% f$ F& d7 A8 R' A; K
1.K-means聚类和期望最大化是什么?如何在opencv中实现这些算法。
" B' O% \8 r2 t. l% v4 G/ _& ?2.如何在层次树中使用聚类算法。他带来的好处有哪些。  w+ e. {* Z6 e. b- w1 \0 B) v
3.如何使用无监督学习,进行预处理,图像处理,分类。
& g2 Y% q* S2 H6 l& g( q: h" n* |( D9 D$ a) P
1 理解无监督学习
. H. _8 n: U7 @5 a& m6 p8 ~无监督学习可能有很多形式,但是他们的目标总是把原始数据转化为更加丰富,更加有意义的表示,这么做可以让人们更容易理解,也可以更方便的使用机器学习算法进行解析。
5 G' E2 O4 z. H4 W0 I无监督学习的应用包括一下应用:
6 T3 O) H2 o- o  N1降维:他接受一个许多特征的高维度数据表示,尝试对这些数据进行压缩,以使其主要特征,可以使用少量的携带高信息量的数据来表示。6 z6 J# Z' W/ @
2因子分析:用于找到导致被观察的到的数据的隐含因素或者未观察到的方面。
4 s' e3 Y- o! Y8 b8 C# \* Q3聚类分析:
' t& ~2 h( `) I+ G7 x. [尝试把数据分成相似元素组成的不同组。
* v5 I$ a: m& J4 X; M* E2 u4 x6 Y" Z% c+ W5 b3 m  Y1 n
无监督学习主要的挑战就是,如何确定一个算法是否出色,或者学习到什么有用内容,通常评估一个无监督学习算法结果的唯一方式是手动检查,并确定结果是否有意义。1 P  B+ O6 N; j

6 J5 q) d# a; m: U4 e* H% b话虽然如此,但是非监督学习,可以非常有,比如作为预处理或者特征提取的步骤。0 d* O& y3 g: Y1 r' I

7 \- a1 l" b( ]1 g; D2理解K-means聚类; x/ `/ }5 @; |$ A( [; z' {
Opencv 提供最有用的聚类算法是k-means,因为它会从一个没有标记的多维度数据集中搜寻预设的K个聚类结果。! O; C, o4 j. k( D9 U

  L! \$ `) l# S) e: R3 b+ |它通过两个简单的假设来完成最佳聚类了。
9 W0 g! Y7 I: k4 \1 每个聚类中心都是属于该类别的所有数据点的算术平均值
3 Q; |$ T4 W9 R% ^0 d2 聚类中的每一个点相对其他聚类中心,更靠近本类别的中心。6 ]- b7 ?' H# J: L  S0 l, A

, V' Y2 {# c# f" |( l- a- F7 A2.1 实现第一个kmeans例子# D8 q6 W- Z) x2 y3 Q, N2 M. z
首先,生成一个包含四个不同点集合的数据集。为了强调这是一个非监督的方法,我门在可视化将忽略哪些标签。使用matplotlib进行可视化。
7 ?7 F" P7 C1 S! E" Y, N
. {& G' x* O: {import matplotlib.pyplot as plt
9 W+ B1 ~7 z* l6 o0 m+ N7 Nimport pylab
8 w# K* @; z/ J% Ifrom sklearn.datasets._samples_generator import make_blobs, M1 ^* _" X9 m! s2 h- j

" q: o* |, z! L# @) |. M* kplt.style.use('ggplot')& M0 Z" Z4 g6 d( j8 q, s6 l
x,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)
2 m; J' [/ V9 V+ y6 Eplt.scatter(x[:,0],x[:,1],s=100)% O6 M1 ~" D3 t) R
pylab.show()$ p7 T' X6 B$ N/ S) _& l+ ?( `/ ~: _
$ R  S% [2 M/ l" P) }; q( {

2 p4 w$ _, ~: z) d8 _1
# ?) T9 x+ w! d! X7 I& L2
; o  q6 I4 m. `  j; @7 K1 w3
- U; A# p! Y4 i) {% b. h1 J  b40 \: y8 Z% {: D. R1 U. d
5& m' x5 H6 a! W, B  t! [- R6 K
6) d. `4 Z% F; ~
7
; M& ?9 h: @; d* W6 k8
6 F0 C# k( w( K3 e" N+ v5 p5 m( F2 p* r96 y: q4 ~7 m8 i9 _0 f& I# S
10
2 x. V8 |( Z. }1 A/ [+ A& b* H& X, t% P/ B2 ~
我们创建一个四个不同区域的聚类,centers=4,一共300节点。
, F  p3 b3 Z7 y1 v5 N5 P/ g如上程序生成图像所示结果。, c/ r/ `7 T( V; D
尽管没有给数据分配目标标签,但直接使用肉眼还是可以看出来一共是四类。
% a' Q6 C8 a3 \& Q" H* i: Vkmeans就可以通过算法办到,无需任何关于目标的标签或者潜在的数据分布的信息。
9 _  _9 Q. c7 r$ u0 `' u当然尽管,kmeans在opencv中是一个统计模型,不能调用api中的train和predict。相反,使用cv2.kmeans可以直接使用这个算法。。为了使用这个模型,我们需要指定一些参数,比如终止条件,和初始化标志。; g6 W; o5 R# k' ?

! Y* _9 z; Q- g* _. W0 U# |我们让算法误差小于1.0(cv2.TERM_CRITERIA_EPS),或者已经 执行了十次迭代(cv2.TERM_CITTERIA_MAX_ITER)时候终止。
0 n) Q' u& X7 N2 M, C; x  Z" j
; h1 O0 I& a3 k- Q
$ t1 L6 ~" J  ^$ J& V! q0 r+ z" E- X4 G* e
import matplotlib.pyplot as plt! v+ E' p1 ?7 @) U: G7 O
import pylab0 Z" P* s" b6 D' F5 m
from sklearn.datasets._samples_generator import make_blobs
8 ?; n1 x+ U4 F# g7 M0 Fimport cv22 w# \+ J' e/ P" j, F
import numpy as np
& S3 ?& R6 M9 L; {: Y; m; L
8 l& M* s+ J% _: }# E% y: Aplt.style.use('ggplot')
6 a. n. K3 p; ]+ U5 Lx,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)8 c' Q% O, u6 I
plt.scatter(x[:,0],x[:,1],s=100)* ~9 t) s1 T$ p$ A- o5 n
" j5 J4 L8 K' _8 B7 e

; u$ |8 G( X  T; x3 W7 ^2 Q7 ^criteria=(cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER,10,1.0)' T) S$ p6 x; @7 F. {& C/ G
flags=cv2.KMEANS_RANDOM_CENTERS
6 D7 }# Z$ ^- ]. ~/ L* R. B3 d3 \1 Vcompactness,labels,centers=cv2.kmeans(x.astype(np.float32),4,None,criteria,10,flags). k, W  ?' w6 [$ I0 `- R- Z( S
print(compactness)) F4 H/ f: O. I1 `" H$ h* h

% N7 F- j) J: A% Rplt.scatter(x[:,0],x[:,1],c=labels,s=50,cmap='viridis')
- c+ M2 E/ P; v, f" yplt.scatter(centers[:,0],centers[:,1],c='black',s=200,alpha=0.5)$ C) _5 i- n$ h1 T+ H

$ ^; D4 X- q) z: V# z7 Opylab.show()
( t( o+ o9 Z' ~1 ]
) j4 J' F7 w8 Y" e& ?8 Q4 F( `+ b- e! g0 L' W, d
! P) c9 b, ?! ?2 V. w$ E* y2 l
. y/ {. E! f3 ]  _/ K. h

2 l6 V" B4 T; ]7 o1 o% m+ S; i' @; z: x
9 d- p7 J8 r) D$ J  g
1
; ?+ d% m0 L) s" D2- G$ R7 s' l/ G( B3 B0 @/ S
3  a6 t: h( |4 P" l; H
45 X3 _8 _! o' p
5
% `/ R4 W  S4 Q, ]9 z6
* v& e3 B: i* ~5 S+ o7
7 {% _+ e. C9 y8
0 W2 y3 |2 \+ E; a" W- d( ?2 y( [4 v& r6 I9/ ^# [9 j4 n0 t; w* H# ?- v: ~/ I
10
$ n+ D7 h+ Z, R& `11( b2 H" I4 Y7 ?
12
/ }$ p$ i& L$ U13& R- F6 k7 X; f5 T  n+ c
14$ E6 o9 H7 z( N6 i6 W6 b
15
7 x( J, P! L; M16
! r3 k2 K  T3 d. v17% _% O. r; {! V; A' G
18+ x* ^- E/ y, u  v
19
4 P7 P" |1 B1 E/ p20
; D$ k! Q1 C2 |5 Y* F2 F: c9 a21
/ z" A3 ~. _* @# G+ e3 ?1 L22
" {# }+ L% O+ i( |23
" ?- T6 p+ d5 \+ C0 L% a7 Q+ o24, o" k! i- u& b' ?' C- z/ M) a4 {
25
# Q5 P1 ]% a  }" n2 y26
% |; ~* z- T$ {. N, k上面程序结果可以产生图2的效果。
, w8 U+ W& A$ R1 C% c- U2 n
% D7 D% `: I8 ?% a2 d6 pprint(compactness)这个变量,表示每个点到它聚类中心的距离平方和。较高紧凑都表明所有的点更靠近他们的聚类中心,较低 的紧凑度表明不同的聚类可能无法的很好区分。
0 O2 i" @0 ]2 _4 s' p. \8 |: g4 s3 ~. Q+ _
当然,这个是非常依赖于x中的真实值。如果点与点之间最初的距离比较大,那我们就很难得到一个非常小的紧凑度。因此,把数据画出来,并按照聚类标签分配不同颜色,可以显示更多信息。; g  N0 ]& r3 m& J) q

* ~& e: `% i8 Z. e! [/ C6 M& \( W3 W3理解kmeans
9 O5 [' _4 ]: X$ C2 i6 Y- J! jkmeans是聚类众多常见期望最大化中一个具体的例子。简单来说,算法处理的过程如下所示:* n$ A" j% y) {) ?- q+ Q! l8 v
1.从一些随机的聚类中心开始$ Z" J0 F8 w5 b6 o" G1 Z! @
2.一种重复直到收敛  {: I; y+ @% C7 G/ |' T  H2 w
5 a+ Y% P7 K3 a0 s! ]" Z" a4 r
期望步骤:把所有的数据点分配到离他们最近的聚类中心。
6 H8 ]( w0 G& u( @最大化步骤:通过取出聚类中所有点的平均来更新聚类中心。" ]8 k2 W# e# c: D/ ~1 D3 L% G3 A9 E
. [5 N% M, ^5 c- @" f* m% G2 W
它涉及到一个定义聚类中心位置的适应性函数最大化的过程。对于kmeans最大化是计算一个聚类中所有数据点的算数平均得到。2 x/ V* M+ v3 q$ b
————————————————/ D; i0 N; e5 F9 G# d* o/ k
版权声明:本文为CSDN博主「紫钺-高山仰止」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。  D, {: I' i7 b( ^, I- M
原文链接:https://blog.csdn.net/qq_43158059/article/details/126789000
4 |7 }& g- ~0 e( y. ?
+ a" L4 h. R0 c" A& @
9 t2 K+ g* ?& c9 g0 h




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