dotnet / machinelearning

ML.NET is an open source and cross-platform machine learning framework for .NET.
https://dot.net/ml
MIT License
9.02k stars 1.88k forks source link

mlnet classification fails if file is too big #5989

Open boffman opened 2 years ago

boffman commented 2 years ago

System Information (please complete the following information):

Describe the bug I have a large semicolon-separated dataset with 1833 columns per row and 37437 rows in it. Running the cli tool mlnet on it fails with an error message if the file is too big:

One or more errors occurred. (Specified column index 1833 is out of range. This dataset has 1 columns and column index must be non-negative and less than the size of the collection.)

I have tried with running on the first 130 rows, and the last 130 rows of the dataset (= 1,067,118 bytes), and it starts. But if I run with the 140 (or more) first, or last, rows, it fails with the error. 140 rows makes the file 1,149,894 bytes in size.

However, the same dataset (full sized) works with the ML Model Builder inside Visual Studio!

To Reproduce Steps to reproduce the behavior:

  1. Create a CSV file with 1833 columns per row, 8364 characters/row and 140 rows in total (test1.txt)
  2. Run command: mlnet classification --dataset test1.txt --has-header false --ignore-cols 0 --label-col 1833 --train-time 1800 --name EcnML_test --output EcnML
  3. mlnet aborts with the error after a few seconds

Expected behavior The classification should start and work the same with 140 rows, just as with 130 rows in the dataset.

Screenshots, Code, Sample Projects One row of the dataset looks like this:

2017-12-25_27_1;2640;volte;1;0.7575757575757576;0.7329261521377013;0;0.1489;0.125;0.5344652812975165;0.5;0;0;0;short;5;auto;885;medium;0;auto;0;medium;0;auto;0;0.16140865737344093;medium;0;auto;0;medium;0;auto;0;medium;4;volte;900;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;0;0;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;0.02012072434607646;medium;0;auto;0;medium;0;auto;0;medium;0;volte;950;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;0;0;2;0.8254769921436588;0.8745141588006663;0.0882;0.2941;0.6;0.6130258489609731;0.5416666666666666;2;0;3;medium;0;auto;0;medium;0;auto;0;medium;5;auto;895;0.483492296404989;medium;0;auto;0;medium;0;auto;0;medium;6;volte;911;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;0;1;1;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;0.24949698189134809;medium;0;auto;0;medium;0;auto;0;medium;0;volte;909;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;0;0;3;0.8866442199775533;0.9039422543031649;0.1333;0.5333;0.885;0.7014698428788647;0.5416666666666666;2;3;3;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;1;medium;0;auto;0;medium;0;auto;0;medium;3;volte;883;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;0;0;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;0.02112676056338028;short;5;volte;968;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;0;0;4;0.8383838383838383;0.9694614103275958;0.0476;0.2142;0.175;0.6469842878864673;0.4166666666666667;1;0;2;short;0;auto;937;medium;0;auto;0;medium;0;auto;0;0.2164343360234776;medium;0;auto;0;medium;0;auto;0;medium;0;volte;893;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;0;0;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;0.13380281690140844;medium;0;auto;0;medium;0;auto;0;medium;4;volte;905;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;0;0;5;0.7323232323232324;0.714047751249306;0.035;0.1052;0.04;0.5674100354789661;0.4166666666666667;0;0;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;916;0.04475421863536317;medium;0;auto;0;medium;0;auto;0;medium;8;volte;916;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;0;0;0;medium;0;auto;0;medium;0;auto;0;medium;7;auto;910;0.0613682092555332;medium;0;auto;0;medium;0;auto;0;medium;0;volte;908;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;0;0;6;0.8142536475869809;0.7978900610771793;0.0789;0.2368;0.943;0.6370755195134313;0.6666666666666666;1;2;2;medium;0;auto;0;medium;0;auto;0;medium;0;auto;901;0.32700660308143803;medium;0;auto;0;medium;0;auto;0;medium;2;volte;911;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;2;1;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;0.5482897384305835;short;0;volte;913;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;0;0;7;0.8473625140291807;0.7962243198223209;0.0555;0.5;0.103;0.6705524581855044;0.375;0;0;2;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;0.2413793103448276;medium;0;auto;0;medium;0;auto;0;medium;7;volte;906;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;1;1;5;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;1;medium;0;auto;0;medium;0;auto;0;medium;3;volte;902;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;0;0;8;0.8355780022446689;0.7867851193781232;0.0344;0.1206;0.466;0.7108464267612773;1;2;1;4;medium;0;auto;0;medium;0;auto;0;medium;4;auto;891;0.6522377109317682;medium;0;auto;0;medium;0;auto;0;medium;0;volte;883;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;0;0;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;0.22132796780684105;short;0;volte;918;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;0;0;9;1;0.7290394225430317;0.238;0.4761;0.875;1;0.6666666666666666;4;2;2;medium;0;auto;0;medium;0;auto;0;medium;2;auto;868;0.9889948642699926;medium;0;auto;0;medium;0;auto;0;medium;3;volte;876;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;1;1;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;0.6287726358148893;medium;0;auto;0;medium;0;auto;0;medium;0;volte;916;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;0;0;10;0.9365881032547699;0.9616879511382566;0.0263;0.3157;0.73;0.7698935631018753;0.7916666666666666;1;4;3;medium;0;auto;0;medium;0;auto;0;medium;4;auto;900;0.7307410124724871;medium;0;auto;0;long;3;volte;900;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;0;1;1;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;0.2625754527162978;medium;0;auto;0;medium;0;auto;0;medium;5;volte;928;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;0;0;11;0.9287317620650954;0.8833981121599112;0.1;0.4;1;0.9216928535225545;0.5;1;2;3;medium;0;auto;0;medium;0;auto;0;medium;7;auto;890;0.6082171680117389;medium;0;auto;0;medium;0;auto;0;medium;0;volte;880;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;2;4;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;0.8551307847082495;medium;0;auto;0;medium;0;auto;0;medium;2;volte;898;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;0;0;12;0.7194163860830527;0.9578012215435869;0.0508;0.1016;0.077;0.7835783071464775;0.08333333333333333;0;0;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;0.02347762289068232;medium;0;auto;0;medium;0;auto;0;medium;5;volte;914;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;0;0;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;0.02012072434607646;medium;0;auto;0;medium;0;auto;0;medium;8;volte;922;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;0;0;13;0.9354657687991021;1;0.0882;0.2941;0.526;0.8132285859097821;0.4166666666666667;0;2;0;medium;0;auto;0;medium;0;auto;0;medium;4;auto;904;0.28686720469552457;short;5;volte;895;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;2;3;1;medium;0;auto;0;medium;0;auto;0;medium;6;auto;933;0.744466800804829;medium;0;auto;0;medium;0;auto;0;medium;2;volte;902;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;0;0;14;0.8922558922558923;0.8184342032204331;0.3157;0.5263;0.765;0.9827673593512417;0.4583333333333333;5;0;1;short;3;auto;886;medium;0;auto;0;medium;0;auto;0;1;medium;0;auto;0;medium;0;auto;0;medium;6;volte;880;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;1;2;1;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;0.579476861167002;medium;0;auto;0;medium;0;auto;0;medium;3;volte;906;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;0;0;0;0;0;0;0;0;0;0;0;0;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;0;0;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;medium;0;auto;0;0;0;0;0

Additional context Add any other context about the problem here.

LittleLittleCloud commented 2 years ago

Does the mlnet cli works with full size dataset? The error indicates that in some rows of data there's more than 1833 columns. So it's probably that there're some rows between L130 to L200 that doesn't match the header of this dataset and has more columns.

boffman commented 2 years ago

@LittleLittleCloud No, the mlnet cli fails with the mentioned error on the full dataset. I also verified that all rows have the same number of separator characters by:

awk -F";" '{print NF}' test1.txt | sort | uniq -c
    140 1835

...that is, all 140 lines in the file had 1835 semicolons in them. (OK maybe it has 1835 columns then, not 1833)

But actually, now when I tried it again by using the same exact row repeating for 140 times, it started... So I guess it must be some issue with the data in it..

I have attached the 140 row test1.txt that fails for me as a zip file, if you (or anyone else) want to have a look/try it. test1.zip