文字處理之標籤值labels與原樣本資料的對應

2021-10-23 10:29:15 字數 3054 閱讀 1035

很多時候在處理資料時,樣本資料與標籤值是放在兩個資料結構中儲存的。當樣本資料順序發生變化時,我們需要保證其對應的標籤順序也同時發生變化。

思想很簡單,由於樣本資料的變化是未知的,想要標籤資料隨著樣本資料的變化而變化,最簡單的方法就是將標籤和樣本融合在一起。

例如,在python中,我們可以這樣做:

import numpy as np

data =[[

1,2,

3,1]

,[2,

1,2,

3],[

1,4,

6,7]

,[6,

7,3,

2]]labels =[1

,1,0

,1]completedata = np.c_[data, np.array(labels)

.t]print

(completedata)

np.random.shuffle(completedata)

print

(completedata)

把label放在data的最後一位,即可滿足問題的需求。

拓展:np.c_和np.r_的區別

1. np.c_是矩陣按行「相加」

a = np.array([[

1,2,

3],[

7,8,

9]])

b = np.array([[

4,5,

6],[

1,2,

3]])

print

(np.c_[a, b]

)

輸出結果:

[[1

2345

6][7

8912

3]]

2. np.r_是矩陣按列「相加」

a = np.array([[

1,2,

3],[

7,8,

9]])

b = np.array([[

4,5,

6],[

1,2,

3]])

print

(np.r_[a, b]

)

輸出結果:

[[1

23][

789]

[456

][12

3]]

在使用sklearn中的聚類演算法過程中,得到的一般為聚類結果的標籤值。例如,[1,1,0,1,0,1,0,1,0,1,2,-1,-1,2,3,3,1,-1,-1]這樣的標籤值,如何將聚類結果的_labels值與原樣本對應並列印輸出,是亟待解決的問題。

labels_to_original函式的功能是,將forclusterlist中的樣本集按照labels中的標籤值重新排序,得到按照類簇排列好的輸出結果

# labels為聚類結果的標籤值

# forclusterlist為聚類所使用的樣本集

# 函式的功能是將forclusterlist中的樣本集按照labels中的標籤值重新排序,得到按照類簇排列好的輸出結果

deflabels_to_original

(labels, forclusterlist)

:assert

len(labels)

==len

(forclusterlist)

maxlabel =

max(labels)

numberlabel =

[i for i in

range(0

, maxlabel +1,

1)]-

1)result =[[

]for i in

range

(len

(numberlabel))]

for i in

range

(len

(labels)):

index = numberlabel.index(labels[i]

) result[index]

)return result

聚類的樣本集:forclusterlist = [「類0」,「類1」,「類2」,「雜訊」,「類1」,「類2」,「類1」,「類2」,「類3」,「類1」,「類2」,「類1」,「雜訊」,「類2」,「類2」,「雜訊」]

聚類的標籤值:labels = [0,1,2,-1,1,2,1,2,3,1,2,1,-1,2,2,-1]

使用上述函式執行:

forclusterlist =

["類0"

,"類1"

,"類2"

,"雜訊"

,"類1"

,"類2"

,"類1"

,"類2"

,"類3"

,"類1"

,"類2"

,"類1"

,"雜訊"

,"類2"

,"類2"

,"雜訊"

]labels =[0

,1,2

,-1,

1,2,

1,2,

3,1,

2,1,

-1,2

,2,-

1]result = labels_to_original(labels, forclusterlist)

print

(result)

結果:

[

['類0'],

['類1'

,'類1'

,'類1'

,'類1'

,'類1'],

['類2'

,'類2'

,'類2'

,'類2'

,'類2'

,'類2'],

['類3'],

['雜訊'

,'雜訊'

,'雜訊'

]]

Linux之文字處理

在linux系統中,即使在控制台命令列狀態下,也需要進行大量的文字處理工作。linux系統中幾乎所有的配置檔案都是以純文字形式存在的,我們也要對這些檔案進行編輯工作。linux上常見的文字編輯器有vi vim ed gedit emacs等。本章介紹的文字編輯器就是平常使用最多的vim文字處理器。v...

python之文字處理

函式 open filename,mode filename 訪問的檔案 mode 訪問模式 常見模式作用r 唯讀r 讀寫w 只寫 檔案存在則覆蓋,不存在則建立 w 只寫 檔案存在則覆蓋,不存在則建立 a追加 檔案存在追加到已有內容後 rb讀寫 wb讀寫 ab追加和讀 比如我在這裡先編輯了乙個1.t...

文字處理之SED

高階編輯命令 stream editor,行編輯器 sed是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行儲存在臨時 緩衝區中,稱為 模式空間 pattern space 接著用sed命令處理緩衝區中的 內容,處理完成後,把緩衝區的內容送往螢幕。然後讀入下行,執行下乙個迴圈。如果沒有使諸如...