QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3550|回复: 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 [( G: E9 t1 M% x+ s+ k4 {' O/ V! I  S( i" ]
    到目前位置,我们主要把注意力集中在监督学习的问题上,数据集中的每个数据点都有一个已知的标签或者目标值。然而如果面对没有已知的输出结果,或者没有人监督学习算法,我们要怎么做。
    ( Y7 i8 ^% w; v& b- v5 M5 r6 k* b- M1 C
    这就是无监督学习 。
    7 v/ K9 y. x7 B4 f) [( p( i4 x7 n, v5 M5 ^) g
    在无监督、非监督学习中了,学习过程仅使用输入数据,没有更多的指导信息,要求从这些数据中提取知识。我们已经讨论了非监督学习众多形式的一种降维。另一个普及的领域就是聚类分析。他的目的是吧数据分为相似元素组成的不同区域中。
      o0 w- j; u( B% @: y2 H8 o4 o0 h# x3 `: a2 q! J+ q  I
    在本章中,我们想要理解不同的聚类算法如何从简单到,无标记的数据集中提取特征。这些结构特征,可以用于特征处理,图像处理,甚至是作为无监督学习任务的预处理步骤。
    ; J% B  \' l. H3 X1 T$ L作为一个具体的例子,我们将对图像进行聚类,将色彩空间降到16位数。
    & G" |6 ^" t8 b  k. A  m* R  Q* G0 m) }! D) r
    解决的问题1 |, e7 h- G& ~8 b) L
    1.K-means聚类和期望最大化是什么?如何在opencv中实现这些算法。  `; X8 P1 Y" U) _. v1 `
    2.如何在层次树中使用聚类算法。他带来的好处有哪些。
    / O; e1 ]1 t. @' Z; L0 d5 d  [4 m3.如何使用无监督学习,进行预处理,图像处理,分类。
    * w5 T. K8 T% K; F
    & k1 M; R1 s! T2 a# z8 t1 理解无监督学习
    3 h2 u) Z& J7 t$ r无监督学习可能有很多形式,但是他们的目标总是把原始数据转化为更加丰富,更加有意义的表示,这么做可以让人们更容易理解,也可以更方便的使用机器学习算法进行解析。* u( h4 P/ G) l* }4 j1 _6 i, W, c
    无监督学习的应用包括一下应用:5 V2 T& C+ d  C" T* A) T+ L
    1降维:他接受一个许多特征的高维度数据表示,尝试对这些数据进行压缩,以使其主要特征,可以使用少量的携带高信息量的数据来表示。4 y) X9 V' O1 e% [! I6 r4 W8 W
    2因子分析:用于找到导致被观察的到的数据的隐含因素或者未观察到的方面。
    ; @2 s$ G% a: q# p7 a3聚类分析:: X/ u5 Y4 J# U2 V# Q% e2 B
    尝试把数据分成相似元素组成的不同组。1 |3 j2 k6 a5 I% l+ r1 g; c# z

    % w' [0 A5 q% j无监督学习主要的挑战就是,如何确定一个算法是否出色,或者学习到什么有用内容,通常评估一个无监督学习算法结果的唯一方式是手动检查,并确定结果是否有意义。
    4 `8 }( O# @& |: w- U7 D
    8 f- ?. _/ }/ l话虽然如此,但是非监督学习,可以非常有,比如作为预处理或者特征提取的步骤。
    2 y2 J7 s0 F: U1 o" X& D' {, X
    ( ]7 r+ E% _1 ^2理解K-means聚类
    ! }+ F8 M+ O) W+ UOpencv 提供最有用的聚类算法是k-means,因为它会从一个没有标记的多维度数据集中搜寻预设的K个聚类结果。* Q+ q! X- p; d$ s* E! d

      U  }3 A! j7 M+ \3 t5 H. F& x它通过两个简单的假设来完成最佳聚类了。7 S6 ~) d  H0 Q# R: Q3 n; g4 k# z
    1 每个聚类中心都是属于该类别的所有数据点的算术平均值6 Z( l/ I: y# `$ d% l: q
    2 聚类中的每一个点相对其他聚类中心,更靠近本类别的中心。4 ^1 o+ w9 Q6 K4 r7 O  x

    % D' O, E9 O! d5 v2 m% n) d- R2.1 实现第一个kmeans例子7 _  B  Y. l, F9 z# g- f
    首先,生成一个包含四个不同点集合的数据集。为了强调这是一个非监督的方法,我门在可视化将忽略哪些标签。使用matplotlib进行可视化。
    4 s* ?* x/ ?9 V6 W* U
    ) J% b1 r2 I" [8 q' N; Dimport matplotlib.pyplot as plt  h6 {5 l, Z0 D  \/ r
    import pylab. R0 G- O" c( ~) z5 x* r
    from sklearn.datasets._samples_generator import make_blobs0 m0 [& p3 |/ j( K! Q
    . [1 s' k. |' j$ Z& g$ |# e9 z2 M
    plt.style.use('ggplot')
    $ ~& |7 ?% n* d0 J& F* fx,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)" t. W/ d  I4 c; @. O& S
    plt.scatter(x[:,0],x[:,1],s=100)
    0 A* W( t; o) h+ n3 [: Apylab.show()
    4 q, U* B" v2 c
    3 S2 ^( C* w& M& K: S2 A2 Q) x9 J# U) p( c- Q
    14 ?+ r: d* r' ]8 T8 H
    2
    : _- R( {9 u+ b) H6 ~+ ?/ q32 a0 Z" N) v( D( f* ^
    49 r7 v5 k! Y0 s
    5
    4 U8 F4 x/ p+ W$ X6* L2 a8 W* J( y; [6 _6 z7 h& g
    7
    7 d, `( ?" |  s0 W, S/ ]) _8' \: u/ c$ r5 o2 D( \0 U" Y# w
    9
    6 `9 z$ B: d4 N10" ^: g  O5 u( ~3 z& o
    ) X, @3 b6 V7 u% ]- o8 R0 \3 b
    我们创建一个四个不同区域的聚类,centers=4,一共300节点。
    % o5 N* L, J. ~4 p如上程序生成图像所示结果。4 h9 {# F% j& J' |* R. ~
    尽管没有给数据分配目标标签,但直接使用肉眼还是可以看出来一共是四类。
    ) j$ S2 s/ U* m$ Ykmeans就可以通过算法办到,无需任何关于目标的标签或者潜在的数据分布的信息。5 p& x* T; m, I' w; G5 Z* a
    当然尽管,kmeans在opencv中是一个统计模型,不能调用api中的train和predict。相反,使用cv2.kmeans可以直接使用这个算法。。为了使用这个模型,我们需要指定一些参数,比如终止条件,和初始化标志。1 u- q# u2 b! M" ~" `' v

    ) y0 v" V# f$ {' U我们让算法误差小于1.0(cv2.TERM_CRITERIA_EPS),或者已经 执行了十次迭代(cv2.TERM_CITTERIA_MAX_ITER)时候终止。, Y% a0 `5 A: j1 x( Z

    4 i, G, Y" T: A* \
    ( S# u! Y  ?9 u# u% i0 F6 p7 L0 [8 n
    3 _" m+ h  j/ F" }" C/ Q9 ]import matplotlib.pyplot as plt9 B, M2 E' g2 T) F) G# I; I
    import pylab
    ! A. P/ @5 C6 H, v0 mfrom sklearn.datasets._samples_generator import make_blobs: }, @  n& N8 u
    import cv2( \+ M' ]$ O' r- p& U
    import numpy as np0 T; U: l8 v5 E" N
    ' J/ O2 f$ Z) V) o1 G0 o5 I, i
    plt.style.use('ggplot')% |% g6 l$ T; B- Y; V
    x,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10); c9 i0 G# }2 w* q
    plt.scatter(x[:,0],x[:,1],s=100)
    7 f2 ^8 v# a' N$ Z; |& p( X9 Q8 S) E- y! v2 b, c

    ; g0 x8 r# l% H; scriteria=(cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER,10,1.0); t# ?; l, l# A$ d6 ^/ h8 ~9 b. i
    flags=cv2.KMEANS_RANDOM_CENTERS8 A8 X0 f! N1 }) ?3 D, g
    compactness,labels,centers=cv2.kmeans(x.astype(np.float32),4,None,criteria,10,flags)
    $ t( b% q+ G, r. J3 R( yprint(compactness)
    0 v1 B  m0 Y# S: R# b9 J6 H3 u9 F& K* m0 Z
    plt.scatter(x[:,0],x[:,1],c=labels,s=50,cmap='viridis')  u  ~/ x2 Q. K
    plt.scatter(centers[:,0],centers[:,1],c='black',s=200,alpha=0.5)! _- Y& i6 ?: N1 y; v* x
    % @' K# H: Q  E3 f' T; d
    pylab.show()
    / z; M! j! A' f8 m8 u! S
    / b' f/ e; C! T$ s  [0 f
    ' W" n6 L  w8 z5 k7 F9 [5 T6 }% V1 U, ?- R3 u6 B" X
    5 P. U) R& ~" ^7 i; D9 W
    $ ^+ i& g# c; i  [1 s6 D" }1 C. |- `

    5 ^, K9 y7 x! d. w! D5 C7 Z3 V4 R  K: Q8 G
    1
    6 P. T! a. Q/ _2 C2
    % p. K9 m1 \5 Y1 h3
    5 [0 d: \7 R9 B" B, i. C! g4
    & K8 m# `! U+ r; a* b2 p  f# z5
    ' m7 J2 j0 z5 X- L( K  m6
      B$ N* }) u7 `- J% ?7# r5 z' `7 U) r- e. M( B
    8/ z. z3 l1 P- J3 X$ F4 g
    9
    2 p- f# U; o# f: B1 B; D2 b10
    , N! H' _; q* Z7 R11( Q/ s0 X) }) T
    12
    / X* q: {+ R% d9 Y& t13
    0 O3 _8 h6 V- j" z3 |( F/ e  X14
    / I7 f8 t% k) A# S15, N9 B) m/ F% D- V1 P1 h
    16: ^7 v1 x  S9 k: f! {, i
    17
    3 b5 a: ^9 t* f% d18
    & E) U. [$ o4 l( d$ m! T8 E. {19
    3 O+ L/ g4 R5 s. ]* w) ?; ]/ w) e205 N  l; l3 Z. M; c2 {; k
    21+ v) ]7 c1 J4 M+ V  H
    22
    5 [; D6 Q$ x4 l2 J( G  q23
    + a; H' M2 G. c5 j# [! |. X" i" V7 T24, L4 Y9 Q  u. ^$ e( m- G
    25
    9 d* L- f: x( w. p262 h6 v1 {. H2 R- B9 y' U: c
    上面程序结果可以产生图2的效果。! ^7 z. X& h7 E/ G* k7 S
    8 w1 @8 @. u3 e1 J; r& |
    print(compactness)这个变量,表示每个点到它聚类中心的距离平方和。较高紧凑都表明所有的点更靠近他们的聚类中心,较低 的紧凑度表明不同的聚类可能无法的很好区分。
    7 L3 h3 f+ W4 G8 V( u# f) \; `; b
    当然,这个是非常依赖于x中的真实值。如果点与点之间最初的距离比较大,那我们就很难得到一个非常小的紧凑度。因此,把数据画出来,并按照聚类标签分配不同颜色,可以显示更多信息。( P: ]2 v. k4 F
    , P+ A, E( h( i' b8 A, a
    3理解kmeans
    # g3 x+ M# L: s: @& qkmeans是聚类众多常见期望最大化中一个具体的例子。简单来说,算法处理的过程如下所示:- w* m% M9 z" ~3 I
    1.从一些随机的聚类中心开始5 P. R7 J. n$ \, E) U
    2.一种重复直到收敛
    8 _% q0 ~& d( |, R$ l" {  V0 m7 J$ k1 U; O* ~0 M
    期望步骤:把所有的数据点分配到离他们最近的聚类中心。5 y& h2 V3 |$ q0 Q
    最大化步骤:通过取出聚类中所有点的平均来更新聚类中心。
    ! k9 C. `( E5 y6 @
    ; m- a( B# ?- ~: q. c$ m7 g0 [, z它涉及到一个定义聚类中心位置的适应性函数最大化的过程。对于kmeans最大化是计算一个聚类中所有数据点的算数平均得到。
      w2 `3 f! b2 @% J; H* }$ _9 u0 p————————————————) y, Q/ y" v  o- a3 b
    版权声明:本文为CSDN博主「紫钺-高山仰止」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    # U: x$ ^/ M$ t! h& D/ I+ i* b8 V3 Q原文链接:https://blog.csdn.net/qq_43158059/article/details/126789000& ?+ o! x. R, o' Z3 h  x8 c* u% }+ r

      y$ p% ?+ {. X" D: t, F3 p* j" b) J8 s% V, J6 P
    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-10-16 04:22 , Processed in 1.215266 second(s), 51 queries .

    回顶部