簡體   English   中英

在 MATLAB 中訓練用於用戶識別的神經網絡

[英]training neural network for user recognition in MATLAB

我正在研究步態識別問題,本研究的目的是用於用戶身份驗證

我有36 個用戶的數據

我已經成功為每個樣本(或示例)提取了 143 個特征,每個用戶(36 行和 143 列)

(換句話說,我有 36 個示例,每個示例提取了 143 個特征。因此,為每個用戶創建了一個名為All_Feat36*143矩陣)。

順便說一下,代表提取特征的數量,行代表每個特征的樣本(示例)數量。

然后我將數據分為訓練和測試部分(訓練矩陣包含25 行 143 列,而測試矩陣包含11 行和 143 列)。

然后,對於每個用戶,我將矩陣(All_Feat)划分為兩個矩陣(訓練矩陣和測試矩陣)。

訓練矩陣包含(25 行(示例)和 143 列) ,而測試矩陣包含(11 行和 143 列)。

我是分類和這些東西的新手

我想使用機器學習(神經網絡)對這些特征進行分類。

因此,第一步我需要為每個用戶創建一個參考模板(稱為訓練階段)

這可以通過使用用戶的特征(數據)和剩余的用戶(35 個用戶被視為冒名頂替者)訓練分類器來完成。

根據我讀過的內容,訓練神經網絡需要兩個類,第一個類包含真實用戶(例如 User1)的所有訓練數據並標記為 1 ,而第二個類包含標記為 0 的冒名頂替者的訓練數據(即二元分類,1 代表授權用戶,0 代表冒名頂替者)。

**現在我的問題是:**

1-我不知道如何創建這些類!

2- 例如,如果我想為User1訓練神經網絡,我有這些變量input 和 target 我應該為這些變量分配什么?

應該輸入= User1 的訓練矩陣和 User2、User3、.....User35 的訓練矩陣?

目標= 我應該給這個矩陣分配什么?

我真的很感激任何幫助!

試試這個: https : //es.mathworks.com/help/nnet/gs/classify-patterns-with-a-neural-network.html

一些注意事項:

  1. 你說,對於每個用戶,你已經提取了 136 個特征。 聽起來您對每個用戶只有一次重復(即該用戶已嘗試使用該系統一次)。 但是,我不知道您數據的來源,但我不知道它沒有某種類型的隨機性。 你提到了步態分析,這聽起來像是給定的一個用戶每次使用系統時記錄的數據都會不同。 換句話說:用戶使用你的系統,你捕獲數據,你提取 136 個特征(數字); 然后,用戶再次使用該系統,但提取的 136 個特征會略有不同。 因此,您應該為每個用戶獲取多個示例來訓練分類器。 就“matlab 矩陣”而言,您的矩陣應該為每個示例有一個 COLUMN 和 136 行(每個特征)。 由於您應該為每個用戶重復多次(例如 10 次),因此您的大矩陣應該類似於:136 行 x 360 列。

  2. 您應該為每個用戶“創建”一個新的神經網絡。 給定一個用戶(例如 User4),您使用該用戶的樣本和其他幾個用戶(User1、User3、User5...)的樣本創建一個數據集(一個新矩陣)。 您進行二元分類(案例:“user4”對“其他用戶”)。 訓練后,建議使用其他用戶的數據測試分類器,這些用戶的數據在訓練階段不存在(例如 User2 和其他人)。 由於您正在進行二進制分類,因此您的矩陣應該如下所示:

例如,您有每個用戶的 10 次試驗(示例)。 您想創建一個神經網絡來檢測用戶 User1。 矩陣應該是這樣的:(符號cU1_t1表示:具有用戶 1 特征的列,試驗 1) input_matrix = [cU1_t1; cU1_t2; ...; cU1_t10; cU2_t1; ...; cU36_t10]

目標矩陣應該是這樣的: target = 一個矩陣,它的前 10 列是 [1, 0],其他 350 列是 [0, 1]。 這意味着前 10 列屬於類型 A,其他列屬於類型 B。在這種情況下,“類型 A”表示“用戶 1”,“類型 B”表示“非用戶 1”。

然后,您應該對數據(訓練數據、驗證數據、測試數據)進行分段以訓練神經網絡等等。 記住只為測試階段保存一些用戶,例如,訓練矩陣不應該有五個用戶的任何列:user2、user6、user7、user10、user20(50 列)。

我想你應該已經明白了。

問候。

************更新: ********************************

此示例假設用戶選擇/指示其名稱,然后系統使用神經網絡對用戶進行身份驗證(如密碼)。 我會給你一個隨機數的小例子。

假設您已經記錄了 15 個用戶的數據(但將來您將擁有更多)。 當他們用你的錄音設備做某事時,你從他們那里記錄“步態數據”。 從記錄的信號中提取一些特征,假設您提取了 5 個特征(5 個數字)。 因此,每次用戶使用機器時,您都會得到 5 個號碼。 即使用戶相同,5個數字每次都會不同,因為記錄的信號有一定的隨機性。 因此,要訓練神經網絡,您必須擁有每個用戶的多個示例。 假設每個用戶執行 18 次重復。

總結一下這個例子:

  • 有 15 個用戶可用於實驗。

  • 用戶每次使用系統時,您記錄 5 個號碼(功能)。 你得到一個特征向量 在 matlab 中,它將是一個 COLUMN。

  • 對於實驗,每個用戶執行了 18 次重復。

現在您必須為每個用戶創建一個神經網絡。 為此,您必須構建多個矩陣。

假設您要創建用戶 2 (U2) 的神經網絡 (NN)。 NN 會將特征向量分為兩類:U2 和 NotU2。 因此,您必須使用此類示例訓練和測試 NN。 組 NotU2 表示它不是 U2 的任何其他用戶,但是,您不應該使用您在實驗中擁有的每個其他用戶的數據來訓練 NN。 這將是作弊(認為您無法獲得世界上每個用戶的數據)。 因此,要創建訓練數據集,您將排除某些用戶在訓練期間(驗證數據集)和訓練后(測試數據集)測試 NN 的所有重復。 在本例中,我們將使用用戶 {U1,U3,U4} 進行驗證,使用用戶 {U5,U6,U7} 進行測試。

因此,您構造以下矩陣:

  • 訓練輸入矩陣它將有 12 個 U2 示例(多於或少 70%)和每個用戶示例 {U8,U9,...,U14,U15}。 每個示例都是一列,因此,訓練矩陣將是一個 5 行 156 列 (12+8*18) 的矩陣。 我將按如下順序訂購:[U2_ex1, U2_ex2, ..., U2_ex12, U8_ex1, U8_ex2, ..., U8_ex18, U9_ex1, ..., U15_ex1,...U15_ex18]。 其中 U2_ex1 表示具有用戶 2 在重復/示例編號 1 期間獲得的 5 個特征的列向量。

    -- 訓練矩陣的目標矩陣。 它是一個 2 行 156 列的矩陣。 每列j代表示例j的正確類。 該列由零組成,在表示類別的行中有一個 1。 由於我們只有 2 個類,因此矩陣只有 2 行。 我會說 U2 類將是第一個(因此該類的每​​個示例的列向量將是 [1 0]),另一個類 (NotU2) 將是第二個(因此每個示例的列向量這個類的將是 [0 1])。 顯然,這個矩陣的列與訓練矩陣的順序相同。 因此,根據我使用的順序,目標矩陣將是:12 列 [1 0] 和 144 列 [0 1]。

  • 驗證輸入矩陣它將有 3 個 U2 示例(多於或少 15%)和每個用戶示例 [U1,U3,U4]。 因此,這將是一個 6 行 57 列的矩陣 (3+3*18)。

    -- 驗證矩陣的目標矩陣:2行57列的矩陣:3列[1 0]和54列[0 1]。

  • 測試輸入矩陣它將包含 U2 (15%) 的其余 3 個示例和用戶 [U5,U6,U7] 的每個示例。 因此,這將是一個 6 行 57 列 (3+3*18) 的矩陣。

    -- 測試矩陣的目標矩陣:2行57列的矩陣:3列[1 0]和54列[0 1]。

重要的。 每個矩陣的列應該具有隨機順序以改進訓練。 也就是說,不要將 U2 的所有示例放在一起,然后再將其他示例放在一起。 在這個例子中,為了清楚起見,我把它們放在了一起。 顯然,如果你改變輸入矩陣的順序,你必須在目標矩陣中使用相同的順序。

要使用 MATLAB,您必須傳遞兩個矩陣:inputMatrix 和 targetMatrix。 inputMatrix 將連接訓練、驗證和測試輸入矩陣。 並且targetMatrix 與targets 相同。 因此, inputMatrix 將是一個 6 行 270 列的矩陣。 targetMatrix 將有 2 行和 270 列。 為清楚起見,我會說前 156 列是訓練列,然后是 57 列驗證列,最后是 57 列測試列。

MATLAB 命令將是:

% Create a Pattern Recognition Network
hiddenLayerSize = 10; %You can play with this number
net = patternnet(hiddenLayerSize);

%Specify the indices of each matrix
net.divideFcn = 'divideind';
net.divideParam.trainInd = [1: 156];
net.divideParam.valInd = [157:214];
net.divideParam.testInd = [215:270];

% % Train the Network
[net,tr] = train(net, inputMatrix, targetMatrix);

在打開的窗口中,您將能夠看到神經網絡的性能。 輸出對象“net”是經過訓練的神經網絡。 如果需要,您可以將其與新數據一起使用。

對每個其他用戶(U1、U3、...U15)重復這個過程以獲得他/她的神經網絡。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM