QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3410|回复: 0
打印 上一主题 下一主题

[其他资源] 【机器学习】无监督学习的概念,使用无监督学习发现数据的特点

[复制链接]
字体大小: 正常 放大
杨利霞        

5273

主题

82

听众

17万

积分

  • TA的每日心情
    开心
    2021-8-11 17:59
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    网络挑战赛参赛者

    网络挑战赛参赛者

    自我介绍
    本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。

    群组2018美赛大象算法课程

    群组2018美赛护航培训课程

    群组2019年 数学中国站长建

    群组2019年数据分析师课程

    群组2018年大象老师国赛优

    跳转到指定楼层
    1#
    发表于 2022-9-14 16:37 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    【机器学习】无监督学习的概念,使用无监督学习发现数据的特点, l' \& c" D& ?  A- [$ F) r$ A

    " s4 D% Z  J3 b- _! k+ \5 A到目前位置,我们主要把注意力集中在监督学习的问题上,数据集中的每个数据点都有一个已知的标签或者目标值。然而如果面对没有已知的输出结果,或者没有人监督学习算法,我们要怎么做。4 |- O- I5 m3 u7 A7 R7 p9 l- T7 Z
    : `# Y; @2 w1 ]
    这就是无监督学习 。
    / Z; K( G/ G) b% |! p
    , N4 {* a/ z! ]- D在无监督、非监督学习中了,学习过程仅使用输入数据,没有更多的指导信息,要求从这些数据中提取知识。我们已经讨论了非监督学习众多形式的一种降维。另一个普及的领域就是聚类分析。他的目的是吧数据分为相似元素组成的不同区域中。. @; ~: D' Z5 X, ?  S

    ! j7 M3 g% l" t3 ?+ O/ ^6 t在本章中,我们想要理解不同的聚类算法如何从简单到,无标记的数据集中提取特征。这些结构特征,可以用于特征处理,图像处理,甚至是作为无监督学习任务的预处理步骤。6 Q$ Z% u0 s2 a9 P( k$ T
    作为一个具体的例子,我们将对图像进行聚类,将色彩空间降到16位数。
    2 @* {( }4 Y# h% }
    * v9 Q% R- `  p. I% T, ~  R! l解决的问题7 |7 M! R! ~" t/ Y
    1.K-means聚类和期望最大化是什么?如何在opencv中实现这些算法。
    : m( y0 H6 q' B4 C8 i2.如何在层次树中使用聚类算法。他带来的好处有哪些。
      ]6 l  G/ k9 _; @  N3 n3.如何使用无监督学习,进行预处理,图像处理,分类。
    & \! I! K, ^7 F0 i6 J1 v; U( [& S. L' ^' C1 }
    1 理解无监督学习
    3 E1 O) q3 }* U无监督学习可能有很多形式,但是他们的目标总是把原始数据转化为更加丰富,更加有意义的表示,这么做可以让人们更容易理解,也可以更方便的使用机器学习算法进行解析。
    $ H8 R4 q8 J7 e2 W. o无监督学习的应用包括一下应用:
    2 }2 N1 F0 o5 \/ L' r1降维:他接受一个许多特征的高维度数据表示,尝试对这些数据进行压缩,以使其主要特征,可以使用少量的携带高信息量的数据来表示。
    7 \& B* J5 Y# x6 `2 {# g, X7 T2因子分析:用于找到导致被观察的到的数据的隐含因素或者未观察到的方面。
    " J9 f" A: Y) y6 c3 V; M3聚类分析:2 S& I" ^' Y3 U" R1 Q) s
    尝试把数据分成相似元素组成的不同组。0 R( I$ Z, f( _9 c# d
    1 w# K, v6 @: |* Q" {7 D
    无监督学习主要的挑战就是,如何确定一个算法是否出色,或者学习到什么有用内容,通常评估一个无监督学习算法结果的唯一方式是手动检查,并确定结果是否有意义。* i4 v8 [9 S# ?3 I

    " G3 n& y" \4 K. ^) B8 V8 B7 K话虽然如此,但是非监督学习,可以非常有,比如作为预处理或者特征提取的步骤。
    ! g% h( M  E4 C" H2 O; I( w
    * @5 z' `9 S1 Z# D& r2理解K-means聚类4 x; V- A$ a: }2 u( M1 h
    Opencv 提供最有用的聚类算法是k-means,因为它会从一个没有标记的多维度数据集中搜寻预设的K个聚类结果。
    % N# X$ R  D2 O1 o2 b4 H9 F  `- r1 t) ~! J* q9 U7 h. ^' m
    它通过两个简单的假设来完成最佳聚类了。* p. E5 B! t" {9 c3 b# z( ~
    1 每个聚类中心都是属于该类别的所有数据点的算术平均值
    % e0 K; y& k, S4 ?7 S2 |% o+ ]2 聚类中的每一个点相对其他聚类中心,更靠近本类别的中心。
    % O. I5 D# d7 x' A
    & _8 \3 K6 ?7 L: S) T2.1 实现第一个kmeans例子* E. T) ~9 c% ^6 D4 b% z
    首先,生成一个包含四个不同点集合的数据集。为了强调这是一个非监督的方法,我门在可视化将忽略哪些标签。使用matplotlib进行可视化。
    ' [" @5 I8 l- [6 f: j7 K  C( ?
    import matplotlib.pyplot as plt
    2 f  `0 n0 v" I% u' pimport pylab1 p! r/ X0 E! c9 j! H* G5 M* \
    from sklearn.datasets._samples_generator import make_blobs
    , e. L6 g  t* E# V/ C% u! E$ n3 x& s% a. D2 w( U$ X
    plt.style.use('ggplot')' G% g% T' x6 L( X
    x,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)/ N; K& `* k' E
    plt.scatter(x[:,0],x[:,1],s=100)
    5 o$ j- v/ O& r( F. a7 Tpylab.show()4 I( Y# P3 l( P. l+ n. h5 ]
    : k/ r9 D1 O8 F4 a  i
    0 n/ @, A3 F4 y" \$ `5 O
    1
    6 s2 r) G6 c# e( S4 [" S; h2 }% `; h2! ]  Q, k3 K% k7 b( q
    3+ Z, J3 L: x' d' r) `. h, J" g
    4
    ( t- e/ v. z# ]4 B& S. C5
      H' Q6 H6 D9 L: _7 L' k2 k8 h67 }& r3 w) H+ P3 m
    71 \( u% D5 T5 N  B' {$ c2 N, x
    87 I9 w. L) e" Y  B; @6 j
    97 v. w; a  S5 A. u/ u+ t8 n
    10
    5 h# o5 ~9 I% }! t! O. N
    ) S9 m- S% T: I! I& B* |) Q我们创建一个四个不同区域的聚类,centers=4,一共300节点。
    9 Y0 v4 M- F0 W1 c如上程序生成图像所示结果。
    " M/ J1 @& @; L' Q: i( @尽管没有给数据分配目标标签,但直接使用肉眼还是可以看出来一共是四类。
    - ]4 L  u! x; N! s" x; e" ekmeans就可以通过算法办到,无需任何关于目标的标签或者潜在的数据分布的信息。1 r/ r7 \: l3 F# R
    当然尽管,kmeans在opencv中是一个统计模型,不能调用api中的train和predict。相反,使用cv2.kmeans可以直接使用这个算法。。为了使用这个模型,我们需要指定一些参数,比如终止条件,和初始化标志。
    ! e, r$ L( t7 W. L, H. {& ?9 ?! w8 d# y* S$ l% u, G
    我们让算法误差小于1.0(cv2.TERM_CRITERIA_EPS),或者已经 执行了十次迭代(cv2.TERM_CITTERIA_MAX_ITER)时候终止。
    0 X+ L/ V+ A# i6 A% r0 @4 Q& L/ w5 S) @  K3 ]0 \2 n) x5 X- b

    % M( t! N- e8 Y" v2 T2 S; S
    9 N; o8 {4 d: cimport matplotlib.pyplot as plt
    1 N  Z/ {3 f  V- B8 p( n1 t9 }4 Rimport pylab8 v4 Y, ?4 i- @6 Z! T( z
    from sklearn.datasets._samples_generator import make_blobs
    5 j0 c, _" j. |) cimport cv2
    4 M( L. N. N: L% L2 cimport numpy as np
    9 n- c; v8 A# I" r7 m" I; }  Y# ^4 j0 s5 g' w
    plt.style.use('ggplot')
    ; l4 ]( @$ z+ Z) Y" {5 Yx,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)
    6 m1 }1 @, Y* n% `9 _plt.scatter(x[:,0],x[:,1],s=100)
    $ p0 Q0 Q: y( H" i* c/ }* X5 g* o% r% f. d  @1 k
    9 K  k; ~7 C* r4 A+ A
    criteria=(cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER,10,1.0)
    % d: {! Y1 O& l1 ~% d4 [) p; V+ c1 Pflags=cv2.KMEANS_RANDOM_CENTERS
    ! D) Q$ V4 i4 I  N7 N$ x& L$ Lcompactness,labels,centers=cv2.kmeans(x.astype(np.float32),4,None,criteria,10,flags)5 s5 c0 G& Q1 x+ c/ V3 ^% D, s( ?4 E9 n
    print(compactness)
    / J, H# f. o4 ]; W
    , L% g) O$ y" t* ~' m' D, o) ^plt.scatter(x[:,0],x[:,1],c=labels,s=50,cmap='viridis')8 r8 |, M. g9 y: E% U" q
    plt.scatter(centers[:,0],centers[:,1],c='black',s=200,alpha=0.5)) M8 h% E6 ^8 K4 v. d
    " l) G4 N, G1 x4 U( Q8 m$ C5 m
    pylab.show()
      p! m1 G) K0 t3 Y0 P; C
    ( x9 I) e/ l" l, G+ f, E
    1 A# ~3 i4 r- d9 I3 T
    . h, s; O' g' W. ~
    . X9 k6 k" T) g7 ?$ n9 g7 a- O) P" o) m9 K- x, `1 z% f

    " X+ [) n; Q2 `* o  c; P
    3 Y; j. Z+ K' {& q  @( ~, ~10 ~; i2 I& H# U7 f0 B! |+ W
    2, ?* q0 I" l9 A8 C$ U
    3  n0 a/ f( u( c
    4! H  {7 {5 a6 A2 R4 T: h
    5& L+ B/ w* C; x" J! r( I
    6% M; s* f$ ]- N2 A) F4 D
    7
    , c: N  C  F7 C/ n# f3 G' H8
    1 b7 L$ T9 Z2 j! X/ P" A0 i9$ B  V, m! `4 v6 ~; w
    10" T$ A+ |* o/ }# w( ~5 \  }
    11
    , O6 b; A' u+ P# @9 ?# h12
    0 Y( D' o# @: g. t; v" w( C- x2 I; f- D13& F* r" g& q% z8 ]; h
    14. K  p- ~0 ]8 k* t) K
    15
    1 P& C# C7 b, C16
    2 C, |$ P3 c2 O% L17
      k+ G! k+ v  W3 }: T. I4 F& y/ U* R; ~18. R+ H8 m* A. ?: p  E/ _' x1 n% o/ ^
    19( k0 S2 i+ a* n6 R. ~' u
    20
    0 J* }& o, P$ O+ r219 g- d1 q! }0 |  e; [
    22) b8 v! ~; R2 ]5 C$ }* k: G
    23$ r; I5 n6 Z1 b. B" F* {
    24$ J; g( e- _3 h% s2 X& c# `
    25! v% [# X/ f- z
    26: T; z7 d( O5 `; g5 y5 w
    上面程序结果可以产生图2的效果。
    6 @0 N) K2 ?$ t
    4 _) {( c! n, G3 H: C9 |print(compactness)这个变量,表示每个点到它聚类中心的距离平方和。较高紧凑都表明所有的点更靠近他们的聚类中心,较低 的紧凑度表明不同的聚类可能无法的很好区分。
    : a8 m( v( i( ]
    1 O1 s% h* S, q. D- X& T当然,这个是非常依赖于x中的真实值。如果点与点之间最初的距离比较大,那我们就很难得到一个非常小的紧凑度。因此,把数据画出来,并按照聚类标签分配不同颜色,可以显示更多信息。7 u5 [+ ^4 ?7 t8 q) P

    ' y' R$ ?! R7 h0 U0 P3理解kmeans
    5 k7 z4 J! [2 ^/ a' ?kmeans是聚类众多常见期望最大化中一个具体的例子。简单来说,算法处理的过程如下所示:4 j# \( ?5 q5 @# T9 D
    1.从一些随机的聚类中心开始
    ( U+ c! b, V' Y# r1 \( S& n7 e2.一种重复直到收敛
    * ?7 o. C) G2 Y5 i; b1 }. V3 r; V0 M9 m
    期望步骤:把所有的数据点分配到离他们最近的聚类中心。
      I/ A) `# h" C7 ~6 v最大化步骤:通过取出聚类中所有点的平均来更新聚类中心。
    $ H3 U' Z+ e6 F: M" ^
    " T$ K8 B2 d5 j" l" h, k* F4 _它涉及到一个定义聚类中心位置的适应性函数最大化的过程。对于kmeans最大化是计算一个聚类中所有数据点的算数平均得到。0 u4 {6 I- L+ i3 H% D
    ————————————————
    * B1 a4 J, }/ P# P版权声明:本文为CSDN博主「紫钺-高山仰止」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    * m- v. l5 R% C原文链接:https://blog.csdn.net/qq_43158059/article/details/1267890007 _6 b2 G6 O& H

    % Z* q2 h) j. U: B8 ]  M  z0 d
    * N% L8 ?1 P  w1 b( }. D% w
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-7-9 12:40 , Processed in 0.376443 second(s), 51 queries .

    回顶部