我在将制表符分隔的输入文件加载到MATLAB的nprtool时遇到了困难,我认为这是因为nprtool的GUI不支持加载混合数据类型。我要加载的.tab文件大约有1100个数据样本(行),每个样本看起来像这样:
864 1342470776.212023000 172.25.177.41 155.34.234.20 HTTP 440 58689 http-alt GET http://i.cdn.turner.com/cnn/.e/img/3.0/global/header/hdr-main.gif image/png,image/*;q=0.8,*/*;q=0.5 gzip,deflate 0.000094000 http://www.cnn.com/
上面只是输入向量中的一个样本。我尝试使用nprtool的GUI加载文件,但它无法正确识别数据。所有数据都被视为’textdata’,’data’部分有些杂乱数据。然后我尝试通过脚本而不使用GUI来操作,但这种方法抛出了错误(如下)。有什么解决方法吗?以下是我用来加载文件的脚本片段以及错误。任何帮助都将不胜感激。谢谢!
text1 = fopen('/Users/cgarry/Desktop/CRANEUM/output.tab');pacTargets = importdata('/Users/cgarry/Desktop/CRANEUM/data.tab','\t');pacInputs = textscan(text1,'%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s');fclose(text1);inputs = pacInputs;targets = pacTargets;% Create a Pattern Recognition NetworkhiddenLayerSize = 10;net = patternnet(hiddenLayerSize);% Setup Division of Data for Training, Validation, Testingnet.divideParam.trainRatio = 70/100;net.divideParam.valRatio = 15/100;net.divideParam.testRatio = 15/100;% Train the Network[net,tr] = train(net,inputs,targets);% Test the Networkoutputs = net(inputs);errors = gsubtract(targets,outputs);performance = perform(net,targets,outputs);% View the Networkview(net)% Plots% Uncomment these lines to enable various plots.%figure, plotperform(tr)%figure, plottrainstate(tr)%figure, plotconfusion(targets,outputs)%figure, ploterrhist(errors)>> nnetError using trainscg (line 97)Inputs X{1,1} is not numeric or logical.Error in network/train (line 106)[net,tr] = feval(net.trainFcn,net,X,T,Xi,Ai,EW,net.trainParam);Error in nnet (line 21)[net,tr] = train(net,inputs,targets);
回答:
没错,MATLAB神经网络不支持混合数据类型。但别担心,有多种方法可以处理这个问题。最简单的方法是分类你的数据。例如,所有包含HTTP的数据可以用1表示,其他数据可以用2、3等表示。还有其他一些软件可用。我认为R语言的神经网络包可以处理这个问题(不确定)。