資料預處理:原始資料集快速分類的方法,numpy的使用技巧,資料的row=mask的column
阿新 • • 發佈:2018-12-31
問題
假如資料集有3類,怎麼把一個龐大的陣列集3類,放在不同的數組裡。
分析
首先龐大資料集分類,肯定不能一個一個遍歷,而且強烈避免個人的操作,需要藉助於numpy處理。
示例
資料集,可以看出資料集為3類,我們要x也分成3類
x = [[1,2],[2,9],[3,9],[4,4],[5,9],[6,6],[7,7],[8,8],[9,9]]
y = [0, 0, 0, 1, 1, 1, 2, 2, 2]
先轉化為numpy
x = np.array([[1,2],[2,9],[3,9],[4,4],[5,9],[6,6],[7,7],[8,8],[9,9]]) y = np.array([0, 0, 0, 1, 1, 1, 2, 2, 2]) x array([[1, 2], [2, 9], [3, 9], [4, 4], [5, 9], [6, 6], [7, 7], [8, 8], [9, 9]]) y array([0, 0, 0, 1, 1, 1, 2, 2, 2])
得到每個類別在y中的標記,也可以說是在x中的標記,value是指類別的名稱或者ID,3個類別得到3個標記陣列
labels = [y == value for value in range(3)] print(labels) [array([ True, True, True, False, False, False, False, False, False]), array([False, False, False, True, True, True, False, False, False]), array([False, False, False, False, False, False, True, True, True])]
根據標記陣列得到,對應x中的3組資料,記住這裡應該是x的row=mask的column,假如x是一維的,x的column=mask的column也可以自適應。
t = [x[ci] for ci in labels]
print(t)
[array([[1, 2],
[2, 9],
[3, 9]]),
array([[4, 4],
[5, 9],
[6, 6]]),
array([[7, 7],
[8, 8],
[9, 9]])]
#%%
# 假如x是一維的,x的column=mask的column也可以自適應。
t1 = [y.T[ci] for ci in labels]
print(t1)
t2 = [y[ci] for ci in labels]
print(t2)
[array([0, 0, 0]), array([1, 1, 1]), array([2, 2, 2])]
[array([0, 0, 0]), array([1, 1, 1]), array([2, 2, 2])]