QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3442|回复: 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
    【机器学习】无监督学习的概念,使用无监督学习发现数据的特点
    # f2 R5 R9 T; E/ I" i
    % i/ |' E. ?1 H5 R到目前位置,我们主要把注意力集中在监督学习的问题上,数据集中的每个数据点都有一个已知的标签或者目标值。然而如果面对没有已知的输出结果,或者没有人监督学习算法,我们要怎么做。) y6 d) x" S: V/ o( X
    + R; t, ~  d$ q; U9 P' z  I: |
    这就是无监督学习 。6 \0 L9 r- I  h  ~

    ' x# a1 u9 u4 ?. y" H8 f4 l/ c, |& \0 {在无监督、非监督学习中了,学习过程仅使用输入数据,没有更多的指导信息,要求从这些数据中提取知识。我们已经讨论了非监督学习众多形式的一种降维。另一个普及的领域就是聚类分析。他的目的是吧数据分为相似元素组成的不同区域中。
    4 d$ I! N$ n7 W. t" t0 j4 s# {, F! b& h5 D" w( `6 [) l3 ?( @
    在本章中,我们想要理解不同的聚类算法如何从简单到,无标记的数据集中提取特征。这些结构特征,可以用于特征处理,图像处理,甚至是作为无监督学习任务的预处理步骤。4 K4 x" L3 G1 ~% D. [" ~" T
    作为一个具体的例子,我们将对图像进行聚类,将色彩空间降到16位数。
    0 W) t% K' }& }" K6 y/ d2 Z$ Y6 F8 I& M8 B
    解决的问题# Z! R2 z8 b" P
    1.K-means聚类和期望最大化是什么?如何在opencv中实现这些算法。
    5 g: E, `& V) j* F  b3 x2.如何在层次树中使用聚类算法。他带来的好处有哪些。
    : Q! ]* g6 Z% M4 s3.如何使用无监督学习,进行预处理,图像处理,分类。8 F# n8 V" `1 r$ B/ G: r
    + K. d+ S$ d+ i+ q  v) R0 _* G
    1 理解无监督学习
    % N# |) K' p7 p0 [/ a无监督学习可能有很多形式,但是他们的目标总是把原始数据转化为更加丰富,更加有意义的表示,这么做可以让人们更容易理解,也可以更方便的使用机器学习算法进行解析。
    ! r6 m1 B5 m/ r* [无监督学习的应用包括一下应用:# j5 Q$ N1 A4 s7 `
    1降维:他接受一个许多特征的高维度数据表示,尝试对这些数据进行压缩,以使其主要特征,可以使用少量的携带高信息量的数据来表示。# {" {8 w# o9 z: ?% c% s/ j7 z$ z
    2因子分析:用于找到导致被观察的到的数据的隐含因素或者未观察到的方面。
    - j& Q3 \. P  F3 z+ X% t3聚类分析:
    6 G3 u& d4 u7 d2 O2 r; A2 w尝试把数据分成相似元素组成的不同组。8 o5 i4 @. k" Z" Y1 ^% j, Q

    6 j: i3 i  C# a6 v. b无监督学习主要的挑战就是,如何确定一个算法是否出色,或者学习到什么有用内容,通常评估一个无监督学习算法结果的唯一方式是手动检查,并确定结果是否有意义。. `9 T7 F0 ]* k* b2 C# l0 y+ e
    % P, q! l& V; _- S) K
    话虽然如此,但是非监督学习,可以非常有,比如作为预处理或者特征提取的步骤。
    1 Q9 u% z. R+ E+ g3 o7 s# O9 Q+ a0 e, E' {% H8 h$ |
    2理解K-means聚类
    $ ~6 ?+ x* F8 F. a# [Opencv 提供最有用的聚类算法是k-means,因为它会从一个没有标记的多维度数据集中搜寻预设的K个聚类结果。
    / s6 g5 O6 D% `& P% T/ b; x& D% |9 Q
    4 E, e( J6 W9 `. m- k$ g它通过两个简单的假设来完成最佳聚类了。
      u9 w+ ^4 C! F" k3 T: R3 c1 每个聚类中心都是属于该类别的所有数据点的算术平均值5 P% D( H6 J- v- `# H, @, Z& t
    2 聚类中的每一个点相对其他聚类中心,更靠近本类别的中心。
    ' V0 u4 q) \0 g0 K* r. i' b1 j( y. r0 I5 O' d& _
    2.1 实现第一个kmeans例子3 p! J' f, p" ]9 k- }' d" t
    首先,生成一个包含四个不同点集合的数据集。为了强调这是一个非监督的方法,我门在可视化将忽略哪些标签。使用matplotlib进行可视化。# D* T4 N2 t* |

    7 t+ h+ @7 d' I1 H. iimport matplotlib.pyplot as plt' f( |/ m$ S7 j+ |" G
    import pylab* X7 Y& c* o0 Z. d
    from sklearn.datasets._samples_generator import make_blobs9 s  _5 p2 g1 j: ~  {# l

      ^* D# j, v3 M7 `: T( o$ d+ k3 v4 o9 Tplt.style.use('ggplot')+ q6 R& W0 G$ {9 x3 q# Y" ?
    x,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)
    ) w% q+ I  s% n  W; b9 cplt.scatter(x[:,0],x[:,1],s=100)' k( G5 T, v: w; t* |. e
    pylab.show()
    3 L7 v6 B7 U4 M9 N. Q0 r% }2 L4 c( D3 [% q
    % y3 E$ V, y1 |9 ]
    1' G; y  {! w( @, P0 O6 I
    2
    9 E9 L) ~9 T  _" e/ Z/ e% {3
    $ j; b0 k& u, A/ J: c8 }4) v. a$ n. G/ @/ E; `. k
    5( g3 z  R. L4 b
    6% _  o* s9 R$ ]7 \" `- H
    7
    & f5 h- ]0 ^- O% @/ p8
    ! A$ j* O7 a8 u* ]8 F: P9  ^+ O0 Q$ v1 w' O* p, D( N
    108 Z" h2 G9 Z; ^8 A( i
    # f" `9 }2 c% S
    我们创建一个四个不同区域的聚类,centers=4,一共300节点。
    1 B  b! C9 B9 x; z如上程序生成图像所示结果。. u  S) |3 N9 V% k1 J3 \2 o
    尽管没有给数据分配目标标签,但直接使用肉眼还是可以看出来一共是四类。
    8 d  l: y' u' a% Okmeans就可以通过算法办到,无需任何关于目标的标签或者潜在的数据分布的信息。
    6 r3 E% O; |1 ^. l: t+ s) [当然尽管,kmeans在opencv中是一个统计模型,不能调用api中的train和predict。相反,使用cv2.kmeans可以直接使用这个算法。。为了使用这个模型,我们需要指定一些参数,比如终止条件,和初始化标志。
    ) O9 Y9 `1 t. J) N
    + ^# g; U% }# S# Y# b4 p我们让算法误差小于1.0(cv2.TERM_CRITERIA_EPS),或者已经 执行了十次迭代(cv2.TERM_CITTERIA_MAX_ITER)时候终止。  B; M5 w) ^  k' d% z7 h

    6 }5 P0 L! X  c: w1 t" n& o1 g. j
    : v) d/ a! K+ g* Z6 w% F: N/ q3 s# |6 a+ f' O2 U; |
    import matplotlib.pyplot as plt7 ?, c/ M# p: l) m8 ]
    import pylab
    " [6 s: ^- ^8 K( g  _4 Ufrom sklearn.datasets._samples_generator import make_blobs
    . \. J$ M' a1 `% N0 x0 f$ S; `import cv2
    ( u8 p; H" x: wimport numpy as np6 b5 Z) s/ T2 J. B) M& w+ P+ r
    ( Q/ _% e  n- S- ?. H" H# c
    plt.style.use('ggplot')+ j# M- e1 z8 z& ^
    x,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)
    " t, n" v. F- m6 k  ?plt.scatter(x[:,0],x[:,1],s=100)' W: m3 x- b4 E+ @2 m7 Z; r; k* R
    - L! Q; C7 i1 M1 P9 x

    - F8 N' S$ v- O3 J& v0 v1 xcriteria=(cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER,10,1.0)
    8 l; h2 y4 v, w, H; cflags=cv2.KMEANS_RANDOM_CENTERS$ B5 p, e% e" H% \) Y/ b
    compactness,labels,centers=cv2.kmeans(x.astype(np.float32),4,None,criteria,10,flags)" M' y+ Q7 _- v2 x- I/ g" j
    print(compactness)& J* j7 u/ [+ R7 H% d8 H1 I% F. w
      c& p" ^3 v5 o/ J; }
    plt.scatter(x[:,0],x[:,1],c=labels,s=50,cmap='viridis')
    ) s! ^2 b6 w" \" z* Eplt.scatter(centers[:,0],centers[:,1],c='black',s=200,alpha=0.5)/ w5 R1 U% P& a3 D) B# E

    5 F) m5 N: g- c% qpylab.show()
    4 ?- M5 d- V# F  k0 i+ n/ n0 X/ h6 a4 O" \- i3 X

      v4 _8 F/ |& R% U3 K1 k- P7 I3 T' A7 ]
    6 z$ _* T% c8 {: C0 u- w+ s
    7 d5 @- W# w1 |3 q9 a

    6 d( Z8 h/ I9 n% ^
    ( [% H) e/ \5 Y4 l4 h* a) _2 L18 n" H6 f# ^0 R/ L( L
    21 I- x6 @( u* }8 n( S) q
    39 h5 H  r. A; X, _+ H/ a' @2 R
    4
    ! D; \9 b8 z! ~0 X+ F2 x5
    & @; r0 h6 L- M9 z, N8 \66 y# R2 c5 a& y3 E/ O4 m
    7& r% o% M" X1 v5 S
    89 D. n) s, @! V
    9
    ' k) W6 `( H6 g; n; [% F10
    5 K5 T2 @$ W' \7 g/ J1 N* n0 Z11
    + F) e; ]. b9 C5 l5 ~12
    , B8 C6 K; i' w. y* W& g13
    , \' w& U$ H, q8 T3 ^14
    # _. G3 r0 {9 w; G15; ~, J9 }1 z0 f/ p& s
    16
    3 Y, D% i: h& C' w4 L! T17
    3 _7 }( l$ P6 r; M/ \$ `- h18
    ! h( |# k3 n, u! z! |$ Y3 G! G" p197 R! r6 }8 S7 l
    20
    # J" e& L8 w: p: \4 q21
    7 g( g  f+ w% J% J& G0 {. H22
    ' m' a' M5 C& V23
    8 r3 R1 N5 _' [. m247 r1 M! |5 d* X% F
    25
    $ v9 h6 T$ d  a. m7 z. y/ h6 [* O26& T+ I0 Q0 Z3 l8 U7 l  G
    上面程序结果可以产生图2的效果。
    3 m; _% K. y' B2 U7 H: v0 q% e6 E5 f$ f
    print(compactness)这个变量,表示每个点到它聚类中心的距离平方和。较高紧凑都表明所有的点更靠近他们的聚类中心,较低 的紧凑度表明不同的聚类可能无法的很好区分。9 i# @2 x+ \( a: Q" H. ~3 U$ ~# N
    7 U8 z; n' x4 q* m
    当然,这个是非常依赖于x中的真实值。如果点与点之间最初的距离比较大,那我们就很难得到一个非常小的紧凑度。因此,把数据画出来,并按照聚类标签分配不同颜色,可以显示更多信息。
    9 [- M% g; L2 T+ N+ C
    + B+ `7 Z6 X  c- n* Q3理解kmeans% c8 C  P( O: q, d
    kmeans是聚类众多常见期望最大化中一个具体的例子。简单来说,算法处理的过程如下所示:
    2 S. n( p% V5 J$ Q1.从一些随机的聚类中心开始# p4 [& G9 v4 B  B  {
    2.一种重复直到收敛" M! |8 M7 o* v
    9 |4 y8 s" c8 b4 B% T
    期望步骤:把所有的数据点分配到离他们最近的聚类中心。* G/ w; w( V' u" V; c9 u* p  |
    最大化步骤:通过取出聚类中所有点的平均来更新聚类中心。
    5 m6 h0 d+ D+ b% ~$ G6 }2 k" \" K4 h; s( b' `
    它涉及到一个定义聚类中心位置的适应性函数最大化的过程。对于kmeans最大化是计算一个聚类中所有数据点的算数平均得到。
    - Z9 o! Q& [* L7 R. A————————————————# }+ _9 T. @" ]
    版权声明:本文为CSDN博主「紫钺-高山仰止」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    ! T1 }0 }5 c; t8 A原文链接:https://blog.csdn.net/qq_43158059/article/details/126789000
    % |2 _' I: t" v7 s7 }3 ~0 K
    * j6 ?/ s  B" Y  y( g1 f/ r' ^
    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-8-24 03:40 , Processed in 0.402278 second(s), 51 queries .

    回顶部