QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3372|回复: 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
    【机器学习】无监督学习的概念,使用无监督学习发现数据的特点* f1 l8 W  g& B) n; |3 ]- u: a
    2 O7 x. T' }6 l: Z- q2 o* N3 D
    到目前位置,我们主要把注意力集中在监督学习的问题上,数据集中的每个数据点都有一个已知的标签或者目标值。然而如果面对没有已知的输出结果,或者没有人监督学习算法,我们要怎么做。4 H7 e5 S3 N8 E/ G; i* K9 ~6 \
    2 ]1 [! b2 x% K& Q0 |5 b! i8 u
    这就是无监督学习 。
    - I! E$ Z' O) c+ F0 [: M! S( j8 o: }: g3 ?- o$ {  {" |5 r1 D$ ?
    在无监督、非监督学习中了,学习过程仅使用输入数据,没有更多的指导信息,要求从这些数据中提取知识。我们已经讨论了非监督学习众多形式的一种降维。另一个普及的领域就是聚类分析。他的目的是吧数据分为相似元素组成的不同区域中。8 B- E- i3 y+ z0 n" V- y" g
    " v3 d% {$ T6 {# N% O  ?
    在本章中,我们想要理解不同的聚类算法如何从简单到,无标记的数据集中提取特征。这些结构特征,可以用于特征处理,图像处理,甚至是作为无监督学习任务的预处理步骤。
    3 O, S& {* h& Z% l* g作为一个具体的例子,我们将对图像进行聚类,将色彩空间降到16位数。1 J! m2 ?3 y- F# B+ Z9 E
    + ?1 ^# H. s# U/ _2 C( ~
    解决的问题
    $ ?7 J! [9 [( ]( W1.K-means聚类和期望最大化是什么?如何在opencv中实现这些算法。$ Y2 N9 F3 d2 e0 H$ `3 q
    2.如何在层次树中使用聚类算法。他带来的好处有哪些。, D- H2 }8 \1 |4 g
    3.如何使用无监督学习,进行预处理,图像处理,分类。5 L7 J2 j' Z8 U0 a( Q5 o# C+ c" `

    6 F/ r2 r1 O% ~8 Q1 理解无监督学习1 D8 o+ a7 r* }
    无监督学习可能有很多形式,但是他们的目标总是把原始数据转化为更加丰富,更加有意义的表示,这么做可以让人们更容易理解,也可以更方便的使用机器学习算法进行解析。$ t$ V) e% d1 j" t
    无监督学习的应用包括一下应用:  Y" M' u! q, i$ U! U  G1 s
    1降维:他接受一个许多特征的高维度数据表示,尝试对这些数据进行压缩,以使其主要特征,可以使用少量的携带高信息量的数据来表示。1 t; d$ K! p. U" j  U" S/ Z
    2因子分析:用于找到导致被观察的到的数据的隐含因素或者未观察到的方面。
    0 D/ N7 X2 y4 T! ~3聚类分析:
    8 V9 [* F+ r, r+ R, u3 G0 R7 f; F+ _尝试把数据分成相似元素组成的不同组。
    3 k8 R+ z; Q2 ]* f5 D/ d6 I) P! s2 a8 ?  S# J7 Z; i
    无监督学习主要的挑战就是,如何确定一个算法是否出色,或者学习到什么有用内容,通常评估一个无监督学习算法结果的唯一方式是手动检查,并确定结果是否有意义。
    9 O. t( c  S4 k! d' Y& _  a: E+ _' \2 ?3 c* s2 r1 s2 M
    话虽然如此,但是非监督学习,可以非常有,比如作为预处理或者特征提取的步骤。* O2 v! }1 C7 {! n

    + a; H. x5 q# _. b% q# ?2理解K-means聚类& y; i. Z& R/ T6 E: Y
    Opencv 提供最有用的聚类算法是k-means,因为它会从一个没有标记的多维度数据集中搜寻预设的K个聚类结果。
    $ }; b# }& u5 A
    7 {! W" |$ [$ c4 y! x6 [3 b它通过两个简单的假设来完成最佳聚类了。) M$ c* r. O, ~. Y1 T) \4 s# @" T
    1 每个聚类中心都是属于该类别的所有数据点的算术平均值
    ) b* o* f6 O$ V3 u7 ]2 c! G4 u. I2 聚类中的每一个点相对其他聚类中心,更靠近本类别的中心。; x9 H6 I7 X! L( E; l# X4 @

    * R# H& b; x. E5 T- G4 |  M2.1 实现第一个kmeans例子
      [( q0 |% E' A% n" x+ T3 F6 @首先,生成一个包含四个不同点集合的数据集。为了强调这是一个非监督的方法,我门在可视化将忽略哪些标签。使用matplotlib进行可视化。; U  H$ N2 R, z$ k7 Z6 [

    & [6 Q. j0 N: _( Fimport matplotlib.pyplot as plt
    % r/ C7 V) x# p8 z* vimport pylab
    . R* x6 j* F- F- Mfrom sklearn.datasets._samples_generator import make_blobs. @* |/ p: M0 w# Q# Q
    & x0 O5 y2 j0 J+ k+ R! c( o; ?
    plt.style.use('ggplot')
    - y3 b; M* X. Kx,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)
    * O# @0 E5 ~/ u9 L+ Fplt.scatter(x[:,0],x[:,1],s=100)! z& ~( [: M" _) u
    pylab.show()
    ) _% B- G3 s  h0 U
    * `) G- W  m3 O1 [) }5 X, u, c- S8 _3 X
    1
    ' A: ?9 P6 ~0 w. p& V20 Y" H8 b; p. [7 Y- m2 \
    3
    . Z4 d  D9 {8 P) P: y7 C/ C/ Z( l48 q  g& ~9 x, b/ \! N
    53 {1 L5 l8 b$ x! v" T
    6- A! k  Z) J' y- }4 @: F
    77 S2 o  ?) D; k. B
    8  @1 j6 u% R, v* M+ P
    9: }/ g1 L& E- n8 l+ Z- M
    10, @' F0 b; s) ]1 ~% T0 d

    " N( ^4 E% s$ D& G4 e" b我们创建一个四个不同区域的聚类,centers=4,一共300节点。
    , R) r6 O% R$ K如上程序生成图像所示结果。4 ~/ z6 E+ }  R' A( O* d$ y
    尽管没有给数据分配目标标签,但直接使用肉眼还是可以看出来一共是四类。
    6 T: q9 U2 K2 k( V- ekmeans就可以通过算法办到,无需任何关于目标的标签或者潜在的数据分布的信息。: x. S; q% v6 J9 E& p
    当然尽管,kmeans在opencv中是一个统计模型,不能调用api中的train和predict。相反,使用cv2.kmeans可以直接使用这个算法。。为了使用这个模型,我们需要指定一些参数,比如终止条件,和初始化标志。
    8 y. P. s1 S- @7 J! k
    9 ~$ r: M' w, q5 m+ w我们让算法误差小于1.0(cv2.TERM_CRITERIA_EPS),或者已经 执行了十次迭代(cv2.TERM_CITTERIA_MAX_ITER)时候终止。* A' l0 S! P9 L1 `7 U7 E: [
    * p& `  p4 ~, a

      U2 B7 p; D1 x  j0 E- A! j6 y2 y' C: X( C+ ?
    import matplotlib.pyplot as plt- N' _$ g2 N$ Y4 |* Z+ d
    import pylab
    % r2 a! H' u+ W+ q5 A: jfrom sklearn.datasets._samples_generator import make_blobs
    / i* ^. R+ j; ~import cv2( E! x" x2 o+ W3 @* u+ m- U
    import numpy as np$ }7 X6 P+ m0 f) q+ a
      c) |, Z4 ~0 G3 P( W' c
    plt.style.use('ggplot')
    - H" x* D+ J) z9 {" r3 P! Qx,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)- ?- U8 k0 {. c1 {1 A* a. V
    plt.scatter(x[:,0],x[:,1],s=100)$ t0 }' ]- X8 L6 q; G
    8 l1 b1 Q; V/ `" ~; o7 l  Y' V" T

    0 n; Z1 a/ w9 o* xcriteria=(cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER,10,1.0)
    $ a$ B2 v8 W4 }* ?) qflags=cv2.KMEANS_RANDOM_CENTERS+ u6 A/ p- P8 Z8 H
    compactness,labels,centers=cv2.kmeans(x.astype(np.float32),4,None,criteria,10,flags)6 L, |2 L& p8 q! I! m7 b' |3 t. T
    print(compactness)
    + d# C) }+ w/ `& k
    ' s" }9 L4 `9 W' Wplt.scatter(x[:,0],x[:,1],c=labels,s=50,cmap='viridis')
    & x7 K- ^' R( ?: O9 q& P" l) ]plt.scatter(centers[:,0],centers[:,1],c='black',s=200,alpha=0.5)4 {2 `1 B; U9 s
    ) r/ Q( l- P$ W7 U4 H4 y
    pylab.show()4 N. f$ J/ x$ A; Y) H
    6 D4 C$ \  [2 K/ ~9 L6 L! y
    : }* |1 f( X& |1 f3 e! ]7 G5 u
    $ E; ^* \# j( |' F

    ! S5 r+ T% r+ e7 \% j5 i
    . C+ Z, h* t& _. X* y. o6 N
    ) }: V3 X( ^. _& D7 u7 b" ~% s! e8 x) `+ A6 p2 i$ v, ~6 Y
    12 A4 P# d( A6 J
    2) ?# _0 r( }0 ]5 h% f  K
    3
    - ^+ S# y! ~; T: L7 s( ]9 l( N5 T4
    5 s8 ]2 Y" j( w; t! e: O1 F5
    % S( o1 f4 |/ O( N0 G6
    + _6 c% s% T1 U+ }. V7/ I7 R% U; s9 w% ]
    8. F$ ]$ \2 J2 Z+ f8 _5 a5 ]
    9
    1 `: Q) f: N0 t. ]7 u, c6 [3 p2 S10
    + T' E4 k" n9 F1 Q8 Y11$ i. n$ N3 j  o2 i$ T
    12
    % A) K- _) q2 C. S$ D# d) b. L# ~7 Z9 h13/ ~3 X: }- i( B, v
    147 K* T8 h0 Y$ q1 U7 S* f
    15
    3 v( v- z: N5 i; T& g) l166 ^6 f) J/ Y8 m- Y
    17
    : D" g+ s- F5 {* M2 C6 S% h# R2 A! c18* f& P! h* q* M# d4 K2 N% l. S
    19' c% d# z8 }2 A$ T
    206 w  r3 L2 H! [4 K2 b7 ]2 c) `
    217 s9 ]9 V7 D1 U& W5 P$ V- A
    22
      A. R% f' z9 i( V6 ^, m' c23
    ( R* d( e, M, l% @) ]  @, `$ P240 l; @8 V) ~: N) m' `. m
    25
    * E& y* C+ H# g3 t5 L4 U26( p) t6 A" p1 X) R
    上面程序结果可以产生图2的效果。
    & r  ^. A+ B4 L% [- ^+ J8 H
    8 S6 H, z" u1 B9 Y: Q* Kprint(compactness)这个变量,表示每个点到它聚类中心的距离平方和。较高紧凑都表明所有的点更靠近他们的聚类中心,较低 的紧凑度表明不同的聚类可能无法的很好区分。
    - Q& [; P- c, z& H5 n3 G" ~+ [" K0 m8 D) k! {# w& D& V
    当然,这个是非常依赖于x中的真实值。如果点与点之间最初的距离比较大,那我们就很难得到一个非常小的紧凑度。因此,把数据画出来,并按照聚类标签分配不同颜色,可以显示更多信息。
    1 Z0 k$ o& c$ [. j, @/ `- f) @$ Z: d$ a# d- A4 X
    3理解kmeans* @6 E; W+ n3 o! @, c' j% Q. a9 u
    kmeans是聚类众多常见期望最大化中一个具体的例子。简单来说,算法处理的过程如下所示:8 s$ x' G3 d& R  ]- @2 u
    1.从一些随机的聚类中心开始% i/ o( Y7 F# W+ {
    2.一种重复直到收敛
    3 B; O1 s% K3 A( ]1 Y( d) F
    + H  R* q0 Z) L期望步骤:把所有的数据点分配到离他们最近的聚类中心。
    ; i5 K9 \! ~* k0 k) o最大化步骤:通过取出聚类中所有点的平均来更新聚类中心。  _' v4 C  }/ _7 S/ G) g

    2 r. T0 I% g2 y6 W( d它涉及到一个定义聚类中心位置的适应性函数最大化的过程。对于kmeans最大化是计算一个聚类中所有数据点的算数平均得到。4 u  ~2 o2 L6 V1 M: F
    ————————————————4 W. z3 ~9 Q0 c7 C9 S
    版权声明:本文为CSDN博主「紫钺-高山仰止」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。; G* m' Z+ x+ G5 m# ^6 m* j1 S
    原文链接:https://blog.csdn.net/qq_43158059/article/details/1267890004 K& q$ C7 A8 U% d8 U

    . S5 ~$ \6 |0 D5 i$ ^$ u
    9 D3 w) z% x/ K& ?0 Q2 P, B
    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-4-10 00:51 , Processed in 0.295029 second(s), 51 queries .

    回顶部