数学建模社区-数学中国
标题:
【机器学习】无监督学习的概念,使用无监督学习发现数据的特点
[打印本页]
作者:
杨利霞
时间:
2022-9-14 16:37
标题:
【机器学习】无监督学习的概念,使用无监督学习发现数据的特点
【机器学习】无监督学习的概念,使用无监督学习发现数据的特点
F' Y2 I" k8 U% U" a! f/ Z* ]
# x2 c& G9 z, \3 b5 U
到目前位置,我们主要把注意力集中在监督学习的问题上,数据集中的每个数据点都有一个已知的标签或者目标值。然而如果面对没有已知的输出结果,或者没有人监督学习算法,我们要怎么做。
) o+ w0 u8 j/ t N; l% a% B/ f
. e2 x' O* Z* l+ J
这就是无监督学习 。
% ?1 w! x% I4 M6 ~/ L6 s
% ]& G' U1 b9 u( k& e' P
在无监督、非监督学习中了,学习过程仅使用输入数据,没有更多的指导信息,要求从这些数据中提取知识。我们已经讨论了非监督学习众多形式的一种降维。另一个普及的领域就是聚类分析。他的目的是吧数据分为相似元素组成的不同区域中。
Z7 v" y* m" \; v
# W- T8 ^$ ~& i/ Y( \! ]$ R/ B
在本章中,我们想要理解不同的聚类算法如何从简单到,无标记的数据集中提取特征。这些结构特征,可以用于特征处理,图像处理,甚至是作为无监督学习任务的预处理步骤。
: b4 U& c1 P, E
作为一个具体的例子,我们将对图像进行聚类,将色彩空间降到16位数。
& D3 K8 b! z9 o2 B" P( \2 M
- W8 \* \8 n7 J4 ]1 W
解决的问题
7 X/ U! Z7 f! E) _4 p
1.K-means聚类和期望最大化是什么?如何在opencv中实现这些算法。
# i5 V2 H# R% ~4 R5 e
2.如何在层次树中使用聚类算法。他带来的好处有哪些。
) ~1 c% W% X) |$ g4 t1 F* z
3.如何使用无监督学习,进行预处理,图像处理,分类。
) ]4 J, `5 R% Y- ]8 H8 a
; D, z W4 d* y! q* u/ B1 O
1 理解无监督学习
. r* {2 m6 T U2 s
无监督学习可能有很多形式,但是他们的目标总是把原始数据转化为更加丰富,更加有意义的表示,这么做可以让人们更容易理解,也可以更方便的使用机器学习算法进行解析。
2 M% f- n+ V0 m, x Q
无监督学习的应用包括一下应用:
& d$ _0 e2 u" R, G
1降维:他接受一个许多特征的高维度数据表示,尝试对这些数据进行压缩,以使其主要特征,可以使用少量的携带高信息量的数据来表示。
! R& d( `! k3 |5 C" M3 N! u- a6 P
2因子分析:用于找到导致被观察的到的数据的隐含因素或者未观察到的方面。
; Q, Z9 C3 O; v! S5 Z$ |; g, a& w
3聚类分析:
7 L$ [( i6 \$ ]$ z O+ [
尝试把数据分成相似元素组成的不同组。
: K! p- F# E+ m: E+ a8 p5 G
7 [/ b1 E3 N! t; h& t: M
无监督学习主要的挑战就是,如何确定一个算法是否出色,或者学习到什么有用内容,通常评估一个无监督学习算法结果的唯一方式是手动检查,并确定结果是否有意义。
1 U, l5 q2 a9 j" ]1 A) r
$ A1 Z! m j( `( Q
话虽然如此,但是非监督学习,可以非常有,比如作为预处理或者特征提取的步骤。
" F, s2 z( ~( p6 k5 k4 p
$ y& m, `, ~6 N, O9 Z
2理解K-means聚类
7 C% p" m$ _. B0 D* I! j
Opencv 提供最有用的聚类算法是k-means,因为它会从一个没有标记的多维度数据集中搜寻预设的K个聚类结果。
% O/ C4 Z2 v9 j$ Y) F$ c
, O7 {6 e5 g0 C3 u0 w
它通过两个简单的假设来完成最佳聚类了。
+ e4 q4 D& y3 I \6 j( f7 T8 J
1 每个聚类中心都是属于该类别的所有数据点的算术平均值
( W e1 H6 S* j/ ]( [) s* M; r
2 聚类中的每一个点相对其他聚类中心,更靠近本类别的中心。
# C# g" _. g$ M7 O" z
" _. M* K k. m1 E/ {
2.1 实现第一个kmeans例子
3 Y/ T- j+ u9 Z6 o. E( G1 \9 R
首先,生成一个包含四个不同点集合的数据集。为了强调这是一个非监督的方法,我门在可视化将忽略哪些标签。使用matplotlib进行可视化。
: z- m1 Q+ c! v' L/ @" m. l, k
f2 m: y# ~4 k
import matplotlib.pyplot as plt
$ H, y, W& l* ^& T0 o& C
import pylab
* M6 b7 Y& U+ H2 s; z
from sklearn.datasets._samples_generator import make_blobs
7 @% Q: H# I0 n2 Z
5 F" K9 X; F( y2 C1 p8 U, f
plt.style.use('ggplot')
) o2 ~" n1 \$ Z% Z
x,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)
& H7 ^1 }& k: W0 \5 ^6 P/ W
plt.scatter(x[:,0],x[:,1],s=100)
1 G( N' f% \8 Z: q) y" ~
pylab.show()
% |# f! M( H$ i; t9 [; k
4 ]# T$ X" e) P1 T- S
( I& ]. N0 t1 b% r, G' r
1
! S- `) N+ F+ x0 ] k
2
+ \7 X' C; W* Y6 ]' c$ b9 ]6 P2 W
3
7 K+ ]5 m* Y0 t( t: z7 B: u
4
% L: ~6 Z2 h$ ?5 m
5
9 o3 K$ @! `) X) ~
6
( V0 |3 m' e1 d+ z
7
; V1 P) L' W: ? H2 e
8
2 C7 |4 S( p* |' `& ?
9
9 D3 J" I3 h8 f, q# Q9 s: R
10
/ {6 T0 {8 L* ~8 G0 K$ J
1 \4 @* R5 T' y
我们创建一个四个不同区域的聚类,centers=4,一共300节点。
0 S. f! ?" X- I7 ^: S2 {# G
如上程序生成图像所示结果。
, q' v8 a; d+ }, T, g- t0 ~. I
尽管没有给数据分配目标标签,但直接使用肉眼还是可以看出来一共是四类。
|& Y: D0 e. Z, G9 U
kmeans就可以通过算法办到,无需任何关于目标的标签或者潜在的数据分布的信息。
9 y4 a6 Q# l) O% P
当然尽管,kmeans在opencv中是一个统计模型,不能调用api中的train和predict。相反,使用cv2.kmeans可以直接使用这个算法。。为了使用这个模型,我们需要指定一些参数,比如终止条件,和初始化标志。
. Y3 }$ P7 r. E
+ u3 u. G7 P, e( E6 \+ d
我们让算法误差小于1.0(cv2.TERM_CRITERIA_EPS),或者已经 执行了十次迭代(cv2.TERM_CITTERIA_MAX_ITER)时候终止。
$ e2 Y. X2 z0 V) n( D. z, a# i
% P9 i- J/ O/ ~& r: U$ y* J4 C
" d( }" I4 r9 T$ Y& m# B
1 E4 W% s. P1 s& d$ A7 _# g
import matplotlib.pyplot as plt
3 E, Q1 ?, S: E; k
import pylab
# D E# A; h& d# G' V
from sklearn.datasets._samples_generator import make_blobs
* l9 p# k9 L: E r
import cv2
) u9 l3 {; U5 ]7 c4 @
import numpy as np
; L7 {; x, q: W3 T; i
) ?4 ]3 k: c/ ]( H% |4 v
plt.style.use('ggplot')
( [. s- c; u3 @" _% X1 R' P
x,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)
, u% t+ s# ]8 `, `9 P
plt.scatter(x[:,0],x[:,1],s=100)
' ~0 l2 k- n- S7 c
6 i. J# l- ^5 O2 Y
" w' j# f, u. f9 O9 o
criteria=(cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER,10,1.0)
, {/ D, C* T% N8 B3 @3 g0 B: j7 r4 x
flags=cv2.KMEANS_RANDOM_CENTERS
+ f" _4 t2 u- o8 X5 h
compactness,labels,centers=cv2.kmeans(x.astype(np.float32),4,None,criteria,10,flags)
' I/ ^( W' f) w% c; f
print(compactness)
' h! E0 r& \, `" @9 H+ ?- Z$ G! E
7 u8 p p+ p$ l ] n4 O
plt.scatter(x[:,0],x[:,1],c=labels,s=50,cmap='viridis')
; B* y3 _/ e5 I
plt.scatter(centers[:,0],centers[:,1],c='black',s=200,alpha=0.5)
' P! o, P6 j6 e/ y& j& `5 g
% I M- m4 z6 S. s2 z& M' _/ s
pylab.show()
1 L4 a# S2 J6 H; ]' N
4 I/ A' j5 e" P: {
, r5 [$ j/ C$ M; C1 a
* r) W1 Z) x( Y. B
- K# u8 G I; S; Y1 Y
: |/ ^) P8 b4 a4 G% G
: x4 q" ?. b$ M; i" @
: Z) g; y% X. ^2 m/ j
1
X5 [' h& v6 t+ f
2
8 P1 t% a! H: Z: I$ x' i- |' E
3
# r- T6 q& n% T8 q0 a
4
0 L& d+ x: R4 j
5
6 o! `8 J: e. |/ r6 |
6
' u" Y) m8 L& O& Z; x, P" u! J" j
7
0 F1 W# ?# Y p! z- v6 @
8
9 j9 l; R9 X+ b6 w7 |
9
0 ?& w3 X3 T/ T/ I% N3 J( o, K m
10
0 g' W7 y( z: s, _4 J" T) W
11
2 D, I( w' W& } [+ x
12
" E( s9 C R5 |
13
0 C+ e# |9 n3 u$ C" g, y
14
2 N& q6 o/ H& w/ r
15
( X- l* X. X- n% W/ A% _
16
, z7 v) B$ ?$ I: A, t" W! B
17
' t& M, N( n5 n' l" K! H' `9 J5 S. [
18
4 w: Z, p# k4 O8 i
19
9 m# R( @5 a2 r8 p
20
$ {; k6 A# S3 W, L+ Z7 U+ Y
21
: o$ m9 s$ g7 F' n6 w* |# R
22
5 h7 R( b: v! S; R, F2 I @
23
8 r, ^1 S4 L7 ]& _
24
- j; X X( V8 R1 P7 b& N7 V' K
25
. H. \; ^: s/ d+ B/ I' ]4 h4 Y
26
v6 ^" v, V" S8 n4 W
上面程序结果可以产生图2的效果。
" g1 ~$ W( r5 o) r2 E$ Q) b
( A* N; l$ e1 ]7 K2 N
print(compactness)这个变量,表示每个点到它聚类中心的距离平方和。较高紧凑都表明所有的点更靠近他们的聚类中心,较低 的紧凑度表明不同的聚类可能无法的很好区分。
! a4 Q3 {! @& o7 v. @( b* N
: U+ Q6 P! b2 ?8 d# l+ k9 r
当然,这个是非常依赖于x中的真实值。如果点与点之间最初的距离比较大,那我们就很难得到一个非常小的紧凑度。因此,把数据画出来,并按照聚类标签分配不同颜色,可以显示更多信息。
! d8 x3 I' J, h, ]) a; p' _
* B6 h! X( h4 O+ S \
3理解kmeans
4 ]( y! j3 W* u, M8 Y' r4 g( e+ k
kmeans是聚类众多常见期望最大化中一个具体的例子。简单来说,算法处理的过程如下所示:
+ i- x$ r. S2 W$ [
1.从一些随机的聚类中心开始
+ j6 I. |/ X$ v: t
2.一种重复直到收敛
! V" x+ A u, z7 \& e+ Z
' ]# Z$ y; h. ?9 B- r; C& e
期望步骤:把所有的数据点分配到离他们最近的聚类中心。
7 c, P8 S' W$ O D2 Z* ]- J3 ?8 j" J
最大化步骤:通过取出聚类中所有点的平均来更新聚类中心。
7 ?3 a7 W8 ]" A2 ~' x- ?% Q0 q
5 C5 L/ x5 j( J& \6 n# \
它涉及到一个定义聚类中心位置的适应性函数最大化的过程。对于kmeans最大化是计算一个聚类中所有数据点的算数平均得到。
( Y/ b; Q; l4 F* M' U, S: U
————————————————
3 V1 ~7 U1 ? @9 U, }9 B1 \( s
版权声明:本文为CSDN博主「紫钺-高山仰止」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
- i! w* b; R$ B3 I* g
原文链接:https://blog.csdn.net/qq_43158059/article/details/126789000
5 s: Y& j& G6 Q% }
. }* y j. C' J: n0 O2 W' e( c
" A% p+ Q/ w+ q' ^# F7 s
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5