QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3412|回复: 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
    【机器学习】无监督学习的概念,使用无监督学习发现数据的特点
    3 ^8 g1 N8 `% z! Z3 Y4 i# @! a; @& E5 Y7 \2 c  {2 v5 V; u  O8 V0 z
    到目前位置,我们主要把注意力集中在监督学习的问题上,数据集中的每个数据点都有一个已知的标签或者目标值。然而如果面对没有已知的输出结果,或者没有人监督学习算法,我们要怎么做。
    - e: ~( }, e0 T. L: J/ y* i/ Y7 t: V) X
    这就是无监督学习 。4 c# _5 x' S0 V; a, P4 u. _$ M
    5 u' K" t2 V7 ~7 Y; p
    在无监督、非监督学习中了,学习过程仅使用输入数据,没有更多的指导信息,要求从这些数据中提取知识。我们已经讨论了非监督学习众多形式的一种降维。另一个普及的领域就是聚类分析。他的目的是吧数据分为相似元素组成的不同区域中。
    + B3 ]) P$ {* W% C0 h# u) u, i
    $ g! ?; U5 R$ T6 P在本章中,我们想要理解不同的聚类算法如何从简单到,无标记的数据集中提取特征。这些结构特征,可以用于特征处理,图像处理,甚至是作为无监督学习任务的预处理步骤。" m* A% w- e4 G- a+ Q
    作为一个具体的例子,我们将对图像进行聚类,将色彩空间降到16位数。' k7 P6 W* z4 F3 t, R2 q
    ) ]5 R+ R" P/ r% n) d  O
    解决的问题- P( P7 O0 k) D% a
    1.K-means聚类和期望最大化是什么?如何在opencv中实现这些算法。
      L: V" f! Z! ?7 J2.如何在层次树中使用聚类算法。他带来的好处有哪些。' g/ o- H+ O0 v; }; W# P
    3.如何使用无监督学习,进行预处理,图像处理,分类。
      o/ W) M8 b+ D! {" X: o  a8 Q; Z* ^$ M& P6 w7 Y
    1 理解无监督学习; O; k3 W1 S. z, `& h
    无监督学习可能有很多形式,但是他们的目标总是把原始数据转化为更加丰富,更加有意义的表示,这么做可以让人们更容易理解,也可以更方便的使用机器学习算法进行解析。4 k! {, ]% W, e1 H  p
    无监督学习的应用包括一下应用:
    , A) R: l6 E, y9 ?# w& }1降维:他接受一个许多特征的高维度数据表示,尝试对这些数据进行压缩,以使其主要特征,可以使用少量的携带高信息量的数据来表示。
    ( R7 g  T' c8 ?0 `2因子分析:用于找到导致被观察的到的数据的隐含因素或者未观察到的方面。
    # @* P7 X: k1 W$ w; ]3聚类分析:  P5 @- _7 a5 x2 s* w, m0 c
    尝试把数据分成相似元素组成的不同组。
    ' `% N( h, F6 N% S) C" I
    2 P) p7 p( p0 h( Y3 r无监督学习主要的挑战就是,如何确定一个算法是否出色,或者学习到什么有用内容,通常评估一个无监督学习算法结果的唯一方式是手动检查,并确定结果是否有意义。  V6 J; R# Q1 j/ V
    * q6 Y! {0 ~4 J$ Y# w7 z1 O. l
    话虽然如此,但是非监督学习,可以非常有,比如作为预处理或者特征提取的步骤。
    # t, A' W" x% U8 W2 D
    $ e& z8 z0 ]" N+ Z8 z# ^2理解K-means聚类
    , c! R+ E6 @, s) w8 D# k4 F% OOpencv 提供最有用的聚类算法是k-means,因为它会从一个没有标记的多维度数据集中搜寻预设的K个聚类结果。- j6 \" N; }- d) L

    9 H3 n7 U6 J) u2 o' o- F$ @0 W它通过两个简单的假设来完成最佳聚类了。
    5 m8 T( h0 q! A2 a1 t5 _' z1 每个聚类中心都是属于该类别的所有数据点的算术平均值
    9 J3 l/ o# E0 a8 R- R& A" N! K/ x2 聚类中的每一个点相对其他聚类中心,更靠近本类别的中心。/ z) B8 C- z! `3 S9 ~+ \

    0 G% \( @" L6 ?) W2.1 实现第一个kmeans例子
    4 C8 j9 i" _  U5 c: P& [首先,生成一个包含四个不同点集合的数据集。为了强调这是一个非监督的方法,我门在可视化将忽略哪些标签。使用matplotlib进行可视化。
    2 O: N. S0 k" t9 |9 r; s( ]9 s# T  X& e, E8 _
    import matplotlib.pyplot as plt8 V6 O: C$ d" P* ^3 E% r
    import pylab
    * r" G5 H1 L/ E" efrom sklearn.datasets._samples_generator import make_blobs3 P8 {( _* w% g* C

    # }+ Y$ `" Q( x; Pplt.style.use('ggplot')
    $ h; d2 v% \0 }/ F4 ^$ wx,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10): k9 x( }' I  k  ~! M/ v; w& J" A
    plt.scatter(x[:,0],x[:,1],s=100)+ w7 E0 U) p- q
    pylab.show()
    8 I" }$ c- f2 `9 K3 n& X+ G* j/ w2 T% B3 z( M" @- m

    4 B# m) m. d# Q; }1
    " |; ^- b4 n+ E4 H4 w7 x2! ^- g1 F2 ?; ^+ d! G8 W1 V5 C, T
    3
    ' W, }5 m3 b$ O2 u4
    8 V9 V! s( b5 b" s* G$ ?1 [59 D5 F$ T, d8 l; |5 x
    6
    9 H3 p7 y& q3 y2 Q9 H7
    & u$ `: g& g8 ]80 H' ~) l, _+ t6 G9 p
    9( n  {9 Q, F: ^/ S% i
    10/ b; M7 y" n, `2 R: e, v2 h

    $ s% b- J% n% s$ F我们创建一个四个不同区域的聚类,centers=4,一共300节点。/ o* s7 A, N7 x
    如上程序生成图像所示结果。
    , O: i% U$ v4 p0 X尽管没有给数据分配目标标签,但直接使用肉眼还是可以看出来一共是四类。; h& ?1 i! @. o/ N0 a: Z/ e
    kmeans就可以通过算法办到,无需任何关于目标的标签或者潜在的数据分布的信息。" T1 }/ @' s- p3 V
    当然尽管,kmeans在opencv中是一个统计模型,不能调用api中的train和predict。相反,使用cv2.kmeans可以直接使用这个算法。。为了使用这个模型,我们需要指定一些参数,比如终止条件,和初始化标志。6 _8 A4 M3 A- f6 k1 o- X6 K
    / g2 j# H8 w. M. W/ O- ~5 o
    我们让算法误差小于1.0(cv2.TERM_CRITERIA_EPS),或者已经 执行了十次迭代(cv2.TERM_CITTERIA_MAX_ITER)时候终止。
    1 x, v3 f1 `: H2 X
    * A$ x7 j; \3 }& _& f4 ^2 n7 t! `" C- P) |) Z1 S8 R4 ], d
    2 K% z/ P& c& z. w
    import matplotlib.pyplot as plt
    ' I0 u' f; x' ^) }* r9 b: eimport pylab
    1 p  Y  ~4 ?1 J* Afrom sklearn.datasets._samples_generator import make_blobs
    7 Y' B! D$ X0 ^: _import cv2, D/ }) ^2 L2 `; |0 L4 b& I* _# _
    import numpy as np
    - Y* V- z! g" Y3 @$ e4 o+ Y+ @5 g; g% z: R
    plt.style.use('ggplot'). D; }. g, e3 e+ z
    x,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)
    8 E* H* x$ T; X! V! `, W9 Gplt.scatter(x[:,0],x[:,1],s=100)
    ! O! w+ i0 y5 W& F+ o8 |9 L+ x) q0 O% l

    / {5 C! M, c& [5 c) q6 g, @criteria=(cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER,10,1.0)
    ; L) c! a( o/ j4 u8 kflags=cv2.KMEANS_RANDOM_CENTERS4 ~' S. ~" @( h' p- _
    compactness,labels,centers=cv2.kmeans(x.astype(np.float32),4,None,criteria,10,flags)
    ' {# T- v4 e9 i: ~; l' H$ Lprint(compactness)" X5 ]% B( w7 U7 z! f! Q
      q! ?# B7 z+ \0 ^( K% P
    plt.scatter(x[:,0],x[:,1],c=labels,s=50,cmap='viridis')8 @* V) k0 S8 E
    plt.scatter(centers[:,0],centers[:,1],c='black',s=200,alpha=0.5)' h& W/ r1 y% n3 C& t

    ! c' Y5 d# w0 w1 M. c. L: z8 J0 Qpylab.show()# ?4 ^: w" E1 A
    . k- _6 h0 n8 g  \
    : U% n/ b5 |# o' ?
    7 I2 A7 d- p; X( Q' ]$ [4 j
    9 p2 N! N( U1 g8 e$ L; p
    6 U2 N- ?9 L+ H: }. {

    4 r. _" k3 b8 |: P' G) n: u$ o% \
    10 u/ a, a6 g$ L8 C
    2, x# w& L" Q/ g& p9 p# n1 L- K- c4 ?# P
    3" ?& \# X8 Z6 {4 J9 o
    4' E  _" H4 q3 V( \
    5
      D$ v8 F8 B  }7 L4 E' p6  o+ S& U, w+ v+ z& P) V# g) o
    77 B' \. ^! ~- m; c. Y
    8
    & l0 G- L# G! ^/ H+ u9
    , y& p6 O; m4 N0 _; l% b  v10
    : |( v! a5 c  J4 S5 w% j11
    % v' C5 s" J& y6 q) @12
    9 I7 i. N+ L/ a$ {# Z$ ?3 L+ d* x13; L. w2 P+ U2 Y  [) U3 {
    14% |- J% \2 Z7 j) M
    150 j( a* G8 x( V% R
    16
    ; s! C' \6 x' N9 U# g, G1 E17) I# Z1 Y. l1 M% G- r6 d. @
    188 ~! ?+ p$ D- F; V
    19$ y: O0 E/ n. X9 C
    20; E0 \# G% r5 c3 P7 ?& w7 C" E
    21, N0 H! U! S1 |$ Z  I
    22- u3 V% h7 i2 L2 w/ H
    233 q0 ~- i1 J' W: z1 k, g3 z1 a
    24+ v; s" k: y$ s: x8 ?, T
    25
    1 e3 z2 @4 C4 }! W* d; D26
    . l8 B, L3 L& l" _上面程序结果可以产生图2的效果。
    : U+ y$ d" u2 ~2 w, d) s0 F
    9 S+ T' J6 f% c) j$ U( a, B& Bprint(compactness)这个变量,表示每个点到它聚类中心的距离平方和。较高紧凑都表明所有的点更靠近他们的聚类中心,较低 的紧凑度表明不同的聚类可能无法的很好区分。
    0 s# f7 X  I% l: t0 _
    ' I. }$ ~/ }" P当然,这个是非常依赖于x中的真实值。如果点与点之间最初的距离比较大,那我们就很难得到一个非常小的紧凑度。因此,把数据画出来,并按照聚类标签分配不同颜色,可以显示更多信息。
    * j7 ~6 c3 c# J6 [5 Z' Z5 @8 y# M- R# T+ E
    3理解kmeans
    , c) ~3 `4 L1 Z3 B( B- B' dkmeans是聚类众多常见期望最大化中一个具体的例子。简单来说,算法处理的过程如下所示:
      h4 i+ o! e, p2 k: I1.从一些随机的聚类中心开始
    - j5 l: k6 @, {9 B+ [  v' |- u1 _2.一种重复直到收敛
    % s2 S; l  |# r( }; [  f
    7 M& i+ ~# `0 d( |' O期望步骤:把所有的数据点分配到离他们最近的聚类中心。- X- B* @7 a" h/ f7 e
    最大化步骤:通过取出聚类中所有点的平均来更新聚类中心。
    ' A. h' ~. x' |, ^6 p! ?) O- R$ l5 a' ?* o  [! N
    它涉及到一个定义聚类中心位置的适应性函数最大化的过程。对于kmeans最大化是计算一个聚类中所有数据点的算数平均得到。
    + |; Q2 B" N9 n" v. t& H————————————————# a# Q% c6 D8 Q# i& A. b$ H  o
    版权声明:本文为CSDN博主「紫钺-高山仰止」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    , |+ C/ X0 o3 b$ y* O$ }1 p原文链接:https://blog.csdn.net/qq_43158059/article/details/126789000
    $ i4 N* D; s$ Y* f1 J, x" f7 U+ S5 S: k% g# T5 c

    + k6 b4 k8 X+ }( ?% L8 C
    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-9 14:10 , Processed in 0.417267 second(s), 51 queries .

    回顶部