- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 565170 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 174774
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 3
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
|---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
【机器学习】无监督学习的概念,使用无监督学习发现数据的特点
1 J! c2 r$ Q7 @9 o
) x% d6 T# Q# w0 `4 J, Q( i' W( m+ l到目前位置,我们主要把注意力集中在监督学习的问题上,数据集中的每个数据点都有一个已知的标签或者目标值。然而如果面对没有已知的输出结果,或者没有人监督学习算法,我们要怎么做。) b% ?" N* d- K% ~9 Z5 K
; e& ?, C) y6 s0 H. {5 X9 Z Q
这就是无监督学习 。. p$ r6 `& W ]. g* q8 k- c3 D
6 Q1 e$ ~1 r6 a9 I" z7 [4 k在无监督、非监督学习中了,学习过程仅使用输入数据,没有更多的指导信息,要求从这些数据中提取知识。我们已经讨论了非监督学习众多形式的一种降维。另一个普及的领域就是聚类分析。他的目的是吧数据分为相似元素组成的不同区域中。
! _1 B0 u; u& R5 E7 S. s+ P/ Q9 v' T& T7 a) y" _/ {) i& V e x; h
在本章中,我们想要理解不同的聚类算法如何从简单到,无标记的数据集中提取特征。这些结构特征,可以用于特征处理,图像处理,甚至是作为无监督学习任务的预处理步骤。! t' h7 X7 K2 m* k( X: @( u G
作为一个具体的例子,我们将对图像进行聚类,将色彩空间降到16位数。# Y0 y0 N, L7 J1 W7 D' ]8 j4 a1 i
2 w- [9 `; U$ R. y$ ~解决的问题
9 B2 _3 u, {8 k1.K-means聚类和期望最大化是什么?如何在opencv中实现这些算法。6 K( L, Q$ n1 N9 {
2.如何在层次树中使用聚类算法。他带来的好处有哪些。' L0 ]1 g$ l, Z/ { }9 r
3.如何使用无监督学习,进行预处理,图像处理,分类。2 s0 n+ a! L$ j" F5 z
2 M9 Q% V% E5 g' V$ |
1 理解无监督学习2 G# F E# _1 H: |, @
无监督学习可能有很多形式,但是他们的目标总是把原始数据转化为更加丰富,更加有意义的表示,这么做可以让人们更容易理解,也可以更方便的使用机器学习算法进行解析。
' R4 k) ]$ l4 Q( D+ r2 \: @无监督学习的应用包括一下应用:
% H9 |1 d: E9 v. A1 j1降维:他接受一个许多特征的高维度数据表示,尝试对这些数据进行压缩,以使其主要特征,可以使用少量的携带高信息量的数据来表示。
: S1 W, M* W0 Z3 N+ Q! S F2因子分析:用于找到导致被观察的到的数据的隐含因素或者未观察到的方面。
9 I, j" ?2 A4 | O. a3聚类分析:
1 T8 G% H( i" V尝试把数据分成相似元素组成的不同组。4 Q. ~5 ~3 l' K6 n; H9 [- ^
: B7 n3 ~8 w; C% F4 u" }
无监督学习主要的挑战就是,如何确定一个算法是否出色,或者学习到什么有用内容,通常评估一个无监督学习算法结果的唯一方式是手动检查,并确定结果是否有意义。
y2 F3 a; l$ k8 c4 h* r6 l7 p( V
0 M- ^) S& e F# e7 _3 `话虽然如此,但是非监督学习,可以非常有,比如作为预处理或者特征提取的步骤。# O. c: _ ]5 E( {1 F; y6 _1 X7 G
+ Q' y! ^9 Q8 w) M. ~& D; c# ]4 Q U
2理解K-means聚类
* a: X$ H( f! @. R" e' k5 d: X& O; G# pOpencv 提供最有用的聚类算法是k-means,因为它会从一个没有标记的多维度数据集中搜寻预设的K个聚类结果。2 s; U/ Z* l$ v5 [! {
, N& w- n( R( x1 [/ v# v g' y
它通过两个简单的假设来完成最佳聚类了。8 g. @' V% A0 L7 S# O# _
1 每个聚类中心都是属于该类别的所有数据点的算术平均值( E; P7 ^6 B2 D) f! m; b
2 聚类中的每一个点相对其他聚类中心,更靠近本类别的中心。 T1 r' ^2 p6 t5 }5 p1 p
4 j( Y h* L) n2.1 实现第一个kmeans例子" b6 W) L# v6 M- L
首先,生成一个包含四个不同点集合的数据集。为了强调这是一个非监督的方法,我门在可视化将忽略哪些标签。使用matplotlib进行可视化。
# Y* ]2 a7 R" o4 _6 D8 k* r) X* F! A$ ~4 J/ o6 S; d7 y
import matplotlib.pyplot as plt9 v4 x9 u a* @- S
import pylab
4 O) @# k1 g& R* h- q# Q7 xfrom sklearn.datasets._samples_generator import make_blobs7 U: |& N! t6 \* j. h. F& h
/ D/ P% h2 j; E; H6 k G: m1 ?
plt.style.use('ggplot')
( T9 O9 I# h1 |; Y4 h2 Z. Xx,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)& ~& t+ j+ V" u+ J$ O+ s+ G
plt.scatter(x[:,0],x[:,1],s=100)9 Y) `5 j8 L8 }/ k0 o' e
pylab.show()5 J. a) q6 @5 q( s) X( r
8 q- j |- I8 T! Y% d$ L" e7 x* i( t9 u6 {& Q) f5 A
1
+ r. i" O$ M7 Y- R+ f2$ ]. q6 h' E. U' f+ V; ]! V- U
3
6 C1 ` q, R, e6 D9 M5 a& ]4
( ~7 l; \2 V) B- u( t( d5
! c* m: S1 D( {; P) `+ w5 O6
, F, h7 P1 a; S- D' z/ N5 k& f: I74 }3 I+ U5 v. N5 g4 \0 W5 S
8- D" V1 X6 S# w
9! q! h0 U% q2 H+ v9 X. `, g
103 u- O- j( i: o/ o+ i
5 I" Z8 i' F8 v: a4 ^9 V7 g
我们创建一个四个不同区域的聚类,centers=4,一共300节点。
. _7 q; n4 f7 j3 {3 I n1 {$ B如上程序生成图像所示结果。# ~. o; E$ k% E" K" }8 c1 e7 @. e
尽管没有给数据分配目标标签,但直接使用肉眼还是可以看出来一共是四类。" Z) {6 V9 w' \7 @! Z/ J
kmeans就可以通过算法办到,无需任何关于目标的标签或者潜在的数据分布的信息。
( E5 x: p: R- a' J当然尽管,kmeans在opencv中是一个统计模型,不能调用api中的train和predict。相反,使用cv2.kmeans可以直接使用这个算法。。为了使用这个模型,我们需要指定一些参数,比如终止条件,和初始化标志。
" v0 m1 W1 ~8 N6 O2 D6 `, @3 \ Y) W) D& L4 g* K& u2 A
我们让算法误差小于1.0(cv2.TERM_CRITERIA_EPS),或者已经 执行了十次迭代(cv2.TERM_CITTERIA_MAX_ITER)时候终止。
4 f( c8 ?6 _8 a! S9 Y& @5 \9 Q. M/ Y7 O1 p7 E9 ]. k* F
& w2 V4 S$ E9 z. ]9 V0 w
# n M. U, w& B* u% |+ I
import matplotlib.pyplot as plt
" L5 e9 j5 F" F9 nimport pylab
" M1 c, i8 h9 a# N9 Cfrom sklearn.datasets._samples_generator import make_blobs* g# a$ v6 y7 Z j6 c# a5 w
import cv2( Z4 j1 u& g/ w( t" c1 a
import numpy as np
& D4 o4 j: o$ o' i" B4 {- U, R) F* S* J1 a* g1 X* }- ^6 o1 V. T
plt.style.use('ggplot')8 b; q8 T9 b6 y1 m
x,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)
* m; T4 R0 a) K; ^1 Jplt.scatter(x[:,0],x[:,1],s=100)5 l d. [* @: s0 s
! g8 ~1 P+ x! H) S) B5 _% T- {
2 k7 Y7 B( d* D/ P
criteria=(cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER,10,1.0)
; M/ ^* Y0 J6 g; ]7 U! M4 rflags=cv2.KMEANS_RANDOM_CENTERS
. a# d) z$ t% @* J9 X) E* j; @; }% ocompactness,labels,centers=cv2.kmeans(x.astype(np.float32),4,None,criteria,10,flags)
& D" j" s9 ?5 V* M9 @/ Cprint(compactness)2 y3 L" T- |( Z9 ]) m: E
Q* d- z( J8 |, Y! ?; O
plt.scatter(x[:,0],x[:,1],c=labels,s=50,cmap='viridis'): ]% S' @) R: |7 e2 n, {5 H
plt.scatter(centers[:,0],centers[:,1],c='black',s=200,alpha=0.5)1 t0 K* f4 P; M! d. n {+ I0 e* F
+ j/ [& ^& C+ j. ]4 X
pylab.show()3 s, a+ ]! s- _, o% I
" P6 m$ Y+ T7 Y$ L7 I5 r7 H: e! z8 \- L6 G
* A& o( r4 o" U% n: [ h ~2 Z
' s7 W6 T- q! e9 v3 s# @
0 i8 N' a! R" `4 W
/ f) u/ l+ w" |% o l% l
! p. |+ j2 [+ r4 G12 H. G* X' J+ J& R: e
24 D* w( M, p% y3 k
3
, x* b7 r* [; H41 F7 `1 }, `) b+ B: X3 Q
59 h/ K# d, u/ \: v* {/ v! u
6% j, v( ^4 L5 i" ]
7/ C, m, r( f7 S4 t) H; v8 e
8: p. q" v i2 k2 C/ e
99 G2 R& F, H- W
10
- [. C+ w; t* z8 q- U11
]" C, f0 f+ X' c7 A% Y [; C+ e12
( x" f" R) x. M% }* O Z$ X* i0 t13
: ~; a0 }3 b, g g147 D: v6 i9 r1 K3 l' ?
156 l2 I s) k0 C% j# @/ A( y% y
163 O7 }! F O$ l) J
17
7 H: W; P N l18
7 k c9 \$ C7 a Q" ]$ H19, P' [5 j% E% W3 l2 F3 c( |
20
$ Z) T0 _8 Q8 o- x21 Z O1 P; B0 Y
226 y; N$ N" j; `1 f- y. @3 g* O
23$ z3 r) ~* R- P* s
246 U7 I0 Z1 j+ x7 O" V
253 q1 p/ B- T V& n* ?
268 c4 Y6 |1 ?' y" [, z8 R5 X- j
上面程序结果可以产生图2的效果。
! p. A) U0 B+ ~+ [: P& }/ \( g' i$ \' r& ~
print(compactness)这个变量,表示每个点到它聚类中心的距离平方和。较高紧凑都表明所有的点更靠近他们的聚类中心,较低 的紧凑度表明不同的聚类可能无法的很好区分。
7 B8 c* s- ^$ q" o0 V7 u
E. r4 D! n- V- A9 C当然,这个是非常依赖于x中的真实值。如果点与点之间最初的距离比较大,那我们就很难得到一个非常小的紧凑度。因此,把数据画出来,并按照聚类标签分配不同颜色,可以显示更多信息。# N! e/ h4 x! A) u5 ~* t% m& s. N
: n) l' j% N) h/ }2 M. j2 M
3理解kmeans
8 n0 k4 \( t+ R2 P0 _kmeans是聚类众多常见期望最大化中一个具体的例子。简单来说,算法处理的过程如下所示:
, L: e( q$ l7 }- _# Z1.从一些随机的聚类中心开始8 ]4 z) o% A% s
2.一种重复直到收敛2 S8 y p- u5 w) g# q/ `
/ F! k& p+ j7 n& B期望步骤:把所有的数据点分配到离他们最近的聚类中心。# A" e! {3 W3 C& A/ c2 V! _
最大化步骤:通过取出聚类中所有点的平均来更新聚类中心。1 C8 T% p4 E! V5 O! X ~
7 @1 n, s0 v. S* C3 h) W% j1 m# E它涉及到一个定义聚类中心位置的适应性函数最大化的过程。对于kmeans最大化是计算一个聚类中所有数据点的算数平均得到。5 s1 v, W$ h4 I, _# m
————————————————$ \# ?% L( u X9 A+ K0 B
版权声明:本文为CSDN博主「紫钺-高山仰止」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。0 ?" h4 Z! o8 F6 q
原文链接:https://blog.csdn.net/qq_43158059/article/details/1267890009 P5 B/ ?8 _6 h, G- o& ?& d
* j. _( _9 V! {$ W% K7 \, v# b1 g2 o0 D2 q ]: a* c5 |
|
zan
|