QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3396|回复: 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
    【机器学习】无监督学习的概念,使用无监督学习发现数据的特点
    0 s" |( H+ P: b9 L1 N
    4 I2 Q/ l, K& [到目前位置,我们主要把注意力集中在监督学习的问题上,数据集中的每个数据点都有一个已知的标签或者目标值。然而如果面对没有已知的输出结果,或者没有人监督学习算法,我们要怎么做。
    # [0 M3 H$ ^0 Q4 T( G# g% Z9 O1 U4 g* i
    这就是无监督学习 。" y: q/ ?7 c* z
    / G+ r) q7 j8 h
    在无监督、非监督学习中了,学习过程仅使用输入数据,没有更多的指导信息,要求从这些数据中提取知识。我们已经讨论了非监督学习众多形式的一种降维。另一个普及的领域就是聚类分析。他的目的是吧数据分为相似元素组成的不同区域中。/ d9 b: D  g) b; `/ }  _5 ~
    ; S& c) W$ b; V5 b6 V+ S
    在本章中,我们想要理解不同的聚类算法如何从简单到,无标记的数据集中提取特征。这些结构特征,可以用于特征处理,图像处理,甚至是作为无监督学习任务的预处理步骤。9 Q8 P1 m0 T# h: Z7 |' x
    作为一个具体的例子,我们将对图像进行聚类,将色彩空间降到16位数。& Y( Y5 @1 T: D& x: }
    * G3 @/ q+ `. w* P: s1 y0 R/ V
    解决的问题
    0 K% Z( S3 A  q& p+ {1.K-means聚类和期望最大化是什么?如何在opencv中实现这些算法。
    # i2 U( O8 M$ b& `7 |2.如何在层次树中使用聚类算法。他带来的好处有哪些。
    ' G9 G( {# W( S9 j- q3.如何使用无监督学习,进行预处理,图像处理,分类。3 \8 c- b' d" o$ e8 |1 p
    ' `. c" \0 P- [. I) @
    1 理解无监督学习/ O+ U% b8 W+ p0 k! q* D- m
    无监督学习可能有很多形式,但是他们的目标总是把原始数据转化为更加丰富,更加有意义的表示,这么做可以让人们更容易理解,也可以更方便的使用机器学习算法进行解析。
    * A: y2 T; K& t% }无监督学习的应用包括一下应用:
    ' M: L  z" n/ O9 _  n# X8 `1降维:他接受一个许多特征的高维度数据表示,尝试对这些数据进行压缩,以使其主要特征,可以使用少量的携带高信息量的数据来表示。" w% V3 z$ d* \; |% e/ U
    2因子分析:用于找到导致被观察的到的数据的隐含因素或者未观察到的方面。/ h) x" m6 B" \& L& ?+ q
    3聚类分析:( o/ m, ^! {2 F5 l  w$ h
    尝试把数据分成相似元素组成的不同组。3 i0 \/ N) R! Y
    ! N# z; T/ ^5 W
    无监督学习主要的挑战就是,如何确定一个算法是否出色,或者学习到什么有用内容,通常评估一个无监督学习算法结果的唯一方式是手动检查,并确定结果是否有意义。- q  h+ e4 a. D4 \9 G& B
    , S8 Y2 {7 b* `$ |+ A' l
    话虽然如此,但是非监督学习,可以非常有,比如作为预处理或者特征提取的步骤。
    . s3 e& S5 u' t" N2 C$ D2 G  }4 E
    2理解K-means聚类' V/ ~* Y3 T9 m. n- C& E, p" u
    Opencv 提供最有用的聚类算法是k-means,因为它会从一个没有标记的多维度数据集中搜寻预设的K个聚类结果。
    ' H4 J# W. v5 p" w8 W2 [  x# k0 ~. ]+ X
    它通过两个简单的假设来完成最佳聚类了。, _) A, ?0 }8 F+ u+ K# j' N4 W
    1 每个聚类中心都是属于该类别的所有数据点的算术平均值
    * p/ j! S  d! w  o2 聚类中的每一个点相对其他聚类中心,更靠近本类别的中心。
    4 P. P" N3 j. F9 K. S! C) w9 C- n1 k/ J$ `2 b" i4 c
    2.1 实现第一个kmeans例子
    . x% ]  }6 j  X; z/ K0 y首先,生成一个包含四个不同点集合的数据集。为了强调这是一个非监督的方法,我门在可视化将忽略哪些标签。使用matplotlib进行可视化。
    - i) H" K- A4 L% t9 J: s( S7 W! _# }* @/ v; |6 R% ?
    import matplotlib.pyplot as plt
    0 n5 `$ e5 |. l+ W; Q* Jimport pylab* Z1 f( U1 E3 R% j
    from sklearn.datasets._samples_generator import make_blobs
    6 [0 F! u" S& \6 g7 A& U! e' F: R1 @% k/ `2 G3 d( E) I
    plt.style.use('ggplot')
    ' v* D: d( W6 i2 R0 p  s- nx,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)! r' V- ^, n% |0 m% Z% k# u1 A* U' n2 @
    plt.scatter(x[:,0],x[:,1],s=100)
    $ _( h; O; ~% a+ [+ mpylab.show()3 Q8 `9 J7 d+ @3 c; ]3 s: A# H

    2 g. j0 n+ j* L0 x& u0 p' X- \7 t( ]4 T. Y$ u
    1& \# J) E5 f/ l$ _5 ~2 V
    2
    ! f" ?6 K$ E5 W% `* ?3
    * c& }# x/ R* i5 n4
    5 C; @& k* @7 e- y3 m6 r& X5
    2 m& Q/ r4 C- O" a+ H' a62 @# G/ g+ C* V) E4 b
    7, w3 P' I" K$ _: n' h2 c
    8, h# D! o6 P, X' c+ y$ H# V
    9
    : b( s( p2 v8 J104 M- o, U# G  V

    ! b8 ?" n' x: a" [我们创建一个四个不同区域的聚类,centers=4,一共300节点。
    4 E$ e3 s7 \7 q( l3 `9 j8 R如上程序生成图像所示结果。. L6 p3 `+ k, ?8 P
    尽管没有给数据分配目标标签,但直接使用肉眼还是可以看出来一共是四类。
    2 f9 z6 x9 o/ F4 u8 rkmeans就可以通过算法办到,无需任何关于目标的标签或者潜在的数据分布的信息。! ^, [$ W6 \' S. V4 e- V5 ^
    当然尽管,kmeans在opencv中是一个统计模型,不能调用api中的train和predict。相反,使用cv2.kmeans可以直接使用这个算法。。为了使用这个模型,我们需要指定一些参数,比如终止条件,和初始化标志。
    # u" V% g* p+ r4 h1 B+ F% _
    6 @) {/ {1 ^8 ]# X我们让算法误差小于1.0(cv2.TERM_CRITERIA_EPS),或者已经 执行了十次迭代(cv2.TERM_CITTERIA_MAX_ITER)时候终止。" `3 W1 F/ x- g4 X! C3 Z# E

    & U+ U+ _. ~% C5 R% J: a$ j: l9 R  O; i+ j

    ( ~/ }; i2 K, @0 b$ ~7 B* a7 ^import matplotlib.pyplot as plt7 \4 S/ O4 N$ |6 i+ P" x
    import pylab
    3 I( u! Q  c' M9 d! }" N6 yfrom sklearn.datasets._samples_generator import make_blobs4 f+ ~; T9 D" x6 e/ p' O8 H
    import cv2: d6 o. C, F  i
    import numpy as np" v4 k4 m1 l. Z' I& E
    ' `. c2 N- K. Z3 U! v! L
    plt.style.use('ggplot')
    6 p( E5 R8 Q( H, jx,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)* [! V" V; }: `9 {* K
    plt.scatter(x[:,0],x[:,1],s=100)* \0 A# e* f! R# D& ~
    * b6 F# d: r3 A- |1 @2 I. k( G

    ' B* U9 [  j, d2 J7 M: q6 a9 wcriteria=(cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER,10,1.0)
    2 l" w" D! r7 w7 C$ a. O4 @% K: Xflags=cv2.KMEANS_RANDOM_CENTERS$ N& B6 k7 T9 S  G. Z5 i  y: B
    compactness,labels,centers=cv2.kmeans(x.astype(np.float32),4,None,criteria,10,flags)7 s: H: X+ L. R  N
    print(compactness)
    % ?4 S  b" e+ _  A& Y2 f! T0 X4 j. P( l* k7 p" c# ~
    plt.scatter(x[:,0],x[:,1],c=labels,s=50,cmap='viridis')% g7 O5 j9 g3 J- n* q0 y
    plt.scatter(centers[:,0],centers[:,1],c='black',s=200,alpha=0.5)! {: S+ \6 \  F% m+ F
    6 F2 w; p5 r1 H" o$ j1 `2 _
    pylab.show()
    6 v+ e4 {: q6 U# m" g$ l( B- T9 W) l2 U! P
    # L" F% x, y$ [. Q
    - [( ^  Z( G+ c

    6 R& r# {  Z( L& |$ l' H
    8 F+ ~- G) A5 u& S& A: B% t5 j0 t3 p# n) O! ^0 ^2 u, v

    0 g+ d0 \4 l* Y2 ~6 `7 Y) x5 j( `1
    # a/ A& [3 j5 e: v- r% M2
    ) n+ j' p3 D5 v. W36 t3 u; u8 E; `# {
    4% F- V$ o4 a! z4 q8 b
    5: n% s9 m  K# C- ^0 H/ ]
    66 d1 D: ?$ Y2 V3 [
    76 L5 f- Z. y2 m* M$ C$ h% n" I+ W
    8, c' Q8 ?, t& Y& X
    9$ Z: ^  ~. g. g! b) z' E
    10  N2 g. r% v2 X2 Q. |6 \
    11: J/ f  X# e, q1 K- n7 }
    128 W9 T! @0 i, W
    13
    0 |0 F1 B$ B1 I5 Z5 \! p* Y* A14$ v) Q  I9 ?$ V; m
    15  Q' f) G  G: C: D2 N" i2 S6 A, s& U
    163 y3 ^0 x. D* V
    17
    " o1 P/ F' G& ]* x: |& `18- X, V) s3 P4 [* s* h
    19: Z1 A" P0 n8 s" ^3 l. g# t# l+ P
    20
    . q# A+ O8 U9 H1 \21
    ! d0 X! v8 N, j+ _$ f" Q* h22
    ( S0 c1 s0 V3 B23! D+ |/ V2 S0 _4 r1 p6 P
    24" t( F0 S: p% `9 x) I5 ^& W
    25
      S6 ]+ u1 m: w! O4 t  n0 A: J& a26
    " w' W) ^1 V9 b. p上面程序结果可以产生图2的效果。
    $ D2 A1 I; C# p/ W: R7 T
    ; h$ ~/ J2 R- @( R0 N1 Zprint(compactness)这个变量,表示每个点到它聚类中心的距离平方和。较高紧凑都表明所有的点更靠近他们的聚类中心,较低 的紧凑度表明不同的聚类可能无法的很好区分。
    , P& I) h7 S: p: U- j% I& `! v/ W! o8 z" R5 T( u3 l
    当然,这个是非常依赖于x中的真实值。如果点与点之间最初的距离比较大,那我们就很难得到一个非常小的紧凑度。因此,把数据画出来,并按照聚类标签分配不同颜色,可以显示更多信息。9 h; |0 d& O. L6 b0 U  n+ o

    8 B1 {3 {$ _# q- N! i/ P! l+ p3理解kmeans
    & H; k" n' r: w7 [7 }4 d; Ukmeans是聚类众多常见期望最大化中一个具体的例子。简单来说,算法处理的过程如下所示:
    ; z% W$ i1 K. j( b3 _! W  R1.从一些随机的聚类中心开始/ Y% g9 n/ @6 d" w: [0 v/ l
    2.一种重复直到收敛
    . A, k/ I6 q0 u2 i: W
    6 |5 E$ j% w# ~* m3 x$ S6 N期望步骤:把所有的数据点分配到离他们最近的聚类中心。& L( J" _. i. M* g' K+ |5 f6 W1 v
    最大化步骤:通过取出聚类中所有点的平均来更新聚类中心。7 ^/ e, J9 U& o+ K1 q/ C
    + z$ \* F2 g' X
    它涉及到一个定义聚类中心位置的适应性函数最大化的过程。对于kmeans最大化是计算一个聚类中所有数据点的算数平均得到。
    " T* t- }/ E8 b" G# ]% l————————————————
      {4 J3 o% S- h) O版权声明:本文为CSDN博主「紫钺-高山仰止」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。: Q+ K) i0 c) ]- B' v$ i+ N5 u
    原文链接:https://blog.csdn.net/qq_43158059/article/details/126789000
    ' i8 g% K- m% }% H% q* B5 t4 h6 N3 q/ S9 a+ A
    6 ~7 J: e( ?, N
    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-5-25 08:09 , Processed in 0.557811 second(s), 51 queries .

    回顶部