数学建模社区-数学中国
标题:
【机器学习】无监督学习的概念,使用无监督学习发现数据的特点
[打印本页]
作者:
杨利霞
时间:
2022-9-14 16:37
标题:
【机器学习】无监督学习的概念,使用无监督学习发现数据的特点
【机器学习】无监督学习的概念,使用无监督学习发现数据的特点
! a1 M) `) b5 n# a
1 w# o1 Y. i# Z) B
到目前位置,我们主要把注意力集中在监督学习的问题上,数据集中的每个数据点都有一个已知的标签或者目标值。然而如果面对没有已知的输出结果,或者没有人监督学习算法,我们要怎么做。
+ ]% [" `; i Z5 P/ N+ B* z+ q
) l# c8 g- q2 q |: _. h
这就是无监督学习 。
, M9 ~+ Y: n1 c: C, K
) [) o5 D% P: V' `* B
在无监督、非监督学习中了,学习过程仅使用输入数据,没有更多的指导信息,要求从这些数据中提取知识。我们已经讨论了非监督学习众多形式的一种降维。另一个普及的领域就是聚类分析。他的目的是吧数据分为相似元素组成的不同区域中。
) u2 u' i- J* j+ b2 ~0 d
& E+ N( G. ?6 F6 T1 o3 T3 [ `. d2 N8 T& `
在本章中,我们想要理解不同的聚类算法如何从简单到,无标记的数据集中提取特征。这些结构特征,可以用于特征处理,图像处理,甚至是作为无监督学习任务的预处理步骤。
3 ]% u; \( r1 B, u* A+ q
作为一个具体的例子,我们将对图像进行聚类,将色彩空间降到16位数。
- J! w/ E2 f) d" `0 m2 t2 m, _( ~1 y" a
9 [& V, _ v+ ~6 o1 C/ e5 f0 o
解决的问题
% o- [3 ?5 e8 U' Q4 s6 ~) g3 [
1.K-means聚类和期望最大化是什么?如何在opencv中实现这些算法。
9 R3 `6 H0 M! k- p
2.如何在层次树中使用聚类算法。他带来的好处有哪些。
2 E! k0 G1 b8 x9 w4 w
3.如何使用无监督学习,进行预处理,图像处理,分类。
1 \( l' K$ E8 R4 k# x& p; K1 H
& b/ q+ `' A2 W. k: J7 K( m
1 理解无监督学习
. Q: ~ O7 j) X( {
无监督学习可能有很多形式,但是他们的目标总是把原始数据转化为更加丰富,更加有意义的表示,这么做可以让人们更容易理解,也可以更方便的使用机器学习算法进行解析。
- j3 {4 A/ D# P: C# e' s
无监督学习的应用包括一下应用:
+ {" G! |. D, ?6 }5 _+ n# ?: D
1降维:他接受一个许多特征的高维度数据表示,尝试对这些数据进行压缩,以使其主要特征,可以使用少量的携带高信息量的数据来表示。
4 F8 y& f6 U" U; S
2因子分析:用于找到导致被观察的到的数据的隐含因素或者未观察到的方面。
, e$ Z. P' |( Y" I2 C% b4 l/ x: e
3聚类分析:
0 S2 z6 {/ Q2 | @/ B7 j, E
尝试把数据分成相似元素组成的不同组。
* G3 N/ `3 }7 C e! L, P) H
7 r6 C8 `+ x4 u* V7 x+ s
无监督学习主要的挑战就是,如何确定一个算法是否出色,或者学习到什么有用内容,通常评估一个无监督学习算法结果的唯一方式是手动检查,并确定结果是否有意义。
$ g; n+ j" K$ z- s( `4 V& L
. H" f$ d4 _$ ^8 G' W: Z
话虽然如此,但是非监督学习,可以非常有,比如作为预处理或者特征提取的步骤。
' ]- H4 J3 k* P# v5 m5 c
0 {) D8 J3 E) M( U- M1 a4 |$ q
2理解K-means聚类
$ u3 d( \" J: p8 u
Opencv 提供最有用的聚类算法是k-means,因为它会从一个没有标记的多维度数据集中搜寻预设的K个聚类结果。
1 H0 }( `7 q2 \2 z: z5 t8 t
1 T( Q8 u8 J. Q& ^
它通过两个简单的假设来完成最佳聚类了。
; P! P# N+ {% W7 a# D% c0 R, ?# O
1 每个聚类中心都是属于该类别的所有数据点的算术平均值
! b& A" K2 e. L. F5 R4 E
2 聚类中的每一个点相对其他聚类中心,更靠近本类别的中心。
3 n# G9 Z8 g& _0 Z7 N. d# p
% s7 ~/ X1 `! `7 Q- l# z+ H$ r
2.1 实现第一个kmeans例子
* z( t. ~; ] j
首先,生成一个包含四个不同点集合的数据集。为了强调这是一个非监督的方法,我门在可视化将忽略哪些标签。使用matplotlib进行可视化。
: L/ A" q, _& }/ h7 e% L
* y% T. P5 L2 E; b0 U
import matplotlib.pyplot as plt
$ f! Y/ M/ N' P& C
import pylab
v7 Q2 t m" a: M
from sklearn.datasets._samples_generator import make_blobs
- J1 i; w2 N ?# _7 k& E
; K- _5 X) u2 l) [: s
plt.style.use('ggplot')
' A. T# Q1 P: N+ g: ^
x,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)
# h- y( u6 X1 h
plt.scatter(x[:,0],x[:,1],s=100)
- n7 _1 S+ W3 S1 A( ]
pylab.show()
+ P8 y2 |8 l: b" M! U; Y: Y
# @1 V6 _2 p I/ J1 r4 l- X
G# V0 I* E% p
1
: A3 k, p3 S0 V2 ?. Y0 S T
2
8 N1 [7 R3 v% E1 O* r0 n/ M6 X
3
# ^6 J( D! ?0 D. |. n4 W$ Q8 N
4
+ Z; P0 y5 A" K) r
5
, L6 k1 r* w2 M2 | m# G! a
6
% ?9 j! n1 r7 H7 y. J
7
& m0 i, T5 n5 F5 Q
8
8 N& M4 B% d# @, F
9
8 _9 b8 _0 O, G$ e" _; p5 G- _9 @
10
# z% s7 ^2 ?# f& E& S! s
; O2 h- O6 {6 ^! d$ \5 A
我们创建一个四个不同区域的聚类,centers=4,一共300节点。
) i0 n# k" c$ P
如上程序生成图像所示结果。
( H8 d: b$ ^/ o: [4 G2 ]" o& t s# g
尽管没有给数据分配目标标签,但直接使用肉眼还是可以看出来一共是四类。
+ S, g7 ]* z Q- A& a: u( `& t, g
kmeans就可以通过算法办到,无需任何关于目标的标签或者潜在的数据分布的信息。
: g3 ~% [$ _3 I' D
当然尽管,kmeans在opencv中是一个统计模型,不能调用api中的train和predict。相反,使用cv2.kmeans可以直接使用这个算法。。为了使用这个模型,我们需要指定一些参数,比如终止条件,和初始化标志。
' h; v1 K% g D8 f
! C0 z% P6 s+ C* ^6 \1 B% N
我们让算法误差小于1.0(cv2.TERM_CRITERIA_EPS),或者已经 执行了十次迭代(cv2.TERM_CITTERIA_MAX_ITER)时候终止。
$ O$ v' e$ k4 ~& D9 v
) o N8 k6 t& J& ~. j
; f" j2 R- V3 k7 L! J2 _. h
) A: |. y, A3 n
import matplotlib.pyplot as plt
) }4 o# j& T6 P' M% B4 ?
import pylab
5 `/ h+ r. d7 N' q E) H( B9 d/ V
from sklearn.datasets._samples_generator import make_blobs
& f+ E4 V! L9 k2 B+ A
import cv2
7 o' M9 u' X9 t6 |" ?- b
import numpy as np
( Y# i# G: M: C( u
& w2 [: M% b* p# E" T: a+ p
plt.style.use('ggplot')
9 q2 j/ c. R! p. c, Q
x,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)
* y$ Z1 E" q1 b/ G3 y
plt.scatter(x[:,0],x[:,1],s=100)
+ p. }4 n x+ A) K7 l
# L; L+ C2 c9 M% d) k1 J# e h8 H
! H+ [+ ^- j( f( J9 F5 a% D! b' _, o
criteria=(cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER,10,1.0)
! f! {- B+ `+ R
flags=cv2.KMEANS_RANDOM_CENTERS
; X- m% z0 j5 p; u- C7 p/ _
compactness,labels,centers=cv2.kmeans(x.astype(np.float32),4,None,criteria,10,flags)
) ^) F6 l0 p( G+ ~$ N( D
print(compactness)
) r$ E% l5 L, \( ^/ K
1 E! A3 c" N$ u1 v- W, D
plt.scatter(x[:,0],x[:,1],c=labels,s=50,cmap='viridis')
p- P0 e) T x
plt.scatter(centers[:,0],centers[:,1],c='black',s=200,alpha=0.5)
$ }, _* u. }! w. P* o4 m
8 A7 i" q8 z6 `; V% ?# s
pylab.show()
7 {1 ^( ^6 @' e
- q& Z3 X5 L+ B" H }+ `2 b
! C$ N9 `$ a; |0 Z0 R
* S* @9 V6 l. w! ^* \
3 H1 z6 i. \4 a: p
! w& a% X+ F6 P1 t$ v
7 K( t! Z* G+ B, A# u) f0 W3 f* f3 C
% [9 q/ e8 ]6 o" i6 c
1
]6 T& \, l1 `1 f& X" C7 {
2
& l; {1 Z+ q* C3 D
3
, |7 U5 h* S. x8 ^! ?
4
% h0 `) |. v. U0 ?3 I
5
. q9 D. J. n4 _! Z
6
& F; `2 X( q# G1 T0 n1 n* @
7
|5 Y3 H6 S6 [
8
. E. u7 j/ \5 B' z! _* T
9
% q) N' G. B$ s) {
10
: \; Z. _0 {( c. N
11
: p: @' d, b2 N. k6 t
12
0 U8 M, Q: z$ z. b0 W1 A3 j
13
6 Q/ K" ]- m t H7 Y
14
* T6 U* @0 @1 T" W- C, i0 @
15
6 e2 C/ B7 b- R! x% r2 C z: u
16
8 I2 G+ d# A2 Q b2 T
17
4 w: |7 h5 S, [" @) p) F
18
; _& o% |. \. |! k" K! C
19
2 k# h; V, N( F) w% B; U1 p9 Q& o
20
/ D1 r: e* o) k" Q! {
21
1 T1 q7 y5 d2 ~
22
! k4 j" s8 w0 I& k) \
23
& L* P( p3 ]! \' J
24
2 @8 o% ]* U! u/ x4 N" @* U
25
) A0 ]" H- R; M' }
26
! W. C% S+ K- m- g+ `5 g
上面程序结果可以产生图2的效果。
7 W( P4 _ D. Y. F2 s) S$ D
. l- L7 b9 h ~/ g7 U7 e! a2 L) d6 ?! C
print(compactness)这个变量,表示每个点到它聚类中心的距离平方和。较高紧凑都表明所有的点更靠近他们的聚类中心,较低 的紧凑度表明不同的聚类可能无法的很好区分。
' f! C( ^3 ]0 M) o
$ i* B7 J# h& l6 A$ t
当然,这个是非常依赖于x中的真实值。如果点与点之间最初的距离比较大,那我们就很难得到一个非常小的紧凑度。因此,把数据画出来,并按照聚类标签分配不同颜色,可以显示更多信息。
1 v9 j/ C3 j" z, b; U# {$ N
* Y- t2 [) q+ z4 k! O; X5 P
3理解kmeans
$ r% m6 v6 g4 |0 T
kmeans是聚类众多常见期望最大化中一个具体的例子。简单来说,算法处理的过程如下所示:
7 x# n* A" U- J8 K9 ^
1.从一些随机的聚类中心开始
/ E% `$ R, a+ z! X+ `) v; g: o
2.一种重复直到收敛
! q. c) f6 E' @1 K
& y8 o! m) q! c4 ~3 Z1 H7 Y' M
期望步骤:把所有的数据点分配到离他们最近的聚类中心。
0 `6 `8 Y) X1 C2 t; y
最大化步骤:通过取出聚类中所有点的平均来更新聚类中心。
( \! j3 x* _/ D) e$ H0 H1 @5 w
. W' J! U) B: M( |; x+ |, ^+ r' S) b: f
它涉及到一个定义聚类中心位置的适应性函数最大化的过程。对于kmeans最大化是计算一个聚类中所有数据点的算数平均得到。
( E1 W; f- a9 i# w1 V K7 w2 B! h
————————————————
8 X4 X0 f6 l# Z7 ] F. N$ |$ v
版权声明:本文为CSDN博主「紫钺-高山仰止」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
9 k/ P' L3 Z1 }0 d$ v# M) h' O
原文链接:https://blog.csdn.net/qq_43158059/article/details/126789000
2 e8 p- M6 `$ \% K
7 L% X2 q4 O I) I* L& [: @8 H! g
5 ]9 ~! f: K% o. f% S$ v8 C
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5