我正在处理步态识别问题,本研究的目的是用于用户身份验证
我有 36位用户
的数据我已为每个用户成功提取了每个样本(或示例)的143个特征(36行和143列)
(换句话说,我有36个例子,每个例子都提取了143个特征。因此,为每个人创建了一个名为 All_Feat 36 * 143 的矩阵用户)。
顺便说一句,列表示提取的要素数,行表示每个要素的样本数(示例)。
然后我将数据分为两个部分,培训和测试(培训矩阵包含 25行和143列,而测试矩阵包含 11行和143列)。
然后,对于每个用户,我将矩阵(All_Feat)分成两个矩阵(训练矩阵和测试矩阵)。
培训矩阵包含(25行(示例)和143列),而测试矩阵包含(11行)和143列)。
我是分类和这个东西的新手
我想使用机器学习(神经网络)来分类这些功能。
因此,我需要为每个用户创建参考模板的第一步(称为培训阶段)
这可以通过使用用户的功能(数据)训练分类器以及剩余的用户(35个用户被视为冒名顶替者)来完成。
根据我所读到的,训练神经网络需要两个类,第一类包含真实用户的所有训练数据(例如User1)并标记为1,而第二类具有标记为0的冒名顶替者的训练数据(这是二进制分类,授权用户为1,冒名顶替者为0)。
**现在我的问题是:**
1-我不知道如何创建这些类!
2-例如,如果我想为 User1 训练神经网络,我有这些变量,输入和目标。我应该为这些变量分配什么?
输入 = User1的培训矩阵和User2,User3,...... User35的培训矩阵?
目标 =我应该为这个矩阵分配什么?
我真的很感激任何帮助!
答案 0 :(得分:1)
试试这个:https://es.mathworks.com/help/nnet/gs/classify-patterns-with-a-neural-network.html
一些注意事项:
您说过,对于每个用户,您已经提取了136个功能。听起来每个用户只有一次重复(即用户尝试过使用过一次系统)。但是,我不知道您的数据来源,但我不知道它没有某种类型的随机性。你提到步态分析,这听起来每次用户使用系统时给定一个用户的记录数据会有所不同。换句话说:用户使用你的系统,你捕获数据,你提取136个功能(数字);然后,用户再次使用系统,但提取的136个功能将略微不同。因此,您应该为每个用户提供几个示例来训练分类器。在" matlab矩阵"你的矩阵每个例子应该有一个COLUMN,136行(每个你的特征)。由于您应该为每个用户重复多次(例如10次),因此您的大矩阵应该类似于:136行x 360列。
你应该"创造"每个用户一个新的神经网络。给定用户(例如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"表示" User1"和" B"意味着"非用户1"。
然后,您应该分割数据(训练数据,验证数据,测试数据)以训练神经网络等。请记住仅为测试阶段保存一些用户,例如,列车矩阵不应包含五个用户的任何列:user2,user6,user7,user10,user20(50列)。
我想你明白了。
问候。
************ 更新: ************************** ****
此示例假定用户选择/指示其名称,然后系统使用神经网络对用户进行身份验证(如密码)。我会给你一个随机数字的小例子。
我们假设您已经记录了15位用户的数据(但将来您会有更多)。你记录步态数据"当他们用你的录音设备做某事的时候。从录制的信号中提取一些功能,让我们假设您提取了5个功能(5个数字)。因此,每次用户使用机器时,您都会得到5个数字。即使用户是相同的,每次5个数字也会不同,因为记录的信号具有一些随机性。因此,要训练神经网络,您必须拥有每个用户的几个示例。让我们说每个用户重复执行18次。
总结一下这个例子:
有15位用户可以进行实验。
每次用户使用系统时,您都会记录5个数字(功能)。你会得到一个特征向量。在matlab中它将是一个专栏。
对于实验,每个用户已经重复了18次。
现在你必须为每个用户创建一个神经网络。为此,您必须构建几个矩阵。
假设您要创建用户2(U2)的神经网络(NN)。 NN将特征向量分为2类: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表示在重复/示例编号1期间获得用户2的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的剩余3个示例(15%)以及用户[U5,U6,U7]的每个示例。因此,这将是一个6行和57列(3 + 3 * 18)的矩阵。
- 测试矩阵的目标矩阵:2行和57列的矩阵:3列[1 0]和54列[0 1]。
重要。每个矩阵的列应具有随机顺序以改进训练。也就是说,不要将U2的所有示例放在一起,然后将其他示例放在一起。对于这个例子,为了清楚起见,我把它们放在了一起。显然,如果改变输入矩阵的顺序,你必须在目标矩阵中使用相同的顺序。
要使用MATLAB,您必须传递两个矩阵:inputMatrix和targetMatrix。 inputMatrix将加入训练,验证和测试输入矩阵。而targetMatrix与目标相同。因此,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)重复此过程以获取他/她的神经网络。