QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3441|回复: 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
    【机器学习】无监督学习的概念,使用无监督学习发现数据的特点! H7 S1 `* Y' w( w0 m
    5 R+ t1 s' o, U
    到目前位置,我们主要把注意力集中在监督学习的问题上,数据集中的每个数据点都有一个已知的标签或者目标值。然而如果面对没有已知的输出结果,或者没有人监督学习算法,我们要怎么做。3 T4 m6 r4 C0 q1 J( [7 v

    ! Y' e! S! t: r$ r2 `这就是无监督学习 。
    ; b% Z  V% d1 c% S+ P; I# f
    # e8 {0 D3 C) o# I9 ]7 X2 s) F在无监督、非监督学习中了,学习过程仅使用输入数据,没有更多的指导信息,要求从这些数据中提取知识。我们已经讨论了非监督学习众多形式的一种降维。另一个普及的领域就是聚类分析。他的目的是吧数据分为相似元素组成的不同区域中。
    5 d1 H2 K0 ~' N3 ?( E* J8 P: F# ^, x3 d0 \/ }
    在本章中,我们想要理解不同的聚类算法如何从简单到,无标记的数据集中提取特征。这些结构特征,可以用于特征处理,图像处理,甚至是作为无监督学习任务的预处理步骤。( y. s- i+ h) q: E3 F9 d+ D7 p0 \
    作为一个具体的例子,我们将对图像进行聚类,将色彩空间降到16位数。
    ; i! j7 Y7 `( u7 p. O0 z9 J* t2 u
    # E1 O! D2 e: s8 r" Z, e0 X1 @解决的问题: w/ Y, r  y, {8 Z1 `
    1.K-means聚类和期望最大化是什么?如何在opencv中实现这些算法。
    % `" S3 [% k- g' {# E2 X. W9 E1 k1 ?2.如何在层次树中使用聚类算法。他带来的好处有哪些。
    % I7 w2 z7 Y  x% t3.如何使用无监督学习,进行预处理,图像处理,分类。
    6 f" B0 T; ^! x+ r* T4 o
    / \& X- a/ q3 {; d" e7 p4 i* T1 理解无监督学习
    ' Q6 i7 s! T$ `* p  T8 l% {# s' m无监督学习可能有很多形式,但是他们的目标总是把原始数据转化为更加丰富,更加有意义的表示,这么做可以让人们更容易理解,也可以更方便的使用机器学习算法进行解析。
    ! H7 W2 u! J0 M无监督学习的应用包括一下应用:; e  P: V- m5 {) N2 M
    1降维:他接受一个许多特征的高维度数据表示,尝试对这些数据进行压缩,以使其主要特征,可以使用少量的携带高信息量的数据来表示。
    7 _/ c7 r/ w: R+ f" M: x2因子分析:用于找到导致被观察的到的数据的隐含因素或者未观察到的方面。2 c' @7 g7 Q; I; Y$ f, D, W
    3聚类分析:- Y: i: C2 p1 u# d- T- {: ~/ K
    尝试把数据分成相似元素组成的不同组。; y+ D2 Z+ n9 A' D! x) z1 R4 h
    ! \2 f7 N6 d% a1 U
    无监督学习主要的挑战就是,如何确定一个算法是否出色,或者学习到什么有用内容,通常评估一个无监督学习算法结果的唯一方式是手动检查,并确定结果是否有意义。: f: s7 p! J4 j# P; L& P

    * W# z; t2 o; N- p话虽然如此,但是非监督学习,可以非常有,比如作为预处理或者特征提取的步骤。
    , ?6 _+ X, H* _, X2 D2 w" F
    7 z8 E- o& T: F5 z# @5 m& \2理解K-means聚类
    & a; P7 R, I( ^. t* j. Y( ?6 sOpencv 提供最有用的聚类算法是k-means,因为它会从一个没有标记的多维度数据集中搜寻预设的K个聚类结果。& r- r* N) s' ]! v% e/ z7 h

    % E% S6 P# s7 s% g& B5 ^它通过两个简单的假设来完成最佳聚类了。4 D1 d% s- S- B. g0 e
    1 每个聚类中心都是属于该类别的所有数据点的算术平均值
    ) J0 i4 O0 s6 y6 z- {8 I2 ]1 S2 聚类中的每一个点相对其他聚类中心,更靠近本类别的中心。
    ( ^- B2 Q4 E& u! C" G% p) q( L* Q2 |" z3 |/ f) T4 M  `. w
    2.1 实现第一个kmeans例子
    $ R5 i" A- ^& B. |首先,生成一个包含四个不同点集合的数据集。为了强调这是一个非监督的方法,我门在可视化将忽略哪些标签。使用matplotlib进行可视化。" s& Q+ w. x& y; Z* ^/ |- h

    3 L. G7 Q, S& ^0 Vimport matplotlib.pyplot as plt
      S7 b5 x" e) x3 Ximport pylab
    % v( ]3 l  C8 Y; R7 _, Z  X; M7 Efrom sklearn.datasets._samples_generator import make_blobs+ T. i: W2 t8 W  K+ g' \

    ( A2 F! U" [1 b, L' L9 Dplt.style.use('ggplot')
    - m8 f3 }' y% a2 a, S+ zx,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)  M4 e; ^2 i3 o- a0 _2 k
    plt.scatter(x[:,0],x[:,1],s=100)
    8 }( C# ]4 W7 e- E" ]& npylab.show()
    . v0 T  e2 Z" f3 ^) Y0 }1 [
    ! |* @5 ~, h+ O1 K
    5 L) i2 [" H% u% _$ F. c: }! d1- u/ N* s" y1 |4 I1 z5 Y$ p
    2
    6 d3 _' b  Q; o0 k' |5 ~* h3
    0 }( k5 B! _& b# x2 A8 H) a4 o4  I# V. d6 o; m; n
    5' P( V, S" S1 A! B. r; b8 K
    62 W- T3 p  l+ f  o, q( U4 N
    7
    5 D4 O! C* l+ Q+ {85 s- N& q& e& w" i5 a& P. t" [$ u
    91 \, J6 q) q' E, M! F
    10
    ; b1 U7 x  R& @7 n* w8 L8 U7 z. G$ b" h
    9 j, h* _7 W1 r) [4 u我们创建一个四个不同区域的聚类,centers=4,一共300节点。
    9 Q. p+ m) Q6 ?% A如上程序生成图像所示结果。
    # y5 c. ^, W0 ~- H: q2 }8 _尽管没有给数据分配目标标签,但直接使用肉眼还是可以看出来一共是四类。
    " ]/ m% F. D/ D% b) Okmeans就可以通过算法办到,无需任何关于目标的标签或者潜在的数据分布的信息。
    5 ]7 v/ t1 l9 W7 [) _当然尽管,kmeans在opencv中是一个统计模型,不能调用api中的train和predict。相反,使用cv2.kmeans可以直接使用这个算法。。为了使用这个模型,我们需要指定一些参数,比如终止条件,和初始化标志。+ ~& V; j- |' E; E+ k, G0 j
    6 J& F# M2 O& g; M
    我们让算法误差小于1.0(cv2.TERM_CRITERIA_EPS),或者已经 执行了十次迭代(cv2.TERM_CITTERIA_MAX_ITER)时候终止。' Z5 ^  K. t6 k* }- o2 k
    5 `( }8 `3 K; p1 Y
    . F8 J0 H: d4 Z( S; ^" d' k

    ( L" x- h8 n+ z0 d" M. x. A) Vimport matplotlib.pyplot as plt! q. Q  J: Y9 G1 e* {1 ?" L) c
    import pylab
      k  h- H& o2 B) B, efrom sklearn.datasets._samples_generator import make_blobs- B' b5 f6 z+ |& ?
    import cv2" W2 L2 x. ]1 [" Z# {6 I8 h
    import numpy as np
    % d% a" J8 I/ i( `6 Q! o; i
    / G0 j( X: D* K0 x) cplt.style.use('ggplot')
    6 L% W) C5 a- i; c( N1 N& n0 bx,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)* O6 U% E! t/ m7 e8 W2 ?
    plt.scatter(x[:,0],x[:,1],s=100)% H' S5 A! C* j# W

    $ _; C6 B7 v0 g5 @/ \
    . _* D% m, v3 icriteria=(cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER,10,1.0)
    9 S( O7 t! @; Z' I) E! x& `8 y% M8 l. B! }flags=cv2.KMEANS_RANDOM_CENTERS* ~8 b/ @" U! f2 m4 n6 o
    compactness,labels,centers=cv2.kmeans(x.astype(np.float32),4,None,criteria,10,flags)- W9 ^" G0 I5 z
    print(compactness)
    4 G9 Y7 S  ?2 G5 D/ W; Y# P# y1 X: O1 a7 r
    plt.scatter(x[:,0],x[:,1],c=labels,s=50,cmap='viridis')! ?: d8 J! e. m( b' ?' Z# N
    plt.scatter(centers[:,0],centers[:,1],c='black',s=200,alpha=0.5)
    ' M  ]. m) o% l+ K0 k7 Q
    0 b- J3 \. p3 `- a6 q* n1 m* O" opylab.show()
    + _: S4 G5 ~" u+ V7 V4 p9 _0 f
    ; j- Y! d6 L( Z7 u) A. f3 p8 Z
    5 W, e) @- s! C! ~1 k
    + T- G8 I1 F( ~! h
    9 O2 s8 s& k( f* Q
    , U2 ~7 E+ z0 E  B
    9 e+ r' `: S9 m5 U) E* X& x0 z& I; M0 z5 I4 w
    1
      Q: E7 a: ~1 P' d2+ o9 @7 J- f0 D/ ]1 q
    3
    - Y* @9 d1 R7 D% o5 V! ^49 I& _7 ^3 Y: _' U
    5! r) v" `, U5 z( l
    6
    2 e) I$ t* W4 _1 y7
    8 i: T* v9 j, I9 }8# S2 R+ [* A, a$ B  U5 i5 C8 k
    9* `" Q) J* @1 c2 k( _. p
    10
    2 v3 E9 H* X/ q. U: f. ?11. u" t" p5 x' A; J" V
    12
    ! Z6 t5 Z; f, v+ A- u7 i7 S' Y13
    2 a$ I( ]# Y- @14, `: v- ]3 X; r: M+ Y- g8 @
    15
    ) `, o( k/ v% ^  j! s4 ?3 V16
    3 _3 f- Z( y' p" m4 |) Z! T$ n17
    7 G, e& T; o( j$ k+ R185 ~9 Y" O2 X# K* b
    19( r. {' J* o: F: d! e# d8 Z
    20! U* L. \" B3 B2 c9 [- m
    216 F( j2 S, S* c# d
    22
    , c/ L7 J5 M+ J7 o1 h23
    8 u0 H8 O# }6 f; }7 D) H! ]2 D24; p( n0 @. V" z
    25
    " `8 h7 w- J6 Z. E- p* c26
    6 J2 R# `1 k/ _5 E" R上面程序结果可以产生图2的效果。
      M" r/ d- S7 `8 m; Z4 F$ y, P' G3 u! e* p. K' i6 H+ e
    print(compactness)这个变量,表示每个点到它聚类中心的距离平方和。较高紧凑都表明所有的点更靠近他们的聚类中心,较低 的紧凑度表明不同的聚类可能无法的很好区分。
    ; ^1 B' ^# E5 {# U
      e+ E3 H6 j; R: q9 _: N. w& n当然,这个是非常依赖于x中的真实值。如果点与点之间最初的距离比较大,那我们就很难得到一个非常小的紧凑度。因此,把数据画出来,并按照聚类标签分配不同颜色,可以显示更多信息。- O/ R9 x9 L7 F6 r
    : B% B/ C. `9 Q# D/ y7 d
    3理解kmeans, c/ |( R+ v5 t
    kmeans是聚类众多常见期望最大化中一个具体的例子。简单来说,算法处理的过程如下所示:- W9 D# N* s3 V/ Q, \
    1.从一些随机的聚类中心开始9 i7 A, {% T$ |* {; U
    2.一种重复直到收敛4 f! S# M! n; S$ O1 ?' a
    % S& V) L6 h6 W2 ~- h
    期望步骤:把所有的数据点分配到离他们最近的聚类中心。6 V. d# X, e4 d$ h# m0 |' p
    最大化步骤:通过取出聚类中所有点的平均来更新聚类中心。
    ) `3 m& t5 S9 x, h- q/ L
    % R& W1 \. ?# N它涉及到一个定义聚类中心位置的适应性函数最大化的过程。对于kmeans最大化是计算一个聚类中所有数据点的算数平均得到。
    ; Z0 M( `% Y# p  U————————————————7 q3 }, @4 c8 ^$ x
    版权声明:本文为CSDN博主「紫钺-高山仰止」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    9 ~" t5 I- X& W( t  ~7 E( _6 h原文链接:https://blog.csdn.net/qq_43158059/article/details/126789000% s3 g6 j1 X9 v9 X

    , |& I& d7 K8 B" O$ e8 m8 a& A, V) H% y
    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:39 , Processed in 0.572032 second(s), 51 queries .

    回顶部