QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3504|回复: 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
    【机器学习】无监督学习的概念,使用无监督学习发现数据的特点
    " w% K; D' x( T4 X/ s
    / t3 j9 [0 e6 y% T' Y# T1 m  w到目前位置,我们主要把注意力集中在监督学习的问题上,数据集中的每个数据点都有一个已知的标签或者目标值。然而如果面对没有已知的输出结果,或者没有人监督学习算法,我们要怎么做。
    ) G' ?! }+ @7 F6 L  D$ c1 W5 s4 _
    7 ?- m6 }! i; I3 Z) M6 a2 U* t5 _( X' i  k这就是无监督学习 。9 d5 k) o! A$ Y) n+ n; k
    9 J  j6 }- R. J$ {6 ~
    在无监督、非监督学习中了,学习过程仅使用输入数据,没有更多的指导信息,要求从这些数据中提取知识。我们已经讨论了非监督学习众多形式的一种降维。另一个普及的领域就是聚类分析。他的目的是吧数据分为相似元素组成的不同区域中。; x8 Z$ M& G9 |2 [: U; y+ n

    # q4 B: m: I; U8 j( p  V在本章中,我们想要理解不同的聚类算法如何从简单到,无标记的数据集中提取特征。这些结构特征,可以用于特征处理,图像处理,甚至是作为无监督学习任务的预处理步骤。: A) |  z: B. D- w8 u
    作为一个具体的例子,我们将对图像进行聚类,将色彩空间降到16位数。$ Y, }/ b1 s- {# P* H* x! |- v0 I

    # f8 u# t* H4 W: d$ D! L' i% s解决的问题: I; m7 K. O9 k" n  P. x& K$ ^
    1.K-means聚类和期望最大化是什么?如何在opencv中实现这些算法。' \& f  C6 l# ^* c0 y6 K- i3 w7 {
    2.如何在层次树中使用聚类算法。他带来的好处有哪些。' X6 w% u6 i/ f2 c3 T* C
    3.如何使用无监督学习,进行预处理,图像处理,分类。
    : s6 Z& I8 I4 B7 t# \1 G
    1 Q: K! {; u( u. {6 e2 j- C1 理解无监督学习; H8 P) E1 ?6 [/ @( X+ O
    无监督学习可能有很多形式,但是他们的目标总是把原始数据转化为更加丰富,更加有意义的表示,这么做可以让人们更容易理解,也可以更方便的使用机器学习算法进行解析。
    2 ^  c, g$ C2 Z4 {5 R1 d* I+ S9 v无监督学习的应用包括一下应用:% Q6 e2 d: K# `' _) u+ G4 u) K
    1降维:他接受一个许多特征的高维度数据表示,尝试对这些数据进行压缩,以使其主要特征,可以使用少量的携带高信息量的数据来表示。
    # t, }- z# }! u$ r1 g; T  N* v' [2因子分析:用于找到导致被观察的到的数据的隐含因素或者未观察到的方面。$ o: D7 g, A# y7 n' h
    3聚类分析:  |4 S/ R$ v# A& z
    尝试把数据分成相似元素组成的不同组。* P* n7 Z6 N5 i+ R- `0 h

    8 Q$ E5 }$ |  V8 l% b无监督学习主要的挑战就是,如何确定一个算法是否出色,或者学习到什么有用内容,通常评估一个无监督学习算法结果的唯一方式是手动检查,并确定结果是否有意义。
    ; G9 g5 d0 {3 K1 f/ B. J+ p& S, E
    1 H9 J# k0 X( F9 f7 g) ^话虽然如此,但是非监督学习,可以非常有,比如作为预处理或者特征提取的步骤。, {* S! y% t: j. v  H) |

    . a( |( z+ f( x) t) t2 F/ f1 K2理解K-means聚类
    1 A! ^/ T/ h3 P! X( R7 }Opencv 提供最有用的聚类算法是k-means,因为它会从一个没有标记的多维度数据集中搜寻预设的K个聚类结果。; T- s, q( l3 ^. {

    5 a6 w) y+ L. S8 O6 D6 _8 M0 L, }它通过两个简单的假设来完成最佳聚类了。
    * j- M  P% U( H% P: V  u1 每个聚类中心都是属于该类别的所有数据点的算术平均值
    , G7 h4 @; E2 s! I: K4 U, o2 聚类中的每一个点相对其他聚类中心,更靠近本类别的中心。' Q$ t. S" i6 q3 N6 l0 i+ F% E- E
    ( ^1 C& L( q2 l. o; U5 J. u
    2.1 实现第一个kmeans例子( f$ S$ J7 e: d5 g: G* c! H5 t
    首先,生成一个包含四个不同点集合的数据集。为了强调这是一个非监督的方法,我门在可视化将忽略哪些标签。使用matplotlib进行可视化。
    , @8 l2 `: C4 }5 S: ?
    9 ^, {0 t1 C0 z4 V' q7 ~import matplotlib.pyplot as plt
    ) [/ I" p) g/ [6 S' Oimport pylab+ K- K" _: y7 w/ ?6 d  r
    from sklearn.datasets._samples_generator import make_blobs6 y& |4 C4 D, M: G

    : F" y0 x; i0 S/ x  h6 }# Dplt.style.use('ggplot')( F$ ?  D0 w1 c1 D9 u* S* _
    x,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)8 M+ W2 ]$ D) `& f& N6 f8 n6 |
    plt.scatter(x[:,0],x[:,1],s=100)
    / q1 e* L1 E" ?8 Q' e5 hpylab.show()/ }; A/ _# e* V" T
    6 k/ o0 c1 Y. l' K! x: ~  M

    % M3 _4 ]0 N5 i( F# s& o9 |1" ?$ k4 f" }  x' K. b7 ]' y1 X5 [6 k
    2' q3 C9 d6 H# P6 l9 _; l7 i4 J% x
    3
    $ V& H: Z% t/ ?: e4
    1 t9 H! D/ r6 a% Y; q) A% l5
    9 @0 J1 _, z1 r: w2 L6) h: m/ s$ w8 U' @
    7+ J/ J4 N( j1 E/ o% G3 i( C
    8
    + T9 c/ J( e' Z8 k+ {8 k* Y9' \8 U  P9 C/ W6 g  S6 g! \: p
    10$ J( P" j3 D+ f8 {) o0 z1 \
    ' v& |4 H% U' A! z. c# s6 v) f0 C* p
    我们创建一个四个不同区域的聚类,centers=4,一共300节点。
    % J: B6 S5 C6 [, E如上程序生成图像所示结果。& X3 j$ F* M6 l+ o; K, H, w6 G
    尽管没有给数据分配目标标签,但直接使用肉眼还是可以看出来一共是四类。. o; Q2 P% J6 d. [7 j8 f3 U1 _
    kmeans就可以通过算法办到,无需任何关于目标的标签或者潜在的数据分布的信息。4 z, s. n* s1 x- l% o
    当然尽管,kmeans在opencv中是一个统计模型,不能调用api中的train和predict。相反,使用cv2.kmeans可以直接使用这个算法。。为了使用这个模型,我们需要指定一些参数,比如终止条件,和初始化标志。: Y; F3 H6 a3 o
    + V4 U) \) [. G7 ~+ G
    我们让算法误差小于1.0(cv2.TERM_CRITERIA_EPS),或者已经 执行了十次迭代(cv2.TERM_CITTERIA_MAX_ITER)时候终止。3 h# d7 I: {2 p$ ^2 d

    : Y" S* M7 D2 a0 N8 G9 i' R
    * E+ a: K. o8 x4 k! A% S
    ; @+ y$ |/ D" e: ximport matplotlib.pyplot as plt
    1 Y- E2 j, B" t) |( }8 i: u+ F+ \import pylab
    * p1 p, c! Y$ R8 V$ }from sklearn.datasets._samples_generator import make_blobs/ z2 l0 o8 {8 D/ f  ~9 M
    import cv2
    3 _0 o" x+ _, k3 @& vimport numpy as np0 q3 }1 t% I7 H+ \1 D- I' ~( ~: C3 ]
    # B) T, j# Y$ A5 X2 H% f
    plt.style.use('ggplot')& i5 A" W: R9 C& h  ~& U& `- P2 u" {
    x,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)0 I5 c) N- D7 Z: e* @7 }. ^, Z
    plt.scatter(x[:,0],x[:,1],s=100)
      Q! y; m9 i1 z% B; Y4 C* a& J9 S4 c
      s+ w/ ~) j$ C( X1 L
    criteria=(cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER,10,1.0)
    ) n/ l- e8 X3 P2 W. {* ]flags=cv2.KMEANS_RANDOM_CENTERS
    - W0 O4 D9 n5 l% n9 Icompactness,labels,centers=cv2.kmeans(x.astype(np.float32),4,None,criteria,10,flags)* C6 M" W, f+ B! A- w
    print(compactness)
    0 r) {  \% E; t5 S2 x
    / S6 C! o' U" t' l: t) J* F/ ]plt.scatter(x[:,0],x[:,1],c=labels,s=50,cmap='viridis')
    6 k7 J! N6 Y: v( g) j9 ~plt.scatter(centers[:,0],centers[:,1],c='black',s=200,alpha=0.5)6 }2 R3 |8 v8 s) Z/ _9 B
    # c. F  a* i9 X
    pylab.show()8 a* o0 }9 J- S8 p6 x7 A
    ! H, C' ^8 y: J# G5 `3 x

    % ^6 V+ i7 u$ n) e# d2 R2 U5 O" F5 I. N

    , H4 M4 F" \% E0 P# M+ d( A2 j7 J7 `. u) G6 |7 L4 y

    2 y4 \  k- K* p- z0 q
      |; g( v  h# `17 A" {+ E1 g, ~
    2
    . J" E+ [( A) a) |* X" ?* D35 i6 i( p) A* W( m/ v
    4
    % f% I! ~3 m/ O) j5
    $ ?( N# V- N) T6& U0 b" x1 x0 U* U- h: ?
    7
    ! V: |2 \' {1 y  M6 g+ B8# }2 z% I: C& n8 Y, U. I" l
    95 [6 H  G( H- v& F
    10
    , {; D; [+ k/ J% Q5 _* {11
    ) J( S. U' y! q0 Z( _& z12
    , S& w1 p9 R5 {) ]13
    0 k* a* h* d/ S1 C% |# r149 u  h5 \* H9 n' \' Z4 f' g9 U
    15% z/ o5 ?% h  c  f4 [: r3 ?
    167 z/ e- G, t6 z5 N/ n
    173 e9 v9 p/ i: ^* Q- }& i# v" L
    18
    & G- K( ?# c& u0 g19
    3 C1 j( }) M* c7 \( F20
    & a5 {" t  C2 g21
    2 z6 u  j3 X) V+ j! ?: i1 \* v0 q22( S4 |- O9 O8 i3 g. n0 s
    23
    ! K4 y4 q' A" R  P0 r; \24
    / v; z, I1 \9 _( o9 F25& ?  b8 I& C, K9 z; a& e
    26
    " l8 T3 {; z. ?% L上面程序结果可以产生图2的效果。
    + U  Q6 `. A: [7 u2 J! F: k. V3 [1 y( U
    print(compactness)这个变量,表示每个点到它聚类中心的距离平方和。较高紧凑都表明所有的点更靠近他们的聚类中心,较低 的紧凑度表明不同的聚类可能无法的很好区分。: r/ _- E6 R6 n" C7 |" |
    5 ]/ m" n1 \) g3 |: G! y% ~
    当然,这个是非常依赖于x中的真实值。如果点与点之间最初的距离比较大,那我们就很难得到一个非常小的紧凑度。因此,把数据画出来,并按照聚类标签分配不同颜色,可以显示更多信息。
    8 r$ q2 x+ t4 P: O
    3 h& X& U1 I% e5 {3理解kmeans
    1 Y& @& r) q, skmeans是聚类众多常见期望最大化中一个具体的例子。简单来说,算法处理的过程如下所示:7 t6 b" a3 V, k3 e6 [) i6 c6 A
    1.从一些随机的聚类中心开始, C3 @8 J! t; A  e3 D5 ~
    2.一种重复直到收敛3 Y* w. b3 [9 {) d0 x
    5 Q' N, P; S8 k8 d
    期望步骤:把所有的数据点分配到离他们最近的聚类中心。7 o+ n! _/ b# K2 T- ^
    最大化步骤:通过取出聚类中所有点的平均来更新聚类中心。
    : x( g, \. \! d- D4 o& P  U( n, G+ |
    它涉及到一个定义聚类中心位置的适应性函数最大化的过程。对于kmeans最大化是计算一个聚类中所有数据点的算数平均得到。' ?. l8 z. i" i; W/ m! h
    ————————————————
    5 s5 c- [" d# p6 s8 m- S, t版权声明:本文为CSDN博主「紫钺-高山仰止」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    2 k; {! h# Y% F# p4 z8 P  i6 M原文链接:https://blog.csdn.net/qq_43158059/article/details/126789000
    ( Q/ J4 H6 B0 S6 N& f7 \4 M- ?7 \& l/ ^; r) x# d

    / ?( q, m( X9 Q4 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-10-9 02:30 , Processed in 0.417897 second(s), 50 queries .

    回顶部