QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3420|回复: 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
    【机器学习】无监督学习的概念,使用无监督学习发现数据的特点
    1 J! c2 r$ Q7 @9 o
    ) x% d6 T# Q# w0 `4 J, Q( i' W( m+ l到目前位置,我们主要把注意力集中在监督学习的问题上,数据集中的每个数据点都有一个已知的标签或者目标值。然而如果面对没有已知的输出结果,或者没有人监督学习算法,我们要怎么做。) b% ?" N* d- K% ~9 Z5 K
    ; e& ?, C) y6 s0 H. {5 X9 Z  Q
    这就是无监督学习 。. p$ r6 `& W  ]. g* q8 k- c3 D

    6 Q1 e$ ~1 r6 a9 I" z7 [4 k在无监督、非监督学习中了,学习过程仅使用输入数据,没有更多的指导信息,要求从这些数据中提取知识。我们已经讨论了非监督学习众多形式的一种降维。另一个普及的领域就是聚类分析。他的目的是吧数据分为相似元素组成的不同区域中。
    ! _1 B0 u; u& R5 E7 S. s+ P/ Q9 v' T& T7 a) y" _/ {) i& V  e  x; h
    在本章中,我们想要理解不同的聚类算法如何从简单到,无标记的数据集中提取特征。这些结构特征,可以用于特征处理,图像处理,甚至是作为无监督学习任务的预处理步骤。! t' h7 X7 K2 m* k( X: @( u  G
    作为一个具体的例子,我们将对图像进行聚类,将色彩空间降到16位数。# Y0 y0 N, L7 J1 W7 D' ]8 j4 a1 i

    2 w- [9 `; U$ R. y$ ~解决的问题
    9 B2 _3 u, {8 k1.K-means聚类和期望最大化是什么?如何在opencv中实现这些算法。6 K( L, Q$ n1 N9 {
    2.如何在层次树中使用聚类算法。他带来的好处有哪些。' L0 ]1 g$ l, Z/ {  }9 r
    3.如何使用无监督学习,进行预处理,图像处理,分类。2 s0 n+ a! L$ j" F5 z
    2 M9 Q% V% E5 g' V$ |
    1 理解无监督学习2 G# F  E# _1 H: |, @
    无监督学习可能有很多形式,但是他们的目标总是把原始数据转化为更加丰富,更加有意义的表示,这么做可以让人们更容易理解,也可以更方便的使用机器学习算法进行解析。
    ' R4 k) ]$ l4 Q( D+ r2 \: @无监督学习的应用包括一下应用:
    % H9 |1 d: E9 v. A1 j1降维:他接受一个许多特征的高维度数据表示,尝试对这些数据进行压缩,以使其主要特征,可以使用少量的携带高信息量的数据来表示。
    : S1 W, M* W0 Z3 N+ Q! S  F2因子分析:用于找到导致被观察的到的数据的隐含因素或者未观察到的方面。
    9 I, j" ?2 A4 |  O. a3聚类分析:
    1 T8 G% H( i" V尝试把数据分成相似元素组成的不同组。4 Q. ~5 ~3 l' K6 n; H9 [- ^
    : B7 n3 ~8 w; C% F4 u" }
    无监督学习主要的挑战就是,如何确定一个算法是否出色,或者学习到什么有用内容,通常评估一个无监督学习算法结果的唯一方式是手动检查,并确定结果是否有意义。
      y2 F3 a; l$ k8 c4 h* r6 l7 p( V
    0 M- ^) S& e  F# e7 _3 `话虽然如此,但是非监督学习,可以非常有,比如作为预处理或者特征提取的步骤。# O. c: _  ]5 E( {1 F; y6 _1 X7 G
    + Q' y! ^9 Q8 w) M. ~& D; c# ]4 Q  U
    2理解K-means聚类
    * a: X$ H( f! @. R" e' k5 d: X& O; G# pOpencv 提供最有用的聚类算法是k-means,因为它会从一个没有标记的多维度数据集中搜寻预设的K个聚类结果。2 s; U/ Z* l$ v5 [! {
    , N& w- n( R( x1 [/ v# v  g' y
    它通过两个简单的假设来完成最佳聚类了。8 g. @' V% A0 L7 S# O# _
    1 每个聚类中心都是属于该类别的所有数据点的算术平均值( E; P7 ^6 B2 D) f! m; b
    2 聚类中的每一个点相对其他聚类中心,更靠近本类别的中心。  T1 r' ^2 p6 t5 }5 p1 p

    4 j( Y  h* L) n2.1 实现第一个kmeans例子" b6 W) L# v6 M- L
    首先,生成一个包含四个不同点集合的数据集。为了强调这是一个非监督的方法,我门在可视化将忽略哪些标签。使用matplotlib进行可视化。
    # Y* ]2 a7 R" o4 _6 D8 k* r) X* F! A$ ~4 J/ o6 S; d7 y
    import matplotlib.pyplot as plt9 v4 x9 u  a* @- S
    import pylab
    4 O) @# k1 g& R* h- q# Q7 xfrom sklearn.datasets._samples_generator import make_blobs7 U: |& N! t6 \* j. h. F& h
    / D/ P% h2 j; E; H6 k  G: m1 ?
    plt.style.use('ggplot')
    ( T9 O9 I# h1 |; Y4 h2 Z. Xx,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)& ~& t+ j+ V" u+ J$ O+ s+ G
    plt.scatter(x[:,0],x[:,1],s=100)9 Y) `5 j8 L8 }/ k0 o' e
    pylab.show()5 J. a) q6 @5 q( s) X( r

    8 q- j  |- I8 T! Y% d$ L" e7 x* i( t9 u6 {& Q) f5 A
    1
    + r. i" O$ M7 Y- R+ f2$ ]. q6 h' E. U' f+ V; ]! V- U
    3
    6 C1 `  q, R, e6 D9 M5 a& ]4
    ( ~7 l; \2 V) B- u( t( d5
    ! c* m: S1 D( {; P) `+ w5 O6
    , F, h7 P1 a; S- D' z/ N5 k& f: I74 }3 I+ U5 v. N5 g4 \0 W5 S
    8- D" V1 X6 S# w
    9! q! h0 U% q2 H+ v9 X. `, g
    103 u- O- j( i: o/ o+ i
    5 I" Z8 i' F8 v: a4 ^9 V7 g
    我们创建一个四个不同区域的聚类,centers=4,一共300节点。
    . _7 q; n4 f7 j3 {3 I  n1 {$ B如上程序生成图像所示结果。# ~. o; E$ k% E" K" }8 c1 e7 @. e
    尽管没有给数据分配目标标签,但直接使用肉眼还是可以看出来一共是四类。" Z) {6 V9 w' \7 @! Z/ J
    kmeans就可以通过算法办到,无需任何关于目标的标签或者潜在的数据分布的信息。
    ( E5 x: p: R- a' J当然尽管,kmeans在opencv中是一个统计模型,不能调用api中的train和predict。相反,使用cv2.kmeans可以直接使用这个算法。。为了使用这个模型,我们需要指定一些参数,比如终止条件,和初始化标志。
    " v0 m1 W1 ~8 N6 O2 D6 `, @3 \  Y) W) D& L4 g* K& u2 A
    我们让算法误差小于1.0(cv2.TERM_CRITERIA_EPS),或者已经 执行了十次迭代(cv2.TERM_CITTERIA_MAX_ITER)时候终止。
    4 f( c8 ?6 _8 a! S9 Y& @5 \9 Q. M/ Y7 O1 p7 E9 ]. k* F
    & w2 V4 S$ E9 z. ]9 V0 w
    # n  M. U, w& B* u% |+ I
    import matplotlib.pyplot as plt
    " L5 e9 j5 F" F9 nimport pylab
    " M1 c, i8 h9 a# N9 Cfrom sklearn.datasets._samples_generator import make_blobs* g# a$ v6 y7 Z  j6 c# a5 w
    import cv2( Z4 j1 u& g/ w( t" c1 a
    import numpy as np
    & D4 o4 j: o$ o' i" B4 {- U, R) F* S* J1 a* g1 X* }- ^6 o1 V. T
    plt.style.use('ggplot')8 b; q8 T9 b6 y1 m
    x,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)
    * m; T4 R0 a) K; ^1 Jplt.scatter(x[:,0],x[:,1],s=100)5 l  d. [* @: s0 s
    ! g8 ~1 P+ x! H) S) B5 _% T- {
    2 k7 Y7 B( d* D/ P
    criteria=(cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER,10,1.0)
    ; M/ ^* Y0 J6 g; ]7 U! M4 rflags=cv2.KMEANS_RANDOM_CENTERS
    . a# d) z$ t% @* J9 X) E* j; @; }% ocompactness,labels,centers=cv2.kmeans(x.astype(np.float32),4,None,criteria,10,flags)
    & D" j" s9 ?5 V* M9 @/ Cprint(compactness)2 y3 L" T- |( Z9 ]) m: E
      Q* d- z( J8 |, Y! ?; O
    plt.scatter(x[:,0],x[:,1],c=labels,s=50,cmap='viridis'): ]% S' @) R: |7 e2 n, {5 H
    plt.scatter(centers[:,0],centers[:,1],c='black',s=200,alpha=0.5)1 t0 K* f4 P; M! d. n  {+ I0 e* F
    + j/ [& ^& C+ j. ]4 X
    pylab.show()3 s, a+ ]! s- _, o% I

    " P6 m$ Y+ T7 Y$ L7 I5 r7 H: e! z8 \- L6 G
    * A& o( r4 o" U% n: [  h  ~2 Z
    ' s7 W6 T- q! e9 v3 s# @

    0 i8 N' a! R" `4 W
    / f) u/ l+ w" |% o  l% l
    ! p. |+ j2 [+ r4 G12 H. G* X' J+ J& R: e
    24 D* w( M, p% y3 k
    3
    , x* b7 r* [; H41 F7 `1 }, `) b+ B: X3 Q
    59 h/ K# d, u/ \: v* {/ v! u
    6% j, v( ^4 L5 i" ]
    7/ C, m, r( f7 S4 t) H; v8 e
    8: p. q" v  i2 k2 C/ e
    99 G2 R& F, H- W
    10
    - [. C+ w; t* z8 q- U11
      ]" C, f0 f+ X' c7 A% Y  [; C+ e12
    ( x" f" R) x. M% }* O  Z$ X* i0 t13
    : ~; a0 }3 b, g  g147 D: v6 i9 r1 K3 l' ?
    156 l2 I  s) k0 C% j# @/ A( y% y
    163 O7 }! F  O$ l) J
    17
    7 H: W; P  N  l18
    7 k  c9 \$ C7 a  Q" ]$ H19, P' [5 j% E% W3 l2 F3 c( |
    20
    $ Z) T0 _8 Q8 o- x21  Z  O1 P; B0 Y
    226 y; N$ N" j; `1 f- y. @3 g* O
    23$ z3 r) ~* R- P* s
    246 U7 I0 Z1 j+ x7 O" V
    253 q1 p/ B- T  V& n* ?
    268 c4 Y6 |1 ?' y" [, z8 R5 X- j
    上面程序结果可以产生图2的效果。
    ! p. A) U0 B+ ~+ [: P& }/ \( g' i$ \' r& ~
    print(compactness)这个变量,表示每个点到它聚类中心的距离平方和。较高紧凑都表明所有的点更靠近他们的聚类中心,较低 的紧凑度表明不同的聚类可能无法的很好区分。
    7 B8 c* s- ^$ q" o0 V7 u
      E. r4 D! n- V- A9 C当然,这个是非常依赖于x中的真实值。如果点与点之间最初的距离比较大,那我们就很难得到一个非常小的紧凑度。因此,把数据画出来,并按照聚类标签分配不同颜色,可以显示更多信息。# N! e/ h4 x! A) u5 ~* t% m& s. N
    : n) l' j% N) h/ }2 M. j2 M
    3理解kmeans
    8 n0 k4 \( t+ R2 P0 _kmeans是聚类众多常见期望最大化中一个具体的例子。简单来说,算法处理的过程如下所示:
    , L: e( q$ l7 }- _# Z1.从一些随机的聚类中心开始8 ]4 z) o% A% s
    2.一种重复直到收敛2 S8 y  p- u5 w) g# q/ `

    / F! k& p+ j7 n& B期望步骤:把所有的数据点分配到离他们最近的聚类中心。# A" e! {3 W3 C& A/ c2 V! _
    最大化步骤:通过取出聚类中所有点的平均来更新聚类中心。1 C8 T% p4 E! V5 O! X  ~

    7 @1 n, s0 v. S* C3 h) W% j1 m# E它涉及到一个定义聚类中心位置的适应性函数最大化的过程。对于kmeans最大化是计算一个聚类中所有数据点的算数平均得到。5 s1 v, W$ h4 I, _# m
    ————————————————$ \# ?% L( u  X9 A+ K0 B
    版权声明:本文为CSDN博主「紫钺-高山仰止」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。0 ?" h4 Z! o8 F6 q
    原文链接:https://blog.csdn.net/qq_43158059/article/details/1267890009 P5 B/ ?8 _6 h, G- o& ?& d

    * j. _( _9 V! {$ W% K7 \, v# b1 g2 o0 D2 q  ]: a* c5 |
    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-10 02:44 , Processed in 0.420896 second(s), 51 queries .

    回顶部