QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3411|回复: 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
    【机器学习】无监督学习的概念,使用无监督学习发现数据的特点# ~: r2 p0 S0 L6 W. v) R9 ]5 `
    2 ?. b& N  u! g2 J2 D3 l( A
    到目前位置,我们主要把注意力集中在监督学习的问题上,数据集中的每个数据点都有一个已知的标签或者目标值。然而如果面对没有已知的输出结果,或者没有人监督学习算法,我们要怎么做。0 V! A4 p$ J' W5 `( S8 O& o' [# t" c1 U
    9 }: w% C- @! k4 H+ Q0 o7 M
    这就是无监督学习 。; ~1 C4 X' @9 B

    & T+ _0 @! D7 J  N5 @3 [1 q+ f4 H在无监督、非监督学习中了,学习过程仅使用输入数据,没有更多的指导信息,要求从这些数据中提取知识。我们已经讨论了非监督学习众多形式的一种降维。另一个普及的领域就是聚类分析。他的目的是吧数据分为相似元素组成的不同区域中。' G/ E3 Y" X) {" U
    " r, l8 q, A( \' L9 s  l
    在本章中,我们想要理解不同的聚类算法如何从简单到,无标记的数据集中提取特征。这些结构特征,可以用于特征处理,图像处理,甚至是作为无监督学习任务的预处理步骤。
    0 e4 O& S7 u! u$ z作为一个具体的例子,我们将对图像进行聚类,将色彩空间降到16位数。
    , o* C: B8 v& k1 |' K4 S( V  B
    " ~- M" e$ J$ b4 w0 [' R3 T4 \解决的问题8 e. l7 q2 d) Y2 B4 X4 \( z* d* u
    1.K-means聚类和期望最大化是什么?如何在opencv中实现这些算法。2 N/ W/ h7 W; S* _4 X5 {9 T
    2.如何在层次树中使用聚类算法。他带来的好处有哪些。8 {# [2 q8 T7 F- t
    3.如何使用无监督学习,进行预处理,图像处理,分类。
    " U6 ]: q% R/ i$ \4 D
    * A6 H/ L( G6 V: a6 f$ h  D$ s1 理解无监督学习
    2 @8 [# R* O  E" U9 C3 u无监督学习可能有很多形式,但是他们的目标总是把原始数据转化为更加丰富,更加有意义的表示,这么做可以让人们更容易理解,也可以更方便的使用机器学习算法进行解析。
    ; e4 V* o" z! z- c无监督学习的应用包括一下应用:
    : Q2 ?3 i6 w  m1降维:他接受一个许多特征的高维度数据表示,尝试对这些数据进行压缩,以使其主要特征,可以使用少量的携带高信息量的数据来表示。
    , Q1 h. a3 l5 n) K) Q3 G/ r2因子分析:用于找到导致被观察的到的数据的隐含因素或者未观察到的方面。
    ' C3 d  G4 U4 X3聚类分析:
    5 |$ y! V* z2 n- d尝试把数据分成相似元素组成的不同组。
    ( j" |/ u5 R' V$ u& S! B6 B8 {. b/ U
    无监督学习主要的挑战就是,如何确定一个算法是否出色,或者学习到什么有用内容,通常评估一个无监督学习算法结果的唯一方式是手动检查,并确定结果是否有意义。
    $ ]# L* Z2 Q1 y8 |: I/ a" J, _2 A+ B! r+ t( ^# W0 n+ `$ h
    话虽然如此,但是非监督学习,可以非常有,比如作为预处理或者特征提取的步骤。$ e0 K" }0 C1 s% q$ D& i  b" W  u
    & x, `+ c& m# t3 p, @. \
    2理解K-means聚类
    ( S0 g* I% A% `2 B2 W$ Z3 R( FOpencv 提供最有用的聚类算法是k-means,因为它会从一个没有标记的多维度数据集中搜寻预设的K个聚类结果。) _5 ]$ d: |0 _+ g* M

    ) M3 F$ p8 \; `0 H它通过两个简单的假设来完成最佳聚类了。
    : X6 R  O! w) P2 i: h* v3 c1 每个聚类中心都是属于该类别的所有数据点的算术平均值$ h% \5 U5 t" g, {
    2 聚类中的每一个点相对其他聚类中心,更靠近本类别的中心。; [3 ]4 L, K# `% T

    6 }8 `  z8 S. q0 o: P. S2.1 实现第一个kmeans例子
    / b( A; h* U5 _  S首先,生成一个包含四个不同点集合的数据集。为了强调这是一个非监督的方法,我门在可视化将忽略哪些标签。使用matplotlib进行可视化。; p- u* j1 }1 t# Y

    7 x+ p0 O; V: N, f3 N2 a  Eimport matplotlib.pyplot as plt
    6 @) b- F. ]) D- W- {; Aimport pylab
    : I/ [/ {* x% w; [# Wfrom sklearn.datasets._samples_generator import make_blobs
    7 J& Y) w7 S8 x! s. B" |% ]
    ( L2 j; F8 b: Yplt.style.use('ggplot')+ k( a- x. H; q" h
    x,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)
    , q* r: ?$ R/ o+ V% Qplt.scatter(x[:,0],x[:,1],s=100)
    & s0 A  o4 D; ?3 Fpylab.show()
    # H/ g3 S' _# X4 Q' t6 M: W7 l) Y6 O
    - K2 S8 ^: l9 \* u
    1# N) M& C. J& t5 |
    2
    # q! l2 U7 ?9 l5 ~: A! q3
    + G/ \' I, K0 \' `4
    0 M* M" E& _( g8 B5 d6 V5: A3 p# }7 B& N: x2 O: L
    6) N  y# W# u: T* ]7 C8 z. r
    7
    7 Z8 T+ a5 t0 V. H4 G, ^+ ?# Z  J82 {0 {4 x$ Q/ q: n* v0 h
    9
    $ f; e5 I. R* ^# N" v10# l# d' H# x5 z& j, u* F
    # Y$ |/ o, w1 ^1 `
    我们创建一个四个不同区域的聚类,centers=4,一共300节点。; C, p. Y) H) D9 U. ?9 V+ O" U
    如上程序生成图像所示结果。
    5 c1 M2 h+ X! D" \8 c- ^0 r尽管没有给数据分配目标标签,但直接使用肉眼还是可以看出来一共是四类。+ G  t3 _) p: t
    kmeans就可以通过算法办到,无需任何关于目标的标签或者潜在的数据分布的信息。5 ^/ b5 M8 d( S/ s, L- h
    当然尽管,kmeans在opencv中是一个统计模型,不能调用api中的train和predict。相反,使用cv2.kmeans可以直接使用这个算法。。为了使用这个模型,我们需要指定一些参数,比如终止条件,和初始化标志。* C1 u9 d2 M3 r
    0 @! i  o( l! e$ y$ ?1 }
    我们让算法误差小于1.0(cv2.TERM_CRITERIA_EPS),或者已经 执行了十次迭代(cv2.TERM_CITTERIA_MAX_ITER)时候终止。
      ^4 u, e5 i' K/ {; B8 U0 N( {% F/ y& m" E5 |+ B- h0 U

    3 ^4 K* f; v1 Y3 Y' x
    - \3 w+ g* H  c. Ximport matplotlib.pyplot as plt2 c' t0 h6 w2 C8 h& G
    import pylab
    $ `* T' G) y/ V  T: [4 O) Afrom sklearn.datasets._samples_generator import make_blobs
    ! [( M$ a  H5 D1 ?2 b/ k4 fimport cv2
    - G' V. Q7 |! w' o+ l, c* oimport numpy as np
    0 ]( {/ l6 o( ]; j4 o) r! g* d: Q' ?5 R8 Y. g9 @' C
    plt.style.use('ggplot')6 f% f" r' k3 C' B: k9 X
    x,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)
    * Z" [: |+ L' Y  N/ wplt.scatter(x[:,0],x[:,1],s=100)
    8 |. C1 U  w- l6 R2 z8 J) |( k) Y# ], V. ], Y
    ' P8 B& T, Z) L, |8 e. ?
    criteria=(cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER,10,1.0); [& J5 B, b, v  `- B! X
    flags=cv2.KMEANS_RANDOM_CENTERS, }2 n/ C7 D9 U' }9 J3 z4 q: W
    compactness,labels,centers=cv2.kmeans(x.astype(np.float32),4,None,criteria,10,flags)
    . R. ?  u! A4 {6 \3 r& ]print(compactness)
    " C* ]5 D4 w! l
    0 X7 ]( x8 O. _plt.scatter(x[:,0],x[:,1],c=labels,s=50,cmap='viridis')" J* [) X5 o; o1 l* l2 T( E
    plt.scatter(centers[:,0],centers[:,1],c='black',s=200,alpha=0.5)( o5 }! P0 E9 s. r% g( s' p0 C# h6 ]
    2 g$ _8 h! |# f# @/ \
    pylab.show()8 A' u3 K2 N: t$ b. e' f  l, t/ K: \

    + {+ n/ T6 J: @3 r+ m! Y* W5 k
    : w* S1 a* t" `6 H
    & L( ]$ W$ q, b) ?3 S) Z
    4 S" U) y2 T3 ?' j  c, r2 \' i, G
    : U0 N$ I5 n0 Z  o4 V$ R
    ! R$ T. ]' b2 X: \4 _0 V: T3 ?8 {  K1 k9 z) W  D% K1 K
    1
    ) v8 p) N; Q( l* q* S" G6 V23 ~3 c4 }/ t% e3 l
    38 n, G. C, y! k2 J
    4: z# L$ l+ T9 N8 H- S, z
    53 N  {% x7 t  S6 M
    6
    5 \; V) A( O; j3 ~+ [& N7
    : f9 K) V3 x1 i8
    2 F! h$ c0 y& t$ {  t% {% u' e* q' y9: p! z' w1 i4 R4 |2 [) k8 h  |1 B2 }
    10
    4 V: n8 e% ~1 L# R. r  K, e7 B11' j$ ^; \& H7 |6 ^
    12" O6 U! ~, j! Z. q" B9 M
    13, U. M+ h4 a& G, g6 k
    142 K8 U( |( i1 z* g' N3 p
    15% j) M9 [& ~; P; V
    16
    3 `/ |: G% d7 e0 ~17* h0 D: g0 o" F6 H# i; J
    18
    : ^; Q0 F7 v; J7 z19
    " `2 f4 `! {: I3 m: d' b/ B+ I0 m207 @1 h; d1 T3 B( s( Q
    21' o) j9 ?; ?3 |% t! h7 f
    224 L& G$ y9 v( ]
    23) F9 ^( T( J0 J  t/ h% a
    249 j- G3 f" p0 H- r% h$ n' W
    255 _* k) B* |' M( @
    26  ^5 ]7 |+ u! w7 {/ D
    上面程序结果可以产生图2的效果。# w/ ^5 a8 ~- {. y6 ~2 d0 J
    0 l3 t+ a. ?" \: x; p
    print(compactness)这个变量,表示每个点到它聚类中心的距离平方和。较高紧凑都表明所有的点更靠近他们的聚类中心,较低 的紧凑度表明不同的聚类可能无法的很好区分。0 X/ J% Z: i4 K7 A# V

    8 r8 x; l7 C2 U+ y5 T$ _当然,这个是非常依赖于x中的真实值。如果点与点之间最初的距离比较大,那我们就很难得到一个非常小的紧凑度。因此,把数据画出来,并按照聚类标签分配不同颜色,可以显示更多信息。
    " g/ K4 I/ V6 Y& z! H2 W* v6 p" u& N2 s' H/ U0 a6 N1 \3 U
    3理解kmeans
    0 r9 A. T. b; u$ J$ hkmeans是聚类众多常见期望最大化中一个具体的例子。简单来说,算法处理的过程如下所示:
    ; F! v8 {8 c* d. S$ L: f1.从一些随机的聚类中心开始/ x) r& W' A9 @/ l, [
    2.一种重复直到收敛
    - d* X- t  @, S: }
    6 F( u" a. F" s3 E. I$ k4 h' K期望步骤:把所有的数据点分配到离他们最近的聚类中心。
    8 Y+ f, H  y  F4 i# \2 g最大化步骤:通过取出聚类中所有点的平均来更新聚类中心。
    # T6 W+ d8 z  f8 @4 _7 n5 g1 c, d4 v+ \, D0 Q
    它涉及到一个定义聚类中心位置的适应性函数最大化的过程。对于kmeans最大化是计算一个聚类中所有数据点的算数平均得到。& @2 s+ ]0 V, G. C; I2 G6 I: D; u
    ————————————————
    ) ?: ~+ C& J& y; F0 p7 X版权声明:本文为CSDN博主「紫钺-高山仰止」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。" a9 m9 W% Q) R! P9 R  l2 L
    原文链接:https://blog.csdn.net/qq_43158059/article/details/126789000
    8 |$ `" l; Z# ]$ O. }4 T8 G
    ) v" ]: `, o/ h1 D  K+ q2 g
    2 v7 L( X% n& a% ^' d+ `
    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 13:51 , Processed in 0.408910 second(s), 50 queries .

    回顶部