数学建模社区-数学中国
标题:
【机器学习】无监督学习的概念,使用无监督学习发现数据的特点
[打印本页]
作者:
杨利霞
时间:
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 {+ b
2因子分析:用于找到导致被观察的到的数据的隐含因素或者未观察到的方面。
) 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. U
2 聚类中的每一个点相对其他聚类中心,更靠近本类别的中心。
; P1 V& V' c# W. L0 o
4 x' s6 q0 e1 p3 t- ~6 Z, N/ P
2.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, o
plt.style.use('ggplot')
) n V# k4 A1 V' j5 }5 M
x,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)
% O+ i( |, m6 {+ R
plt.scatter(x[:,0],x[:,1],s=100)
6 e$ x$ K2 y, `! R
pylab.show()
2 Y$ j( w! p- v: r" j
6 |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
3
9 A) S# e% L" s3 q* H
4
3 V- u! V# N5 K7 n+ s( r: s0 U+ W, H
5
8 ]; 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( n
9
' 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 m
import matplotlib.pyplot as plt
9 m6 ~5 L; ?" U% H' B4 Z/ X' P! Y
import pylab
( ]4 [% ?9 O) M7 H) y
from sklearn.datasets._samples_generator import make_blobs
4 b( z8 E" D, f' ]& y- r
import cv2
4 Y4 F1 _% y( Z, }* @$ k
import 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. c
flags=cv2.KMEANS_RANDOM_CENTERS
1 |, \1 _7 L% x& L) Q- U, U9 b$ T
compactness,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 g
plt.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, k
3 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 S
1
* F8 n/ {+ _. V9 n
2
/ h- Q3 u: r: [- b" h% i" k
3
2 L' k+ V9 `$ V \! H8 r
4
( ~5 y- y, N" Z: ]6 p) d9 y
5
, k6 J: i6 K. I* y }' g
6
- O( Q7 B& m0 Y. A( F
7
5 C0 K' d( R- I2 |( n9 Z
8
8 x# u$ _$ t, L2 _, n {8 r
9
5 r' Z' R% \) m: b8 J+ H, h' ]2 G0 d
10
2 b8 \: K8 |3 ~) Q" {
11
7 k% `/ K, h2 \- U ?. y
12
" 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* u
17
0 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 K
20
}4 s I% _( g* }% D$ q. p, u7 e" {
21
8 {& X, {1 g% y2 O
22
L& I' V2 u" @; U
23
( L9 i4 `' ], v; a* {" S$ v5 e, c
24
7 e+ r. n" s! J) D3 w
25
0 F) F6 n, u: {' Y; q9 n
26
8 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. K
2.一种重复直到收敛
% 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 L
6 `2 F% x% g9 z: E0 Y/ R ~0 D- I4 R0 x
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5