logo
Loading...

pca問題 - Cupoy

您好:一、因為最近幾次範例都有,想請問紅框中的程式碼是什麼意思?ex. X和y在一開始已經分開,為何...

ml100-2,ml100-2-d59

pca問題

2019/06/25 上午 10:33
機器學習共學討論版
顏皓祥
觀看數:67
回答數:5
收藏數:4
ml100-2
ml100-2-d59

您好:

一、

因為最近幾次範例都有,想請問紅框中的程式碼是什麼意思?

ex. X和y在一開始已經分開,為何此段程式可以X[ ]中,可以對y做判斷?

ex. mean()在這裡是對什麼作平均呢? (找資料是說這用在調整 text 的 X Y Z 軸位置,請問為什麼要調整?)

ex.X[ y== label,1].mean()+1.5,為何要+1.5呢? 


二、

另外,

1,centers在這邊的功能是?因為後面的好像沒有用到?

2.由於iris'的feature有Setosa', 'Versicolour', ' Virginica' 3個,

所以PCA的n_component=3目的是讓我們熟悉程式流程,但其實沒有降維嗎?


三、

最後


第一行程式碼,y = np.choose(y,[1,2,0]),為什麼要將y中的0,1,2映射為[1,2,0]嗎?


不好意思問題比較多,麻煩了謝謝!

回答列表

  • 2019/06/26 下午 05:53
    William
    贊同數:2
    不贊同數:0
    留言數:0

    這個範例 主要是要是為了讓鳶尾花三個類別的資料在三維空間中表示出來,

    這行程式是要讓三個類別的名字被顯示在每個群的旁邊,

    比如"setosa"這個類別是類別0,我們會希望將"setosa"字的位置放在資料為類別0的附近,以方便查看,但如果不加1.5,會把"setosa"字直接放在資料群的中間,如下圖

    顯得不好看,故加上1.5讓"setosa"字顯示在旁邊。

  • 2019/06/26 下午 06:08
    陳明佑 (Ming You Chen)
    贊同數:1
    不贊同數:0
    留言數:1

    Ans1(1)

    y=label 的結果, 會傳回是否等於 label 這個數字的 True/False 組成的 List

    雖然切開了, 但是因為 X, y 的 index 沒換過, 所以結果出來的 index list 可以用

    Ans1(2)

    這邊是對 X 的3個維度, 對於不同的 label 分別做平均, 而ax.text3D 只是加上文字標籤

    簡單說就是在三群的中心點,  分別標上 Setosa/Versicolour/Virginica 這三個單字

    Ans1(3)

    加1.5....只是因為排版問題, 你可以試試看換成不加或者-2, 就可以知道差異

    基本上只是希望文字不要蓋住或被資料點蓋住

    Ans2(1)

    對, center 沒作用, 刪除後一樣能跑 

    (因為我不是出題者, 只能以程式執行結果而論)

    Ans2(2)

    雖然沒有降維, 但是解釋度仍舊是由高到低

    圖中可以很清晰看出 : 

    往右下的這個維度, 一個維度就差不多將三組資料分開了

    往上的維度, 則可以分清楚Virginica與Setosa

    往左下的維度上, 已經沒有剩多少解釋性可以區別這三組

    Ans3

    基本上只是調整三種花的顏色顯示, 讓相鄰的兩種花色對比較明顯而已,

    沒有太大意義, 你也可以試著調整其他順序

  • 2019/06/26 下午 06:10
    William
    贊同數:0
    不贊同數:0
    留言數:0

    問:X和y在一開始已經分開,為何此段程式可以X[ ]中,可以對y做判斷?

    答:雖然的確X和y在不同變數當中,但是X是特徵 y是類別 資料是成對的,所以在執行程式'y==0'得到的,是一個一維的true/false列表,


    當y=0 列表相對應位置的值為true,反之則false

    ,我們再用這個新得到的true/false列表去對應X中對到true的資料,如下圖


    。經過這樣的程式,就從X中取出類別為0的資料了。

  • 2019/06/26 下午 06:19
    William
    贊同數:2
    不贊同數:0
    留言數:0

    接著,我們可以看出X其實是有四個維度的

    所以X[y==0,0]就是X[y==0]第一個column的值,也就是類別為0的第一個特徵的值

    若我們將其取平均,則可以得到類別為0的資料點中,第一項特徵的平均值,在後續的圖中就是藍色資料群'setosa'資料集在第一維度的平均值。

    依此類推X[y==0,1].mean和X[y==0,2].mean就是在類別0底下第二個特徵和第三個特徵的平均值。

    這樣我們就可以找到類別0'setosa'這群資料的中心點了。

  • 2019/06/26 下午 06:28
    William
    贊同數:0
    不贊同數:1
    留言數:2

    而我們要將"setosa"這個文字串顯示在類別0的資料集旁,就是要讓它顯示在這群資料中心點的附近,

    ax.text3D(第一維度,第二維度,第三維度,字串內容)

    如我要將'i am handsome'字串顯示在座標(1,1,1)的位置上

    可參考https://matplotlib.org/3.1.0/api/_as_gen/mpl_toolkits.mplot3d.art3d.Text3D.html

    故我們使用

        ax.text3D(X[y == 0, 3].mean(),

                  X[y == 0, 0].mean()+1.5,

                  X[y == 0, 2].mean() , 'setosa')讓文字得以被顯示在資料群旁