Á°²ó¤ÏºîÀ®ºÑ¤ß¤Î³Ø½¬¥â¥Ç¥ë¤òÆÉ¤ß¹þ¤ó¤Ç»ÈÍѤ·¤¿¤¬¡¤º£²ó¤ÏML.net¤Ç³Ø½¬¥â¥Ç¥ë¤òºîÀ®¤¹¤ë¼ê½ç¤ò¾Ò²ð¤¹¤ë¡¥
³Ø½¬¥Ç¡¼¥¿ºîÀ®ÍѤÎUI¤òºî¤ëɬÍפ¬¤¢¤ë¡¥°Ê²¼¤ÎÎã¤Ç¤Ï»öÁ°¤Ë¥æ¡¼¥¶¤¬¤³¤ì¤«¤é²¿¤òÉÁ¤¯¤«¥é¥Ù¥ë¡ÊÀµ²ò¡Ë¤ò»ØÄꤷ¤Æ¡¤³Ø½¬¥Ç¡¼¥¿¡ÊStrokeData¡Ë¤òºîÀ®¤·¤Æ¤¤¤ë¡¥
Á°²ó¤Î¡¤¥¹¥È¥í¡¼¥¯¤òÆÃħ¥Ù¥¯¥È¥ë¤ËÊÑ´¹¤·¥é¥Ù¥ë¡ÊÀµ²ò¡Ë¤¬ÉÕ¤±¤é¤ì¤¿¥Ç¡¼¥¿·²¤¬List<StrokeData> strokeDatas¤ËÃßÀѤµ¤ì¤Æ¤¤¤¿¤È¤¹¤ë¤È¡¤
mLContext = new MLContext(); IDataView trainingData = mLContext.Data.LoadFromEnumerable(strokeDatas); //1 DataOperationsCatalog.TrainTestData splitDataView = mLContext.Data.TrainTestSplit(trainingData, testFraction: 0.2); //2
1¤Ç¡¤ML.net¤Ç»ÈÍѤ¹¤ë¤¿¤á¥Ç¡¼¥¿¤òÆÉ¤ß¹þ¤à¡¥mLContext.Data.LoadFromEnumerable¥á¥½¥Ã¥É¤Ë¤è¤ê¡¤IEnumerable¤ò¼ÂÁõ¤·¤¿¥¯¥é¥¹¡ÊArray¤äList<>¡Ë¤Ê¤É¤«¤é¥Ç¡¼¥¿¤òÆÉ¤ß¹þ¤á¤ë¡¥
2¤Ç¡¤¥Ç¡¼¥¿¤ò¥È¥ì¡¼¥Ë¥ó¥°ÍѤÈɾ²Á¥Æ¥¹¥ÈÍѤËʬ¤±¤ë¡¥0.2¤Ç2³ä¤Î¥Ç¡¼¥¿¤òɾ²Á¥Æ¥¹¥ÈÍѤȤ·¤Æ¤¤¤ë¡¥
ML.net¤Ç¤ÏÆþÎϤµ¤ì¤¿¥Ç¡¼¥¿¤ò³Ø½¬¤Ë»ÈÍѤ¹¤ë¥Ç¡¼¥¿¤Ø¤Î²Ã¹©¢ª³Ø½¬¥â¥Ç¥ë¤ÎºîÀ® ¤Ê¤É¤Îºî¶È¤ò¥Ñ¥¤¥×¥é¥¤¥ó¤È¤·¤ÆÄêµÁ¡ÊºîÀ®¡Ë¤·¤Æ¤ª¤¯¡¥¤Þ¤¿¡¤µ¡³£³Ø½¬¤Ç¤Ï¥Ç¡¼¥¿¤ÎÁ°½èÍý¤Ê¤É¤âÂ礤ʻŻö¤È¤Ê¤ë¤Î¤Ç¡¤¥Ç¡¼¥¿¤ò½èÍý¤¹¤ë¤À¤±¤Î¥Ñ¥¤¥×¥é¥¤¥ó¤òºî¤ë¤³¤È¤â¤Ç¤¤ë¡¥
var pipeline = mLContext.Transforms.Concatenate("Features", new[] { "DirCount" }).Append(mLContext.BinaryClassification.Trainers.SdcaLogisticRegression(labelColumnName: "Label", featureColumnName: "Features"));
¾åµ¥³¡¼¥É¤Ç¤Ï¤Þ¤º¡¤Transforms.Concatenate¤Ç¡¤¥Ç¡¼¥¿¡ÊStrokeData¡Ë¤Î"DirCount"¥á¥ó¥Ð¤òÆÃħ¥Ù¥¯¥È¥ë¤È¤·¤Æ¡¤"Features"°À¤Ë¤·¤Æ¤¤¤ë¡¥
³¤±¤Æ¡¤.Append¤Ç¼¡¤Îºî¶È¤òÅÐÏ¿¤¹¤ë¡¥¤³¤³¤Ç¤ÏSdcaLogisticRegression¤òÍøÍѤ·¤¿Æó¹àʬÎà¤Î¥È¥ì¡¼¥Ê¡¼¤Ç³Ø½¬¥â¥Ç¥ë¤òºî¤ëºî¶È¤òÅÐÏ¿¤·¤Æ¤¤¤ë¡¥
SdcaLogisticRegression¤Ç¤Ï¡¤¥Ç¡¼¥¿¤Î"Label"°À¤ò¥é¥Ù¥ë¡ÊÀµ²ò¡Ë¤È¤·¤Æ¡¤"Features"°À¤òÆÃħ¥Ù¥¯¥È¥ë¤È¤·¤Æ³Ø½¬¤ò¹Ô¤¦¤è¤¦°ú¿ô¤Ç»Ø¼¨¤·¤Æ¤¤¤ë¡¥
Á°½Ò¤ÎºîÀ®¤·¤¿¥Ñ¥¤¥×¥é¥¤¥ó¤Ë³Ø½¬¥Ç¡¼¥¿¤Î¥È¥ì¡¼¥Ë¥ó¥°Ê¬¤òÆþÎϤ¹¤ë¤³¤È¤Ç³Ø½¬¥â¥Ç¥ë¤òºîÀ®¤¹¤ë¡¥
strokePredictModel = pipeline.Fit(splitDataView.TrainSet);
ºîÀ®¤·¤¿³Ø½¬¥â¥Ç¥ë¤Ïzip¥Õ¥¡¥¤¥ë¤ÇÊݸ¤Ç¤¤ë¡¥Êݸ¤¹¤ëºÝ¤Ï³Ø½¬¥Ç¡¼¥¿¤ÎSchema¤¬É¬ÍפȤʤ롥
if (strokePredictModel != null) { Windows.Storage.StorageFolder storageFolder = Windows.Storage.ApplicationData.Current.LocalFolder; Windows.Storage.StorageFile modelFile = await storageFolder.CreateFileAsync("model.zip", Windows.Storage.CreationCollisionOption.ReplaceExisting); IDataView data = mlContext.Data.LoadFromEnumerable<StrokeData>(strokeDatas); using (System.IO.Stream stream = await modelFile.OpenStreamForWriteAsync()) { mlContext.Model.Save(strokePredictModel, data.Schema, stream); stream.Flush(); } }
ɬ¿Ü¤Ç¤Ï¤Ê¤¤¤¬¡¤¥Æ¥¹¥ÈÍѤΥǡ¼¥¿¤ÇºîÀ®¤·¤¿³Ø½¬¥â¥Ç¥ë¤Îɾ²Á¤ò¹Ô¤¦¡¥
IDataView predictions = strokePredictModel.Transform(splitDataView.TestSet); CalibratedBinaryClassificationMetrics metrics = mLContext.BinaryClassification.Evaluate(predictions, "Label"); AddMessage(""); AddMessage("Model quality metrics evaluation"); AddMessage("--------------------------------"); AddMessage($"Accuracy: {metrics.Accuracy:P2}"); AddMessage($"Auc: {metrics.AreaUnderRocCurve:P2}"); AddMessage($"F1Score: {metrics.F1Score:P2}"); AddMessage("=============== End of model evaluation ===============");
´°À®¤·¤¿ºÇ½ªÅª¤Ê¥¹¥È¥í¡¼¥¯¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Î.sln¥Õ¥¡¥¤¥ë¤Î¤¢¤ë¥Õ¥©¥ë¥À¤´¤È¤Þ¤È¤á¤Æ°Ê²¼¼ø¶È¥Õ¥©¥ë¥À¡¢Âè5²ó¤ËÄó½Ð¤¹¤ë¤³¤È¡£
Äù¤áÀÚ¤ê:
7·î18Æü(ÌÚ)18»þ
\\nas002.term.usmc.dendai.ac.jp\¼ø¶ÈÍѥ¥¯¥¹¥Ú¡¼¥¹\Àé½»¥¥ã¥ó¥Ñ¥¹\Á°´ü\̤Íè²Ê³ØÉô\¢¾ðÊó¥á¥Ç¥£¥¢³Ø²Ê\FI3¾ðÊó¥á¥Ç¥£¥¢´ðÁÃ¥¼¥ß(¿¹Ã«Í§¾¼)·î2\Âè05²ó\Äó½Ð