·ÖÏíweb¿ª·¢ÖªÊ¶

×¢²á/µÇ¼|×î½ü·¢²¼|½ñÈÕÍÆ¼ö

Ö÷Ò³ ITÖªÊ¶ÍøÒ³¼¼ÊõÈí¼þ¿ª·¢Ç°¶Ë¿ª·¢´úÂë±à³ÌÔËӪά»¤¼¼Êõ·ÖÏí½Ì³Ì°¸Àý
µ±Ç°Î»ÖãºÊ×Ò³ > ´úÂë±à³Ì

ML.NET ʾÀý£º»Ø¹éÖ®ÏúÊÛÔ¤²â

·¢²¼Ê±¼ä£º2023-09-06 02:25ÔðÈα༭£ºÉòСÓê¹Ø¼ü´Ê£º.NET

дÔÚÇ°Ãæ

×¼±¸½üÆÚ½«Î¢ÈíµÄmachinelearning-samples·­Òë³ÉÖÐÎÄ£¬Ë®Æ½ÓÐÏÞ£¬ÈçÓдí©£¬Çë´ó¼Ò¶à¶àÖ¸Õý¡£
Èç¹ûÓÐÅóÓѶԴ˸ÐÐËȤ£¬¿ÉÒÔ¼ÓÈëÎÒ£ºhttps://github.com/feiyun0112/machinelearning-samples.zh-cn

eShopDashboardML - ÏúÊÛÔ¤²â

ML.NET °æ±¾API ÀàÐÍ״̬ӦÓóÌÐòÀàÐÍÊý¾ÝÀàÐͳ¡¾°»úÆ÷ѧϰÈÎÎñËã·¨
v0.7¶¯Ì¬ API×îа汾ASP.NET Core WebÓ¦ÓóÌÐòºÍ¿ØÖÆÌ¨Ó¦ÓóÌÐòSQL Server ºÍ .csv ÎļþÏúÊÛÔ¤²â»Ø¹éFastTreeTweedie »Ø¹é

eShopDashboardMLÊÇÒ»¸öʹÓÃML.NET ½øÐУ¨Ã¿¸ö²úÆ·ºÍÿ¸öµØÇø£©ÏúÊÛÔ¤²âµÄWebÓ¦ÓóÌÐò¡£

¸ÅÊö

Õâ¸öÖÕ¶ËʾÀýÓ¦ÓóÌÐòͨ¹ýÕ¹ÏÖÒÔÏÂÖ÷Ìâ×ÅÖØ½éÉÜML.NET APIµÄÓ÷¨:

  1. ÈçºÎѵÁ·£¬½¨Á¢ºÍÉú³ÉMLÄ£ÐÍ
    • ʹÓÃ.NET CoreʵÏÖÒ»¸ö¿ØÖÆÌ¨Ó¦ÓóÌÐò¡£
  2. ÈçºÎʹÓþ­¹ýѵÁ·µÄMLÄ£ÐÍ×öϸöÔµÄÏúÊÛÔ¤²â
    • ʹÓÃASP.NET Core RazorʵÏÖÒ»¸ö¶ÀÁ¢µÄ£¬µ¥ÌåWebÓ¦ÓóÌÐò¡£

¸ÃÓ¦ÓóÌÐò»¹Ê¹ÓÃÒ»¸öSQL ServerÊý¾Ý¿â´æ´¢³£¹æ²úƷĿ¼ºÍ¶©µ¥ÐÅÏ¢£¬¾ÍÏñÐí¶àʹÓÃSQL ServerµÄµäÐÍWebÓ¦ÓóÌÐòÒ»Ñù¡£ÔÚ±¾ÀýÖУ¬ÓÉÓÚËüÊÇÒ»¸öʾÀý£¬Òò´ËĬÈÏÇé¿öÏÂʹÓÃlocaldb SQLÊý¾Ý¿â£¬Òò´Ë²»ÐèÒªÉèÖÃÕæÕýµÄSQL Server¡£ÔÚµÚÒ»´ÎÔËÐÐWebÓ¦ÓóÌÐòʱ£¬½«´´½¨localdbÊý¾Ý¿â²¢°üº¬Ê¾ÀýÊý¾Ý¡£

Èç¹ûҪʹÓÃÕæÕýµÄSQL Server»òAzure SQLÊý¾Ý¿â£¬Ö»Ðè¸ü¸ÄÓ¦ÓóÌÐòÖеÄÁ¬½Ó×Ö·û´®¼´¿É¡£

ÕâÊÇWebÓ¦ÓóÌÐòµÄÒ»¸öÏúÊÛÔ¤²âÆÁÄ»½ØÍ¼Ê¾Àý£º

ÑÝÁ·£ºÈçºÎÉèÖÃ

Á˽âÈçºÎÔÚ Visual Studio ÖÐÉèÖÃÒÔ¼°¶Ô´úÂëµÄ½øÒ»²½ËµÃ÷£º

  • ÔÚ Visual Studio ÖÐÉèÖà eShopDashboard ²¢ÔËÐÐWebÓ¦ÓóÌÐò

  • ´´½¨ºÍѵÁ·ÄúµÄMLÄ£ÐÍ
    • ´Ë²½ÖèÊÇ¿ÉÑ¡µÄ£¬ÒòΪWebÓ¦ÓóÌÐòÒÑÅäÖÃΪʹÓÃÔ¤ÏÈѵÁ·µÄÄ£ÐÍ¡£ µ«ÊÇ£¬Äú¿ÉÒÔ´´½¨×Ô¼ºµÄѵÁ·Ä£ÐÍ£¬²¢½«Ô¤ÏÈѵÁ·µÄÄ£ÐÍÓëÄú×Ô¼ºµÄÄ£Ðͽ»»»¡£

ÑÝÁ·£ºML.NET´úÂëʵÏÖ

ÎÊÌâ

Õâ¸öÎÊÌâÊÇ»ùÓÚ֮ǰµÄÏúÊÛÇé¿öÎ§ÈÆµØÇøºÍ²úÆ·½øÐÐÏúÊÛÔ¤²â

Êý¾Ý¼¯

ΪÁ˽â¾öÕâ¸öÎÊÌ⣬Äú½¨Á¢ÁËÁ½¸ö¶ÀÁ¢µÄMLÄ£ÐÍ£¬ËüÃÇÒÔÒÔÏÂÊý¾Ý¼¯×÷ΪÊäÈ룺

Êý¾Ý¼¯ÁÐ
products statsnext, productId, year, month, units, avg, count, max, min, prev
country statsnext, country, year, month, max, min, std, count, sales, med, prev

ML ÈÎÎñ - »Ø¹é

Õâ¸öʾÀýµÄMLÈÎÎñÊǻع飬ËüÊÇÒ»¸öÓмලµÄ»úÆ÷ѧϰÈÎÎñ£¬ÓÃÓÚ´ÓÒ»×éÏà¹ØµÄÌØÕ÷/±äÁ¿ÖÐÔ¤²âÏÂÒ»¸öÖÜÆÚµÄÖµ£¨ÔÚ±¾ÀýÖÐÊÇÏúÊÛÔ¤²â£©¡£

½â¾ö·½°¸

ΪÁ˽â¾öÕâ¸öÎÊÌ⣬Ê×ÏÈÎÒÃǽ«½¨Á¢MLÄ£ÐÍ£¬Í¬Ê±¸ù¾ÝÏÖÓÐÊý¾ÝѵÁ·Ã¿¸öÄ£ÐÍ£¬ÆÀ¹ÀÆäÓжàºÃ£¬×îºóʹÓÃÄ£ÐÍÔ¤²âÏúÊÛ¡£

×¢Ò⣬¸ÃʾÀýʵÏÖÁËÁ½¸ö¶ÀÁ¢µÄÄ£ÐÍ£º

  • ÏÂÒ»¸öÖÜÆÚ£¨Ô£©²úÆ·ÐèÇóÔ¤²âÄ£ÐÍ
  • ÏÂÒ»¸öÖÜÆÚ£¨Ô£©µØÇøÏúÊÛÔ¤²âÄ£ÐÍ

µ±È»£¬µ±Ñ§Ï°/Ñо¿´ËʾÀýʱ£¬Äú¿ÉÒÔÖ»¹Ø×¢ÆäÖÐÒ»¸ö³¡¾°/Ä£ÐÍ¡£

1. ½¨Á¢Ä£ÐÍ

ÄúÐèҪʵÏֵĵÚÒ»²½ÊǶ¨ÒåÒª´ÓÊý¾Ý¼¯Îļþ¼ÓÔØµÄÊý¾ÝÁУ¬ÈçÏÂÃæµÄ´úÂëËùʾ£º

½¨Á¢²¢ÑµÁ·Ä£ÐÍ

var textLoader = mlContext.Data.TextReader(new TextLoader.Arguments ???????????????????????{ ???????????????????????????Column = new[] { ???????????????????????????????new TextLoader.Column("next", DataKind.R4, 0 ), ???????????????????????????????new TextLoader.Column("productId", DataKind.Text, 1 ), ???????????????????????????????new TextLoader.Column("year", DataKind.R4, 2 ), ???????????????????????????????new TextLoader.Column("month", DataKind.R4, 3 ), ???????????????????????????????new TextLoader.Column("units", DataKind.R4, 4 ), ???????????????????????????????new TextLoader.Column("avg", DataKind.R4, 5 ), ???????????????????????????????new TextLoader.Column("count", DataKind.R4, 6 ), ???????????????????????????????new TextLoader.Column("max", DataKind.R4, 7 ), ???????????????????????????????new TextLoader.Column("min", DataKind.R4, 8 ), ???????????????????????????????new TextLoader.Column("prev", DataKind.R4, 9 ) ???????????????????????????}, ???????????????????????????HasHeader = true, ???????????????????????????Separator = "," ???????????????????????});

È»ºó£¬ÏÂÒ»²½Êǹ¹½¨×ª»»¹ÜµÀ£¬²¢Ö¸¶¨ÒªÊ¹ÓÃʲôѵÁ·Æ÷/Ëã·¨¡£
ÔÚ±¾ÀýÖУ¬Äú½«½øÐÐÒÔÏÂת»»£º

  • Á¬½Óµ±Ç°ÌØÕ÷Éú³ÉÃûΪNumFeaturesµÄÐÂÁÐ
  • ʹÓöÀÈȱàÂëת»»productId
  • Á¬½ÓËùÓÐÉú³ÉµÄÌØÕ÷Éú³ÉÃûΪ¡®Features¡®µÄÐÂÁÐ
  • ¸´ÖÆ¡°next¡±Áн«ÆäÖØÃüÃûΪ¡°Label¡±
  • Ö¸¶¨¡°Fast Tree Tweedie¡±ÑµÁ·Æ÷×÷ΪËã·¨Ó¦ÓÃÓÚÄ£ÐÍ

ÔÚÉè¼Æ¹ÜµÀÖ®ºó£¬Äú¿ÉÒÔ½«Êý¾Ý¼¯¼ÓÔØµ½DataViewÖУ¬¶øÇҴ˲½ÖèÖ»ÊÇÅäÖã¬DataViewÊÇÑÓ³Ù¼ÓÔØ£¬ÔÚÏÂÒ»²½ÑµÁ·Ä£ÐÍ֮ǰÊý¾Ý²»»á±»¼ÓÔØ¡£

var trainingPipeline = mlContext.Transforms.Concatenate(outputColumn: "NumFeatures", "year", "month", "units", "avg", "count", "max", "min", "prev" ) ???.Append(mlContext.Transforms.Categorical.OneHotEncoding(inputColumn:"productId", outputColumn:"CatFeatures")) ???.Append(mlContext.Transforms.Concatenate(outputColumn: "Features", "NumFeatures", "CatFeatures")) ???.Append(mlContext.Transforms.CopyColumns("next", "Label")) ???.Append(trainer = mlContext.Regression.Trainers.FastTreeTweedie("Label", "Features"));var trainingDataView = textLoader.Read(dataPath);

2. ѵÁ·Ä£ÐÍ

ÔÚ½¨Á¢¹ÜµÀÖ®ºó£¬ÎÒÃÇͨ¹ýʹÓÃËùÑ¡Ëã·¨ÄâºÏ»òʹÓÃѵÁ·Êý¾ÝÀ´ÑµÁ·Ô¤²âÄ£ÐÍ¡£ Ôڸò½ÖèÖУ¬Ä£Ðͱ»½¨Á¢£¬ÑµÁ·²¢×÷Ϊ¶ÔÏ󷵻أº

var model = trainingPipeline.Fit(trainingDataView);

3. ÆÀ¹ÀÄ£ÐÍ

ÔÚ±¾ÀýÖУ¬Ä£ÐÍµÄÆÀ¹ÀÊÇÔÚʹÓý»²æÑéÖ¤·½·¨ÑµÁ·Ä£ÐÍ֮ǰִÐеģ¬Òò´ËÄú½«»ñµÃָʾģÐÍ׼ȷ¶ÈµÄÖ¸±ê¡£

var crossValidationResults = mlContext.Regression.CrossValidate(trainingDataView, trainingPipeline, numFolds: 6, labelColumn: "Label"); ???????????ConsoleHelper.PrintRegressionFoldsAverageMetrics(trainer.ToString(), crossValidationResults);

4. ±£´æÄ£Ð͹©×îÖÕÓû§µÄÓ¦ÓóÌÐòÉÔºóʹÓÃ

Ò»µ©´´½¨ºÍÆÀ¹ÀÁËÄ£ÐÍ£¬¾Í¿ÉÒÔ½«Ëü±£´æµ½.ZIPÎļþÖУ¬ÈκÎ×îÖÕÓû§µÄÓ¦ÓóÌÐò¶¼¿ÉÒÔͨ¹ýÒÔÏ´úÂëʹÓÃËü£º

using (var file = File.OpenWrite(outputModelPath)) ???model.SaveTo(mlContext, file);

5. Óüòµ¥µÄ²âÊÔÔ¤²âÊÔÓÃÄ£ÐÍ

¼òµ¥µØËµ£¬Äú¿ÉÒÔ´Ó.ZIPÎļþÖмÓÔØÄ£ÐÍ£¬´´½¨Ò»Ð©Ê¾ÀýÊý¾Ý£¬´´½¨¡°Ô¤²âº¯Êý¡±£¬×îºó½øÐÐÔ¤²â¡£

ITransformer trainedModel;using (var stream = File.OpenRead(outputModelPath)){ ???trainedModel = mlContext.Model.Load(stream);}var predictionFunct = trainedModel.MakePredictionFunction<ProductData, ProductUnitPrediction>(mlContext);Console.WriteLine("** Testing Product 1 **");// Build sample dataProductData dataSample = new ProductData(){ ???productId = "263", ???month = 10, ???year = 2017, ???avg = 91, ???max = 370, ???min = 1, ???count = 10, ???prev = 1675, ???units = 910};//model.Predict() predicts the nextperiod/month forecast to the one providedProductUnitPrediction prediction = predictionFunct.Predict(dataSample);Console.WriteLine($"Product: {dataSample.productId}, month: {dataSample.month + 1}, year: {dataSample.year} - Real value (units): 551, Forecast Prediction (units): {prediction.Score}");

ÒýÓÃ

eShopDashboardMLÊý¾Ý¼¯ÊÇ»ùÓÚUCI(http://archive.ics.uci.edu/ml/datasets/online+retail) µÄÒ»¸ö¹«¹²ÔÚÏßÁãÊÛÊý¾Ý¼¯

Daqing Chen, Sai Liang Sain, ºÍ Kun Guo, ÔÚÏßÁãÊÛÒµµÄÊý¾ÝÍÚ¾ò: »ùÓÚRFMÄ£Ð͵ÄÊý¾ÝÍÚ¾ò¿Í»§Ï¸·Ö°¸ÀýÑо¿, Êý¾Ý¿âÓªÏúÓë¿Í»§Õ½ÂÔ¹ÜÀíÔÓÖ¾, Vol. 19, No. 3, pp. 197a€¡°208, 2012 (ӡˢǰÔÚÏß·¢²¼: 27 August 2012. doi: 10.1057/dbm.2012.17).

ML.NET ʾÀý£º»Ø¹éÖ®ÏúÊÛÔ¤²â

Ô­ÎĵØÖ·£ºhttps://www.cnblogs.com/feiyun0112/p/10090896.html

ÖªÊ¶ÍÆ¼ö

Îҵıà³ÌÑ§Ï°Íø¡ª¡ª·ÖÏíwebǰ¶Ëºó¶Ë¿ª·¢¼¼Êõ֪ʶ¡£ À¬»øÐÅÏ¢´¦ÀíÓÊÏä tousu563@163.com ÍøÕ¾µØÍ¼
icp±¸°¸ºÅ ÃöICP±¸2023006418ºÅ-8 ²»Á¼ÐÅÏ¢¾Ù±¨Æ½Ì¨ »¥ÁªÍø°²È«¹ÜÀí±¸°¸ Copyright 2023 www.wodecom.cn All Rights Reserved