QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2713|回复: 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
    【机器学习】无监督学习的概念,使用无监督学习发现数据的特点
    ' h, ~* _; ~7 l' `/ R
    1 O) M: ?1 V6 v5 m" M; f9 }到目前位置,我们主要把注意力集中在监督学习的问题上,数据集中的每个数据点都有一个已知的标签或者目标值。然而如果面对没有已知的输出结果,或者没有人监督学习算法,我们要怎么做。4 J  K' F: I' W

    , Y/ t" N. o  \# N' V7 i这就是无监督学习 。. _" j* a( d7 I9 o  \

    6 u. a) Y; t: @1 K- A( U! ]2 s# P在无监督、非监督学习中了,学习过程仅使用输入数据,没有更多的指导信息,要求从这些数据中提取知识。我们已经讨论了非监督学习众多形式的一种降维。另一个普及的领域就是聚类分析。他的目的是吧数据分为相似元素组成的不同区域中。- P& `8 g; Y& _

    + y  e9 p/ j: J0 k; q9 C在本章中,我们想要理解不同的聚类算法如何从简单到,无标记的数据集中提取特征。这些结构特征,可以用于特征处理,图像处理,甚至是作为无监督学习任务的预处理步骤。
    / v! f, a) D. S5 l, Z; D作为一个具体的例子,我们将对图像进行聚类,将色彩空间降到16位数。
    6 _& I) p5 y. d1 R' \0 _5 N
    $ \* |2 |# `% p" f/ A解决的问题8 M' H7 M9 w9 x) K+ t
    1.K-means聚类和期望最大化是什么?如何在opencv中实现这些算法。0 O. U1 \  E# i5 {3 Z
    2.如何在层次树中使用聚类算法。他带来的好处有哪些。
    5 k4 W, h8 {# N$ ?* ]$ I$ J, W2 b3.如何使用无监督学习,进行预处理,图像处理,分类。
    8 {5 \- W9 P6 g4 J% t. g$ C: W
      X3 r+ Z+ V4 n0 o9 [1 理解无监督学习
    9 M0 n$ n1 ]. m& S8 T无监督学习可能有很多形式,但是他们的目标总是把原始数据转化为更加丰富,更加有意义的表示,这么做可以让人们更容易理解,也可以更方便的使用机器学习算法进行解析。" d9 j/ {; N& a. v" b
    无监督学习的应用包括一下应用:0 U( y& C3 }% k+ M/ l( g9 Z3 l! T
    1降维:他接受一个许多特征的高维度数据表示,尝试对这些数据进行压缩,以使其主要特征,可以使用少量的携带高信息量的数据来表示。0 K9 C- C1 k) S+ Z* k' M' ^
    2因子分析:用于找到导致被观察的到的数据的隐含因素或者未观察到的方面。7 M. K' E& j$ o, S) r: j  W
    3聚类分析:. i, F) ?; ?. W7 U1 i4 E5 {
    尝试把数据分成相似元素组成的不同组。0 T! a* Q- T( i0 ?5 I: W9 W' L
    3 j8 e$ E2 D: ]) \3 `+ N0 L
    无监督学习主要的挑战就是,如何确定一个算法是否出色,或者学习到什么有用内容,通常评估一个无监督学习算法结果的唯一方式是手动检查,并确定结果是否有意义。
    ! h# \# Q% s+ |5 `$ }
    ( |6 u/ p, _) ]5 O7 V3 k3 j; u话虽然如此,但是非监督学习,可以非常有,比如作为预处理或者特征提取的步骤。1 C6 l) W' [: I  A9 B2 T3 ?% C
    - y2 c  ^( r: ]
    2理解K-means聚类9 d6 h3 N; E" F! j/ c' u( \
    Opencv 提供最有用的聚类算法是k-means,因为它会从一个没有标记的多维度数据集中搜寻预设的K个聚类结果。
    ! _. S! O& B( }+ k8 m$ q: ?4 Y; w! _6 M2 Q; F
    它通过两个简单的假设来完成最佳聚类了。3 ?/ g; ^, X( s; K& w3 f
    1 每个聚类中心都是属于该类别的所有数据点的算术平均值
    ; C8 g0 Y) S0 E1 Q1 H" Q+ l2 聚类中的每一个点相对其他聚类中心,更靠近本类别的中心。
    : }0 L" i& @5 u9 l6 }1 G0 o2 W1 x
    / ]! ?1 f% j% {8 i2.1 实现第一个kmeans例子2 o* O3 L) E8 B+ K/ e
    首先,生成一个包含四个不同点集合的数据集。为了强调这是一个非监督的方法,我门在可视化将忽略哪些标签。使用matplotlib进行可视化。( ^, a& g) H8 F- O# Q1 r
    / c" J5 y( ?) G4 A- U8 S: f" I
    import matplotlib.pyplot as plt/ e& l# E! D$ J# {# Z7 o
    import pylab
    + L( F3 n4 j, ffrom sklearn.datasets._samples_generator import make_blobs8 X/ Q6 ?9 S" `1 v. y  k
    3 \4 T3 X+ ^, J- t, [
    plt.style.use('ggplot')+ w/ V8 q  x0 c& n& `' r
    x,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)% {) c  I7 }4 A
    plt.scatter(x[:,0],x[:,1],s=100)
    9 L. N4 U2 d+ q* Q3 A- |$ k3 Ppylab.show(): ^) o- \  e2 C1 D" g" P( i+ N) h

    8 P; E/ Y" p6 G5 D. D5 x
    & o  y+ p/ M6 K" \" N' Y- N1
    % a) ?' ^8 |  H, l9 C5 l9 `2 [2
    , e! R' |9 ?  q3 T* q3. g1 _8 d% E5 i( O
    4
    1 K" I# W$ t1 ?  L( ^7 _5' p4 o4 u. E: q# \9 m* @( M
    6& m1 L$ y) I+ w( t; P; D) P
    7! [2 x: Q5 m' ^7 {  [7 A# Z4 o
    8% q* X7 N) u6 \1 ^4 f2 M7 ?% i/ v# A
    9* w& G9 o* e0 j5 s: u. o! R
    10
    : l, O$ p/ m1 ?* |" c7 y( b! i  t+ F4 J: a3 E' }
    我们创建一个四个不同区域的聚类,centers=4,一共300节点。5 K5 V. v* J; g6 [! _
    如上程序生成图像所示结果。! F0 m3 ]1 Q3 z0 ?; k/ |+ C
    尽管没有给数据分配目标标签,但直接使用肉眼还是可以看出来一共是四类。
    : D! X* u! K. s' ]- _kmeans就可以通过算法办到,无需任何关于目标的标签或者潜在的数据分布的信息。
    4 Z2 x0 z# I, G2 U5 N; k当然尽管,kmeans在opencv中是一个统计模型,不能调用api中的train和predict。相反,使用cv2.kmeans可以直接使用这个算法。。为了使用这个模型,我们需要指定一些参数,比如终止条件,和初始化标志。
    % k* x* R( g0 A9 ?
    8 |8 @2 c9 d, E! L- [- @' j2 B我们让算法误差小于1.0(cv2.TERM_CRITERIA_EPS),或者已经 执行了十次迭代(cv2.TERM_CITTERIA_MAX_ITER)时候终止。6 z3 W9 Q9 [9 G9 T7 M
    3 m% |' H. B9 w- q- O7 Y, b/ U

    2 Y2 ^/ x; v9 e
    , i: X/ L+ y, P( V6 A. A  himport matplotlib.pyplot as plt
    9 u$ t6 k$ A  o! k+ J) @import pylab
    5 W/ Y6 I+ i) Y0 F" `' yfrom sklearn.datasets._samples_generator import make_blobs9 `3 o( Q) D7 {1 t8 W
    import cv2
      t  S) d1 W9 t" timport numpy as np
    : x: ~% W* t$ L* E4 j6 B! ^6 N" {" J2 J, W: n9 }
    plt.style.use('ggplot')
    6 a+ ~2 g( D7 O( R: T- r; a- Ox,y=make_blobs(n_samples=300,centers=4,cluster_std=1.0,random_state=10)
    ! B" ^: z) Q/ J' D4 |4 ^' hplt.scatter(x[:,0],x[:,1],s=100)) A4 ~# ]5 w1 q- Y5 e
    1 H6 p0 m) K+ ]9 x3 m- s+ L
    ( E* S$ p4 p2 K+ [" A6 \
    criteria=(cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER,10,1.0)* e4 f, H) P1 X8 }+ @7 \7 k
    flags=cv2.KMEANS_RANDOM_CENTERS6 \2 e! F) o! D/ N
    compactness,labels,centers=cv2.kmeans(x.astype(np.float32),4,None,criteria,10,flags)& |/ X: M$ Q, `- @) ^8 u2 c
    print(compactness)
    : {9 d% A0 b. u5 [1 a
    % y" F# p( s4 m- I& Mplt.scatter(x[:,0],x[:,1],c=labels,s=50,cmap='viridis')$ r( F. q1 Z$ D, j+ x# u, H
    plt.scatter(centers[:,0],centers[:,1],c='black',s=200,alpha=0.5)4 {# y" o: Q' f
    & G  F9 E* j$ \( x# I
    pylab.show()
    ) z  J4 T5 S" Z2 B* l" O8 Z
    ' M3 e. Q- G1 k" {
    & @8 X# N# }1 M: ~. t+ b5 F. w# S. S. `1 u- b  r/ m" A/ Q
    ) h( }2 K; Q2 z8 I
    ' i  C2 f* `+ P; e0 M. Q+ r
    ; O4 K) ~$ W6 I' I4 r

    : R1 v4 H2 q8 K  N1
    6 i; l6 ?2 m/ u: M$ _1 K3 u# J2
    ; A" W6 b! U2 z1 m3/ {6 [1 B6 i3 C- {. Z' X9 X
    4
    2 }" b/ {8 t7 H2 _3 ~( E$ ~5
    1 a6 ^5 [! Q# H66 P8 W, K2 F- h. B0 C
    7: j" }1 b/ u& ]; r
    8
    4 I( X2 R1 e8 n' r9
    ( _; g( Y( _1 m2 B$ h10$ A. s, j0 r+ H8 c3 G/ w# u% F3 {
    111 X4 b( D5 o7 ~7 F  R0 C( ]& d9 J
    127 l% z+ S8 z7 D/ j# R& S4 `
    13, _5 e' ~; k- X, m  P  Y2 N- t
    142 a+ }" v7 C5 n
    15' P& N" t  \% z: Q
    16
      P  C$ \$ j* J7 i17/ y0 ^6 T3 ^4 j6 _' O9 u3 g1 v
    18! u# U/ c, K6 F
    191 Q. i6 a6 a' U( V, p
    20
    ; J6 n( w: F( \# S: U; w215 S" W5 O: F/ }1 E  w5 L! b1 s7 S8 k
    22; X' B7 H% h7 S1 H# Q' Q
    23
    * O2 C. @8 u( Z243 E2 z. y4 l1 L& f! Y- b9 X
    25
    , ?; N! ?8 |/ `) Q* m: c266 x( p, q4 u, i$ ?7 e
    上面程序结果可以产生图2的效果。
    ! X7 N/ o/ m" j2 T& @" E+ o" S. M. Y7 a  b
    print(compactness)这个变量,表示每个点到它聚类中心的距离平方和。较高紧凑都表明所有的点更靠近他们的聚类中心,较低 的紧凑度表明不同的聚类可能无法的很好区分。! p/ p8 n% v# Q0 O: S0 R/ q
    " L* ?5 b/ q. f9 z, ^1 A2 ^
    当然,这个是非常依赖于x中的真实值。如果点与点之间最初的距离比较大,那我们就很难得到一个非常小的紧凑度。因此,把数据画出来,并按照聚类标签分配不同颜色,可以显示更多信息。. N0 y: |: p9 O" I
    ; t2 {  v: E8 \
    3理解kmeans
    - _2 C9 p9 Q: A# Q" d7 o1 X% dkmeans是聚类众多常见期望最大化中一个具体的例子。简单来说,算法处理的过程如下所示:% D& D7 ?0 Q: @. U2 w0 g) ~
    1.从一些随机的聚类中心开始/ T0 Y; E+ n( _3 i( L1 Y
    2.一种重复直到收敛
    7 N4 A5 q' b7 L0 O( [$ t4 @. g8 e7 `. G
    期望步骤:把所有的数据点分配到离他们最近的聚类中心。
    6 \% o; u5 ^9 Y( N5 ~最大化步骤:通过取出聚类中所有点的平均来更新聚类中心。" ?9 P1 m% L  A

    ! ^  s! }: t  l) C  ?7 n' l' H( k# _它涉及到一个定义聚类中心位置的适应性函数最大化的过程。对于kmeans最大化是计算一个聚类中所有数据点的算数平均得到。
    & U, {2 O6 r5 h. F————————————————
    ! t4 X. X0 t) z' A版权声明:本文为CSDN博主「紫钺-高山仰止」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。* [+ X% T, h$ _; Z: Z. o
    原文链接:https://blog.csdn.net/qq_43158059/article/details/126789000- F" O9 s2 i+ N5 @" q$ C  @

    ' L1 m1 k" i* p! U, l4 b4 E* _
    1 Y# s( i0 a6 A) U( s. ?* b
    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, 2025-8-13 00:12 , Processed in 0.346301 second(s), 50 queries .

    回顶部