QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3376|回复: 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
    【机器学习】无监督学习的概念,使用无监督学习发现数据的特点
    , r: g* o& O$ C* ~# V4 D
    , m9 z, P' Z/ O: [2 y4 J. Z到目前位置,我们主要把注意力集中在监督学习的问题上,数据集中的每个数据点都有一个已知的标签或者目标值。然而如果面对没有已知的输出结果,或者没有人监督学习算法,我们要怎么做。6 G5 d  S( U0 T+ b0 s: S

    2 W4 Q' i1 }9 |) d& _2 e这就是无监督学习 。& z# o* n$ L  c+ h$ e) _& p

    ! P! g- j5 H2 J6 j+ n3 G在无监督、非监督学习中了,学习过程仅使用输入数据,没有更多的指导信息,要求从这些数据中提取知识。我们已经讨论了非监督学习众多形式的一种降维。另一个普及的领域就是聚类分析。他的目的是吧数据分为相似元素组成的不同区域中。5 o6 X5 K: }' ^2 Z

    ; w' q$ G# W& i  s在本章中,我们想要理解不同的聚类算法如何从简单到,无标记的数据集中提取特征。这些结构特征,可以用于特征处理,图像处理,甚至是作为无监督学习任务的预处理步骤。
      Y! y5 q4 a# e( k6 n! g1 v% R作为一个具体的例子,我们将对图像进行聚类,将色彩空间降到16位数。1 {. [& }$ Z- c1 ?8 W

    6 }/ x3 R+ x+ K) G. x/ c解决的问题
    ; A7 u1 w3 K/ d' K1.K-means聚类和期望最大化是什么?如何在opencv中实现这些算法。/ x( |) y( K; j/ r; z" R
    2.如何在层次树中使用聚类算法。他带来的好处有哪些。
    6 o' n: m- ?! f1 R  N3.如何使用无监督学习,进行预处理,图像处理,分类。
      `" h! x' t3 X3 t: L! F3 c" \4 U2 c0 Y# W+ Q/ Q$ k
    1 理解无监督学习8 P. e: t5 `9 n% q& q/ K
    无监督学习可能有很多形式,但是他们的目标总是把原始数据转化为更加丰富,更加有意义的表示,这么做可以让人们更容易理解,也可以更方便的使用机器学习算法进行解析。
    6 a  A. x2 `, t% K) O, ^/ g无监督学习的应用包括一下应用:
    + D. U% N4 @% X  m+ w1降维:他接受一个许多特征的高维度数据表示,尝试对这些数据进行压缩,以使其主要特征,可以使用少量的携带高信息量的数据来表示。
    ' F# w4 `# Q  \0 I/ C% a6 o2因子分析:用于找到导致被观察的到的数据的隐含因素或者未观察到的方面。6 `' o0 N4 c, |. |! K8 e5 w
    3聚类分析:4 k1 Q' f# f$ J* ~4 y0 i
    尝试把数据分成相似元素组成的不同组。( }4 q& m9 x4 A1 U$ A0 u: h% f  D
    9 W$ F( b) I! P$ Y! l
    无监督学习主要的挑战就是,如何确定一个算法是否出色,或者学习到什么有用内容,通常评估一个无监督学习算法结果的唯一方式是手动检查,并确定结果是否有意义。3 Q$ y  }5 c; {1 j
    ! r$ T2 A) r& u9 p. ~
    话虽然如此,但是非监督学习,可以非常有,比如作为预处理或者特征提取的步骤。2 t2 ~4 @. x# }* v9 o' J7 X
    7 p/ i* |: Q: p5 i0 i
    2理解K-means聚类9 ]) m% h4 r7 G/ F% n
    Opencv 提供最有用的聚类算法是k-means,因为它会从一个没有标记的多维度数据集中搜寻预设的K个聚类结果。
    ( B3 [) h* u, b! S# v
    1 u) Z+ _4 ^" [) S& ^它通过两个简单的假设来完成最佳聚类了。) e' t/ l) `% d
    1 每个聚类中心都是属于该类别的所有数据点的算术平均值' G& C% H( H) t& t6 F+ c
    2 聚类中的每一个点相对其他聚类中心,更靠近本类别的中心。7 w: f$ ?. n) I8 k) w4 @
    8 |2 S1 x  T* U+ P" |* F
    2.1 实现第一个kmeans例子& R7 v1 G5 {% O3 ~. b
    首先,生成一个包含四个不同点集合的数据集。为了强调这是一个非监督的方法,我门在可视化将忽略哪些标签。使用matplotlib进行可视化。5 b* L# L' z, S9 b7 _. @

    - r3 S) a+ J, B  `9 m9 qimport matplotlib.pyplot as plt
    7 [4 s" R& m' w. s% i. u* B, O* gimport pylab
    ! G5 v$ |) h/ h$ Wfrom sklearn.datasets._samples_generator import make_blobs
    ' _/ t; {' h# n9 X, y: J9 ^# r8 P1 d0 L7 C
    plt.style.use('ggplot')$ T$ |; U+ ?% H; h& s: s
    x,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)1 L/ q1 t2 s- F# B
    plt.scatter(x[:,0],x[:,1],s=100)
    " t5 ~: A  F( Z9 zpylab.show()$ _$ d, `. O  X% `
    ! {2 R9 f: l' a1 H
    - z' R8 ?7 c0 u
    12 P% t0 I8 Z0 c6 V: |- A
    2# k" `6 ]+ x8 P  h; q: ?) }# H
    3
    4 R" Y6 t2 |6 L' {* }  [  N# V: B4. `# {2 W. T7 t  z2 e3 \  T- ]( `
    5
    . K& G2 {1 J) N/ m/ J' w) p7 a6* c/ S0 j; s( F, Z5 R( H
    7
    : C9 y5 W% G  ?8% R3 }; ^/ @; ~5 d$ G& y3 d
    9% I( R+ B  S% d, [* K  b8 q- {
    10/ t# ~3 N1 L5 m1 h, B( D3 N
    1 V9 Z! z: Z% ]0 u! ^
    我们创建一个四个不同区域的聚类,centers=4,一共300节点。, n+ B4 c$ R  L, q4 P9 ~5 ], a6 P! E
    如上程序生成图像所示结果。
    + }) ~- I, Z! w2 _2 w- Q4 _9 {5 K尽管没有给数据分配目标标签,但直接使用肉眼还是可以看出来一共是四类。
    . d- ]7 ^: d9 f& c. P* R: S2 Mkmeans就可以通过算法办到,无需任何关于目标的标签或者潜在的数据分布的信息。0 a( c$ N1 Z; }( B2 f
    当然尽管,kmeans在opencv中是一个统计模型,不能调用api中的train和predict。相反,使用cv2.kmeans可以直接使用这个算法。。为了使用这个模型,我们需要指定一些参数,比如终止条件,和初始化标志。
    % w2 K# ?  f/ v2 I0 B( c, B+ V& t* U; O& d0 ~4 D; Y
    我们让算法误差小于1.0(cv2.TERM_CRITERIA_EPS),或者已经 执行了十次迭代(cv2.TERM_CITTERIA_MAX_ITER)时候终止。
    9 G0 X, |9 W! v# V2 u# N" h0 U  @* y4 t* _' Z
    0 o0 [; K. E" i: ~: j

    - I0 `$ C% n0 G( n/ X- Y* a! q! Simport matplotlib.pyplot as plt
    & e5 i3 K3 w" Y* I" h1 W! Gimport pylab
    1 I& u% I+ l2 ]7 M/ d, g3 }' Pfrom sklearn.datasets._samples_generator import make_blobs  l) ^9 u1 H! x1 {. ]: o5 e) ^
    import cv2( m' J$ o3 P& W1 }
    import numpy as np
    * {) r2 @& K- {) i6 @& R: X' e3 U7 \7 D
    plt.style.use('ggplot')9 F$ q4 }' V$ K) \
    x,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)
    : F0 g* W1 |* X+ Pplt.scatter(x[:,0],x[:,1],s=100)
    & q+ a' m1 ^' w- v# O& O3 I! ?( T7 S# v8 j, G7 U

    ' T) m' H( B0 i' h  N+ Q4 A. rcriteria=(cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER,10,1.0)
    ; Y$ Y0 \! z# c( Pflags=cv2.KMEANS_RANDOM_CENTERS" E# \  b( n6 @' i! J
    compactness,labels,centers=cv2.kmeans(x.astype(np.float32),4,None,criteria,10,flags)! V" F7 E4 S* i' v: t( C
    print(compactness)
    & y2 R' S! P7 ^9 F6 A
    ' Q# \1 ~( G6 Q# `plt.scatter(x[:,0],x[:,1],c=labels,s=50,cmap='viridis')
    5 C9 W; j9 ]% uplt.scatter(centers[:,0],centers[:,1],c='black',s=200,alpha=0.5)
    ) f7 t$ ^" @/ H, d! v- G; x. z+ d. m( D3 ~& t, Z8 F
    pylab.show()% `+ D5 X0 |! ?( f7 K+ s! M0 z

    . H$ k+ x: |4 [. n3 c' ?' ~+ p- [. J' s. z# C
    + F) }% T: v4 M' j! \5 x& C4 _0 K

    2 b- E& ~( A- V3 H+ l4 |3 O4 ]* A9 ?- r
    : m8 v. n: Y; r9 I* k9 T
    4 G# h2 A, c0 N% J( O1 R( @
    1
    6 P0 L) c( R; y) X& y24 m! ~; s: r1 F) d
    36 Q( F4 b) {, C. F+ a2 `# R( r1 [
    4
    2 x5 T, @9 I2 I7 r5
    / @: ]" o- f$ \! u6" M; z* O  u+ s' z$ u
    7
    ( E9 U8 c. u: h% z88 a5 [4 X9 Z% Z! L8 i
    9, G# }- l1 D9 T% {4 K8 N! C0 R# `8 n8 G1 l
    10' V& x; p! X4 u( b
    11( y+ F1 A  [' `7 s) @+ T
    121 Z7 {, N# ^5 z* O! Z9 Q
    13$ Z8 J, N. p/ F* {% g' P+ K, S* A
    14  F7 y: f  M/ B& r3 u
    150 Z) x! O( ]( B2 _+ I/ N3 O' O* {6 \
    16- N$ W$ [) a. p. }' D$ d: m
    171 Q2 R( U8 v# L) Q$ o) H
    18- z7 T; @7 \: a3 q  ~7 d2 w
    19" j' N. A9 S1 s% ?+ L
    20
    + E8 F$ L! y% q21
    , W: v0 R; i5 H, O. [; S22
    3 t7 ?2 N. i. q5 @8 `23
    ( _" \3 w1 G: `5 m, |24
    % g! r# w6 |4 Q2 W257 p) E' P0 O4 Q* r1 u
    26
    , N7 m- l+ T; [上面程序结果可以产生图2的效果。
    8 t  W8 n: m5 `8 q1 M1 c2 S& C7 p0 P0 G+ C6 X
    print(compactness)这个变量,表示每个点到它聚类中心的距离平方和。较高紧凑都表明所有的点更靠近他们的聚类中心,较低 的紧凑度表明不同的聚类可能无法的很好区分。2 {0 ?3 y; ]. X  t  E% T8 {* N

      W; T6 N+ L' Y+ [6 R当然,这个是非常依赖于x中的真实值。如果点与点之间最初的距离比较大,那我们就很难得到一个非常小的紧凑度。因此,把数据画出来,并按照聚类标签分配不同颜色,可以显示更多信息。
    ( D9 v4 y" b% B$ x" a1 A* _2 u3 l9 F# D/ V& m* C2 G, L' {
    3理解kmeans
    , G! x) ?  V9 B) V) W& Y7 [7 Mkmeans是聚类众多常见期望最大化中一个具体的例子。简单来说,算法处理的过程如下所示:0 Q4 Y( S. V" l2 c: E  W
    1.从一些随机的聚类中心开始
    ! S4 w+ j8 ~2 z- n. e7 k" [5 j2.一种重复直到收敛! {4 G5 }7 O3 e$ T
    - o; l( C$ w- x2 W, G0 {" u
    期望步骤:把所有的数据点分配到离他们最近的聚类中心。
    5 s% }0 l" C8 J- I最大化步骤:通过取出聚类中所有点的平均来更新聚类中心。, ?8 n9 _% ?2 \, ~9 [

    " g! {! G5 f, @它涉及到一个定义聚类中心位置的适应性函数最大化的过程。对于kmeans最大化是计算一个聚类中所有数据点的算数平均得到。2 u7 O7 v. q% H: t$ S. B
    ————————————————
    ; R9 p/ ]* g0 l版权声明:本文为CSDN博主「紫钺-高山仰止」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    ! ~  Q7 O  ~' Z- T原文链接:https://blog.csdn.net/qq_43158059/article/details/126789000  s2 d9 A8 C0 _8 E# }
    % K5 V1 ?6 b3 i7 {; G8 s
    " k1 H3 R$ V+ b+ m1 V* o
    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-14 01:42 , Processed in 0.417681 second(s), 52 queries .

    回顶部