ãã®èšäºã®å·çã«ååããŠããããã€ã¯ããœããåŠçããŒãããŒã®Eugene GrigorenkoïŒ @ evgri243 ïŒã«ããèšäºã®æºåã«æè¬ããŸãã Azureé¢é£ã®æ®ãã®èšäºã¯azureweekã¿ã°ã«ãããŸãã
æ©æ¢°åŠç¿ã¯ã³ã³ãã¥ãŒã¿ãŒãµã€ãšã³ã¹ã§æã人æ°ã®ããåéã®1ã€ã§ãããåæã«éçºè ã®éã§ã¯æãé¿ããããŠããåéã®1ã€ã§ããããŸãã ããã®äž»ãªçç±ã¯ãæ©æ¢°åŠç¿ã®çè«çãªéšåã«ã¯æ·±ãæ°åŠçãªãã¬ãŒãã³ã°ãå¿ èŠã§ãããå€ãã¯å€§åŠãåæ¥ããåŸããã«å¿ããããšã奜ãããã§ãã ãã ããçè«çãªåºç€ã«å ããŠãå®çšçãªåŽé¢ãããããšãç解ããå¿ èŠããããŸããããã¯ãæ¯æ¥åŠç¿ããŠäœ¿çšããæ¹ãã¯ããã«ç°¡åã§ãã ãã®äœæ¥ã®ç®çã¯ãããã°ã©ããŒãšããŒã¿åŠçã®å°é家ã®éã®ã®ã£ãããåããã¢ããªã±ãŒã·ã§ã³ã§æ©æ¢°åŠç¿ã䜿çšããããšãéåžžã«ç°¡åãªã¿ã¹ã¯ã§ããããšã瀺ãããšã§ãã ãã®èšäºã§ã¯ãäžé£ã®ç¹æ§ã«å¿ããŠèªåè»ã®äŸ¡æ Œãäºæž¬ããããã®ã¢ãã«ãæ§ç¯ããããã«å¿ èŠãªäžé£ã®æé ã®æŠèŠã説æãããã®åŸWindows 10 Mobileã®ã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšããŸãã
Azure MLãšã¯äœã§ããïŒ
ã€ãŸããAzure Machine Learningã¯æ¬¡ã®ãšããã§ãã
- ã·ã³ãã«ã§èŠèŠçãªæ¹æ³ã§è€éãªæ©æ¢°åŠç¿ã¢ãã«ã®æ§ç¯ãšäœ¿çšãå¯èœã«ããã¯ã©ãŠããœãªã¥ãŒã·ã§ã³ã
- æ¢è£œã®ã¢ã«ãŽãªãºã ãåºããåçåããããã«èšèšããããšã³ã·ã¹ãã ã
ãã®èšäºã®åŸåã§ãAzure MLã«é¢ãã詳现æ å ±ãèŠã€ããããšãã§ããŸãããŸãã ãªã³ã¯ãã¯ãªãã¯ããŠãã ããã
Azure MLãéžã¶çç±
Azure Machine Learningã¯æ©æ¢°åŠç¿ã䜿çšããããã®æãåçŽãªããŒã«ã®1ã€ã§ãããããããŒãºã«åãããŠäœ¿çšââããããšã決å®ãããã¹ãŠã®äººã®åå ¥éå£ãåãé€ããŸãã Azure MLã䜿çšãããšãæ°åŠè ã§ããå¿ èŠããªããªããŸãã
æ©æ¢°åŠç¿ã¢ã«ãŽãªãºã ãæ§ç¯ããè«çããã»ã¹
- ç®çã®å®çŸ©ã ãã¹ãŠã®æ©æ¢°åŠç¿ã¢ã«ãŽãªãºã ã¯ãå®éšã®ç®çãæ確ã«å®çŸ©ãããŠããªããã°åœ¹ã«ç«ã¡ãŸããã ãã®ã©ãã®ç®æšã¯ããšã³ããŠãŒã¶ãŒãæäŸããäžé£ã®ç¹æ§ã«åºã¥ããŠèªåè»ã®äŸ¡æ Œãäºæž¬ããããšã§ãã
- ããŒã¿åéã ãã®æ®µéã§ã¯ãã¢ãã«ã®ãããªããã¬ãŒãã³ã°ã«å¿
èŠãªããŒã¿ãµã³ãã«ã圢æãããŸãã ãã®å Žåãã«ãªãã©ã«ãã¢å€§åŠæ©æ¢°åŠç¿ãªããžããªããŒã¿ã䜿çšãããŸãã
archive.ics.uci.edu/ml/datasets/Automobile - ããŒã¿æºåã ãã®æ®µéã§ãç¹æ§ã圢æããå€ãå€ãé€å»ãããµã³ãã«ããã¬ãŒãã³ã°ãšãã¹ãã«åå²ããããšã«ãããããŒã¿ãæºåããŸãã
- ã¢ãã«éçºã ã¢ãã«ã®éçºããã»ã¹ã§ã¯ã1ã€ä»¥äžã®ããŒã¿ã¢ãã«ãšå¯Ÿå¿ãããã¬ãŒãã³ã°ã¢ã«ãŽãªãºã ãéžæãããŸããããã¯ãéçºè ã«ãããšãæãŸããçµæãåŸãããŸãã å€ãã®å Žåããã®ããã»ã¹ã¯ããã¿ãŒã³ãèŠã€ããããã«ãããã€ãã®ã¢ãã«ã®æå¹æ§ã®äžŠè¡ç 究ããã³ããŒã¿ã®èŠèŠçåæãšçµã¿åããããŸãã
- ã¢ãã«ãã¬ãŒãã³ã°ã ãã¬ãŒãã³ã°äžãåŠç¿ã¢ã«ãŽãªãºã ã¯äºæž¬æ¹æ³ãèŠã€ããããã«ãããŒã¿ãµã³ãã«å ã®é ããããã¿ãŒã³ãæ€çŽ¢ããŸãã æ€çŽ¢ããã»ã¹èªäœã¯ãéžæããã¢ãã«ãšåŠç¿ã¢ã«ãŽãªãºã ã«ãã£ãŠæ±ºãŸããŸãã
- ã¢ãã«è©äŸ¡ã ã¢ãã«ããã¬ãŒãã³ã°ãããåŸããã®äºåŸç¹æ§ãç 究ããå¿ èŠããããŸãã ã»ãšãã©ã®å Žåããã®ããã«ããã¹ããµã³ãã«ã§å®è¡ããçµæã®ãšã©ãŒã¬ãã«ãè©äŸ¡ããŸãã ãã®èŠä»¶ãšç²ŸåºŠèŠä»¶ã«å¿ããŠãã¢ãã«ãæçµã¢ãã«ãšããŠæ¡çšããããæ°ããå ¥åç¹æ§ãè¿œå ããåŸããŸãã¯åŠç¿ã¢ã«ãŽãªãºã ãå€æŽããåŸã§ããã¢ãã«ãåãã¬ãŒãã³ã°ã§ããŸãã
- ã¢ãã«ã®äœ¿çšã èšç·Žãããã¢ãã«ã®ãã¹ããæåããå Žåããã®äœ¿çšã®æ®µéãå§ãŸããŸãã ããã¯ãAzure MLãäžå¯æ¬ ã«ãªããã¢ã«ãŽãªãºã ã®å ¬éãç£èŠãåçåã«å¿ èŠãªãã¹ãŠã®ããŒã«ãæäŸããå Žåã§ã
äºæž¬ã¢ãã«ã®æ§ç¯
éå§ããã«ã¯ã[補å]ã¡ãã¥ãŒã®ãªã³ã¯ [ã¢ããªãã£ã¯ã¹]ãéžæãã[æ©æ¢°åŠç¿]ãã¯ãªãã¯ããŸãã ãŸãã¯ã çŽæ¥ãªã³ã¯ã䜿çšããŸãã
éããããŒãžã§ã[ä»ããéå§]ãã¯ãªãã¯ããŸãã
Azure MLã䜿çšããã«ã¯ãã¢ã¯ãã£ããªMicrosoft Azureãµãã¹ã¯ãªãã·ã§ã³ãå¿ èŠã§ãã æ¢ã«ãæã¡ã®å Žåã¯ãAzure管çããŒã¿ã«ã«ãã°ã€ã³ããŠãã ãã ããã以å€ã®å Žåã¯ã ãªã³ã¯ãã¯ãªãã¯ããŠç¡æè©Šçšã¢ã«ãŠã³ããäºåç»é²ããŠãã ãã ã
æ¿èªã«æåãããšãAzure ML Studioã®ã¡ã€ã³ããŒãžã«è¡šç€ºãããŸããããã¯ãããã«ãã¹ãŠã®äœæ¥ãè¡ãããç°å¢ã§ãã
ããŒã¿ã®èªã¿èŸŒã¿
ãŸãããã¬ãŒãã³ã°ã»ãããããŠã³ããŒãããå¿ èŠããããŸãã ãããè¡ãã«ã¯ã ãªã³ã¯ãã¯ãªãã¯ã㊠ãè»ã®ããŒã¿ã®éžæãå«ãimports-85.dataãã¡ã€ã«ãã³ã³ãã¥ãŒã¿ãŒã«ããŠã³ããŒãããŸãã
ãã®ãã¡ã€ã«ãAzure ML Studioã«ã¢ããããŒãããã«ã¯ãããŒãžã®äžéšã«ãã[æ°èŠ]ãã¯ãªãã¯ããéããããã«ã§[ããŒã¿ã»ãããšããŒã«ã«ãã¡ã€ã«ãã]ãéžæããŸãã ããŒãã¡ãã¥ãŒã§ãããŠã³ããŒããããã¡ã€ã«ãžã®ãã¹ãååãæå®ããã¿ã€ããšããŠããããŒãªãã®æ±çšCSVãã¡ã€ã«ïŒ.hn.csvïŒãéžæããŸãã
æ°ããå®éšãäœæãã
æ°ããå®éšãäœæããã«ã¯ã[æ°èŠ]-> [å®éš]-> [空ã®å®éš]ãéžæããŸãã ãã®çµæãããŒã«ããŒãå³åŽã«ããæ°ããå®éšã¯ãŒã¯ã¹ããŒã¹ãäœæãããŸãã
ããŒã¿ãµã³ãã«ã®å®çŸ©
以åã«ããŠã³ããŒãããããŒã¿ã¯ãå·ŠåŽã®[ä¿åãããããŒã¿ã»ãã]ã»ã¯ã·ã§ã³ã«åæ ãããŸãã ãããéžæããŠãã¯ãŒã¯ã¹ããŒã¹å ã®ä»»æã®å Žæãããšãã°ããããã«ã¢ã€ãã ããã©ãã°ãç¢å°ãæãå Žæã«ãã©ãã°ããŸãã
ããŒã¿ãœãŒã¹ã«ã¯ãä»ã®ã³ã³ããŒãã³ãã«æ¥ç¶ããããã«äœ¿çšãããå圢ã®ãžã£ã³ã¯ã·ã§ã³ããããŸãã
ããŒã¿æºå
æ©æ¢°åŠç¿ã¢ãã«ãéçºããå Žåãåå€æŽåŸã«å®éšã®äºåçµæã確èªããããšããå§ãããŸãã ãããã£ãŠãæ¥ç¶ãã€ã³ããå³ã¯ãªãã¯ããŠãèŠèŠåãéžæããŸãã ãã®çµæãããŒã¿ãšãã®ååžã®äžè¬çãªæŠå¿µã瀺ããŠã£ã³ããŠã衚瀺ãããŸãã
ã芧ã®ãšããããµã³ãã«ã«åé¡ããããŸãã2çªç®ã®åã«ã¯å€ããããŸããã ããã«ãããåŠç¿ããã»ã¹ã«æãŸãããªã圱é¿ãçããã¢ãã«ã®å質ãå€§å¹ ã«äœäžããå¯èœæ§ããããŸãã ãããã幞ããªããšã«ããããã®å€ã¯ä¿éºã³ã¹ãã«ãã£ãŠç¹åŸŽä»ããããè»ã®äŸ¡æ Œãšã¯ããŸãé¢ä¿ããªããããåé€ã§ããŸãã ãšããããåã«ã¯ååããããŸãããããã«ãããåã®åŠçãå€§å¹ ã«è€éã«ãªããŸãã
ããŒã¿å€æ/æäœã°ã«ãŒãã®ååã«é¢ããåé¡ãä¿®æ£ããã«ã¯ãã¡ã¿ããŒã¿ãšãã£ã¿ãŒãäœæ¥é¢ã«ãã©ãã°ããŸãã
ããŒã¿ãµã³ãã«ã®åºåïŒäžïŒãæ°ããã³ã³ããŒãã³ãã®å ¥åïŒäžïŒã«ãã©ãã°ããŠæ¥ç¶ããŸãã ãããã¯ãªãã¯ããŠãå³åŽã®èšå®ãŠã£ã³ããŠãéããŸãã ã¡ã¿ããŒã¿ãšãã£ã¿ãŒã䜿çšãããšãã¿ã€ããååãªã©ã1ã€ä»¥äžã®åã®ã¡ã¿æ å ±ãå€æŽã§ããŸãã åéžæãŠã£ã¶ãŒããã¯ãªãã¯ããŠãåéžæãŠã£ã¶ãŒããéããŸãã ãã¹ãŠã®åãéžæããã«ã¯ããéå§ããã£ãŒã«ãã§ããã¹ãŠã®åããéžæããå³åŽã®ã-ãèšå·ãã¯ãªãã¯ããŠéžæçµã蟌ã¿ç·ãåé€ãããã§ãã¯ããŒã¯ãã¯ãªãã¯ããŠç¢ºèªããŸãã
èšå®ããã«ã®[æ°ããåå]ãã£ãŒã«ãã«ã以åã«æäŸããããªã³ã¯ã䜿çšããŠimport-85.namesãã¡ã€ã«ã«ããæ°ããååãã³ã³ãã§åºåã£ãŠå ¥åããŸãã ãã£ãŒã«ãå€ã¯æ¬¡ã®ããã«ãªããŸãã
ã·ã³ãã«è¡šç€ºãæ£èŠåãããæ倱ãã¡ãŒã«ãŒãçæã¿ã€ããåžåŒããã¢æ°ãããã£ã¹ã¿ã€ã«ãé§å茪ããšã³ãžã³äœçœ®ããã€ãŒã«ããŒã¹ãé·ããå¹ ãé«ããçžç³ééããšã³ãžã³ã¿ã€ããã·ãªã³ããŒæ°ããšã³ãžã³ãµã€ãºãçæã·ã¹ãã ããã¢ãã¹ãããŒã¯ãå§çž®æ¯ã銬åãããŒã¯rpmãcity-mpgãhighway-mpgãäŸ¡æ Œ
ã³ã³ããŒãã³ãã®çµæã衚瀺ããã«ã¯ãäžã®[å®è¡]ãã¯ãªãã¯ããŠãåè¿°ã®ããã«ã¡ã¿ããŒã¿ãšãã£ã¿ãŒã®åºåãèŠèŠåããŸãã
次ã«ãæ£èŠåãããæ倱ãåé€ããŸãã ãããè¡ãã«ã¯ãåãã°ã«ãŒããããããžã§ã¯ãåãã¯ãŒã¯ã¹ããŒã¹ã«ãã©ãã°ããã¡ã¿ããŒã¿ãšãã£ã¿ãŒã«æ¥ç¶ããŠãã®èšå®ã«ç§»åããŸãã è¡éžæãŠã£ã¶ãŒããå床éžæããä»åºŠã¯æ£èŠåãããæ倱ãé€ããã¹ãŠã®è¡ãéžæããŠãäžå³ã«ç€ºãèšå®ãšåæ§ã®èšå®ãè¡ããŸãã
å®éšãå®è¡ããçµæãèŠèŠåããŠã2çªç®ã®åãéžæããæããŠããããšã確èªããŸãã
æ®å¿µãªãããå€ã®ãªãåã¯ãŸã ãããŸãã ãããããããã®å€ãã¯ãªããããäžå®å šãªè¡ãç Žæ£ããããã«å¶éããããšãã§ããŸãã ãããè¡ãã«ã¯ãMissing Value ScrubberãéžæããŠããããžã§ã¯ãåã«æ¥ç¶ããŸãã [æ¬ æå€ã®å Žå]ãã£ãŒã«ãã§ãå€ã[è¡å šäœãåé€]ã«å€æŽããŸãã 空ã®å€ãæã€è¡ããªããªã£ãããšãå®è¡ããèŠèŠåããæ€èšŒããŸãã
æºå段éã§çããå¿ èŠãããæåŸã®è³ªåãæ®ã£ãŠããŸãããã¹ãŠã®ç¹æ§ãè»ã®äŸ¡æ Œã«åœ±é¿ããŸããïŒ ãã®æ®µéã§ã以äžã®å°æ°ã®ææšã«å¶éããããšãã§ããŸãããã®äžèŠ§ã以äžã«ç€ºããŸãã å°æ¥çã«ã¯ããã€ã§ãæ°ããã¢ãã«ãè¿œå ããçµæã®ã¢ãã«ã®ç²ŸåºŠãæ¯èŒããããšã§ããããã®ååæ§ã®ä»®èª¬ããã¹ãã§ããŸãã
ã¡ãŒã«ãŒãããã£ã¹ã¿ã€ã«ããã€ãŒã«ããŒã¹ããšã³ãžã³ãµã€ãºã銬åãããŒã¯å転æ°ããã€ãŠã§ã€mpgãã·ãªã³ããŒæ°ãäŸ¡æ Œ
æ°ãããããžã§ã¯ãåãè¿œå ããäžã®åãéžæããŸãã
çµè«ãšããŠãå®éšãå®è¡ããŠçµæãèŠèŠåããããšã«ãããããŒã¿ã®æºåãæåããããšã確èªããŠãã ããã
ãµã³ãã«ã®å èš³
ããã§ãåŠç¿ããã»ã¹ã§ããŒã¿ã䜿çšããæºåãæŽããŸããã ããããæ©æ¢°åŠç¿ã§ã¯ããåãã¬ãŒãã³ã°ããšåŒã°ããå¹æãå¯èœã§ããäžè¬åã䌎ããªãããŒã¿ã®ã¢ãã«ã«ããæèšã§ãã ãã®ãããªæ¯ãèãã¯ãç°ãªãããŒã¿ã«å¯ŸããŠé©åãªäºæž¬ãäžå¯èœã«ããããšã«ã€ãªãããŸãã ãã®ç¶æ³ã«å¯ŸåŠããã«ã¯ããµã³ãã«ã3ã«è¿ãæ¯çã§ãã¬ãŒãã³ã°ãšãã¹ãã«åããŸãã ãããã®æåŸã¯åŠç¿ããã»ã¹ã«åå ãããæåŸã«äºæž¬èª€å·®ã®æšå®ã«äœ¿çšãããŸãã ãã®ãšã©ãŒããã¬ãŒãã³ã°ãµã³ãã«ã®ãšã©ãŒãšå€§å¹ ã«ç°ãªãå Žåãäžèšã®å¹æãèŠãããŸãã
ãã¹ããµã³ãã«ãäœæããã«ã¯ãå®éšã³ã³ããŒãã³ããã¯ãŒã¯ã¹ããŒã¹ã«è»¢éããããŒã¿å€æ/ãµã³ãã«ããã³åå²ã°ã«ãŒãã®ããŒã¿åå²ã³ã³ããŒãã³ããæåŸã®ãããžã§ã¯ãåã«æ¥ç¶ããŸãã æåã®åºåã®è¡ã®æ¯çã0.75ã«èšå®ãã[åå²ã®ã©ã³ãã å]ãã©ã°ãèšå®ãããŠããããšã確èªããŸãã
ç·åœ¢ååž°ã¢ãã«ã®ãã¬ãŒãã³ã°
æåã«ãããŒã«ããŒããç·åœ¢ååž°ããã¬ãŒãã³ã°ã¢ãã«ãã¹ã³ã¢ã¢ãã«ãããã³ã¢ãã«è©äŸ¡ã³ã³ããŒãã³ãããã©ãã°ããŸãã ã¢ãã«ã®ãã¬ãŒãã³ã°ã¯ãä»»æã®ãã¬ãŒãã³ã°ã»ããã§ä»»æã®ã¢ãã«ã®ãã¬ãŒãã³ã°ãå¯èœã«ããæ±çšã³ã³ããŒãã³ãã§ãã ç¹å®ã®ã±ãŒã¹ãæ§æããã«ã¯ãã¹ããªããããŒã¿ã®æåã®ïŒå·ŠïŒåºåãšç·åœ¢ååž°ã®åºåããã¬ã€ã³ã¢ãã«ã®å¯Ÿå¿ããå ¥åã«æ¥ç¶ããŸãã Train Modelèšå®ã§ãäŸ¡æ Œãç®æšå€ãšããŠæå®ããŸãïŒçµæåïŒã ããã§ãã¢ãã«ããã¬ãŒãã³ã°ããæºåãã§ããŸããã
ãã ãããã¬ãŒãã³ã°èªäœã«å ããŠããã¬ãŒãã³ã°ã®çµæãç¥ãããšãéèŠã§ãã ã¢ãã«ã®ã¹ã³ã¢ã³ã³ããŒãã³ãã䜿çšãããšãä»»æã®ãµã³ãã«ã§ãã¬ãŒãã³ã°ãããã¢ãã«ã®åºåãèšç®ããäºæž¬ã®çµæãèšç®ã§ããŸãã ãã¬ãŒãã³ã°æžã¿ã¢ãã«ãå«ããã¬ãŒãã³ã°ã¢ãã«åºåã察å¿ããã¹ã³ã¢ã¢ãã«å ¥åã«æ¥ç¶ããããŒã¿ãµã³ãã«ãšããŠå¥ã®å ¥åã«æ¥ç¶ãã2çªç®ã®åå²ããŒã¿åºåãããã¹ããµã³ãã«ãéä¿¡ããŸãã ã¹ã³ã¢ã¢ãã«ã®åºåãè©äŸ¡ã¢ãã«ã®å ¥åã®ããããã«æ¥ç¶ããŠããã¬ãŒãã³ã°ã®è³ªã®æ°å€ç¹æ§ãèšç®ããŸãã çµæã¯ãå³ã«ç€ºãããã»ã¹ãšåæ§ã®ããã»ã¹ã«ãªãã¯ãã§ãã
ã¢ãã«ãå®è¡ããè©äŸ¡ã¢ãã«ã®çµæãèŠèŠåããŸãã
決å®ä¿æ°ã¯ãååž°çŽç·ããœãŒã¹ããŒã¿ãã©ã®çšåºŠæ£ç¢ºã«èšè¿°ããŠãããã瀺ããŸãã 蚱容ãããå€ã®ç¯å²ã¯0ã1ã§ã絶察粟床ã¯1ã«å¯Ÿå¿ããŸãã ãã®å Žåãä¿æ°ã¯82ïŒ ã§ãã ãããè¯ãçµæã§ãããã©ããã¯ãåé¡ã®ã¹ããŒãã¡ã³ããšç¹å®ã®ãšã©ãŒãã¬ã©ã³ã¹ã«äŸåããŸãã è»ã®äŸ¡æ Œãäºæž¬ããå Žåã82ïŒ ãåªããçµæã§ãã æ¹åãããå Žåã¯ãä»ã®åããããžã§ã¯ãåã«è¿œå ããããæ ¹æ¬çã«ç°ãªãã¢ã«ãŽãªãºã ãè©ŠããŠãã ããã ããšãã°ããã¢ãœã³ååž°ã åŸè ã¯ãç·åœ¢ååž°ã³ã³ããŒãã³ãããã¢ãœã³ã³ã³ããŒãã³ãã«çœ®ãæããã ãã§å®çŸã§ããŸãã ããããããèå³æ·±ãã¢ãããŒãã¯ãèŠçŽ ãã䞊åãã¬ãŒãã³ã°ãåéããçµæãè©äŸ¡ã¢ãã«ã®2çªç®ã®åºåã«æ¥ç¶ããããšã§ããããã«ãããäž¡æ¹ã®ã¢ãã«ã®åŠç¿çµæãç°¡åã«æ¯èŒã§ããŸãã
ã¢ãã«ãå®è¡ããçµæãèŠèŠåããŸãã çµæãããããããã«ãããŒã¿ã¯ç·åœ¢ååž°ã¢ãã«ã«ãã£ãŠããé©åã«èšè¿°ãããŠãããããæçµçãªã¢ãã«ãšããŠéžæããçç±ã¯ãã¹ãŠãããŸãã
ç·åœ¢ååž°ã«å¯Ÿå¿ãããã¬ãŒãã³ã°ã¢ãã«ã³ã³ããŒãã³ããå³ã¯ãªãã¯ãã[ãã¬ãŒãã³ã°ã¢ãã«ãšããŠä¿å]ãéžæããŸãã ããã«ãããåãã¬ãŒãã³ã°ã®å¿ èŠãªãã«ãååŸããã¢ãã«ãä»ã®å®éšã§äœ¿çšã§ããŸãã
WebãµãŒãã¹ã®å ¬é
ãµãŒãã¹ãå ¬éããã«ã¯ãç·åœ¢ååž°ã«å¯Ÿå¿ãããã¬ãŒãã³ã°ã¢ãã«ã³ã³ããŒãã³ããéžæãã[WebãµãŒãã¹ã®ã»ããã¢ãã]ãã¯ãªãã¯ããŸãã éããã¡ãã¥ãŒã§ãäºæž¬WebãµãŒãã¹[æšå¥š]ãéžæããAzure MLããµãŒãã¹ã®ããŒãºã«æé©åãããæ°ããå®éšãäœæãããŸã§åŸ ã¡ãŸãã èªåçã«äœæãããã³ã³ããŒãã³ãWeb Service Inputããã³Web Service Outputãåé€ããŸã-å°ãæºåããŠããåŸã§äœæããŸãã
çŸæç¹ã§ã¯ãã¹ã³ã¢ã¢ãã«èŠçŽ ã¯åºåã§ãã¹ãŠã®å ¥ååãç¹°ãè¿ããäºæž¬å€ã«ã¹ã³ã¢ã©ãã«ãšããååãä»ããŸãã ãããä¿®æ£ããå¿ èŠããããŸãã
ãããè¡ãã«ã¯ãããŒã«ããŒããäœæ¥ç»é¢ã«æ¢ã«ããç¥ãããŠãã2ã€ã®ã³ã³ããŒãã³ãïŒãããžã§ã¯ãåãšã¡ã¿ããŒã¿ãšãã£ã¿ãŒïŒã転éããŸãã ãããŠãäžå³ã«ç€ºãé åºã§ããããæ¥ç¶ããŸãã [ãããžã§ã¯ãã®å]èšå®ã§ãã¹ã³ã¢ã©ãã«ã®åã1ã€ã ãéžæããã¡ã¿ããŒã¿ãšãã£ã¿ãŒã䜿çšããŠãååãpriceã«å€æŽããŸãã
çµè«ãšããŠãäœæãããµãŒãã¹ã®å ¥åãšåºåãè¿œå ããå¿ èŠããããŸãã ãããè¡ãã«ã¯ãWebãµãŒãã¹å ¥åãšWebãµãŒãã¹åºåãå®éšã«è¿œå ããŸãã æåãã¹ã³ã¢ã¢ãã«å ¥åã«æ¥ç¶ãã2çªç®ãã¡ã¿ããŒã¿ãšãã£ã¿ãŒåºåã«æ¥ç¶ããŸãã äž¡æ¹ã®èŠçŽ ã®èšå®ã§ãååããããããinputãããã³ãpredictionãã«å€æŽããŸãã
[å®è¡]ãã¯ãªãã¯ããŠã¢ãã«ãå床å®è¡ããæ€èšŒã®æåŸã«[WebãµãŒãã¹ã®å±é]ãã¯ãªãã¯ããŠãµãŒãã¹ãå ¬éããŸãã
ãµãŒãã¹ãã¹ã
[WebãµãŒãã¹ã®ãããã€]ãã¯ãªãã¯ãããšãæ°ããäœæããããµãŒãã¹ã«é¢ããæ å ±ãå«ãããŒãžã«ãªãã€ã¬ã¯ããããŸãã HELP PAGE APIã®äžã®ãªã³ã¯ã«ã¯ãçä¿¡ããã³çºä¿¡JSONãã±ããã®å 容ã«é¢ããæ å ±ãå«ãããªã詳现ãªèª¬æãšã䜿çšæ¹æ³ã®ã¢ã€ãã¢ãæäŸãããµã³ãã«ã³ã³ãœãŒã«ã¢ããªã±ãŒã·ã§ã³ã³ãŒããå«ãŸããŠããŸãã
ã€ã³ã¿ã©ã¯ãã£ããªèª¿æ»ãè¡ãã«ã¯ã[ãã¹ã]ãã¯ãªãã¯ããéãããŠã£ã³ããŠã§åå ¥åãã©ã¡ãŒã¿ãŒã®å€ãå ¥åããŸãã ããšãã°ã以äžã«ãªã¹ããããŠãããã®ãéžæãããã§ãã¯ããŒã¯ãã¯ãªãã¯ããŠãã¹ãèŠæ±ãéä¿¡ããŸãã
ã¢ãŠãã£ã»ãã³99.8 4 109102 5500 30 13950
ã¢ããªã±ãŒã·ã§ã³éçº
çµè«ãšããŠãAzure MLãããã¯ãšã³ããµãŒãã¹ãšããŠäœ¿çšããã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã®éçºããã»ã¹ãæ€èšããŠãã ããã æåã«ãæ°ãããŠãããŒãµã«Windowsã¢ããªã±ãŒã·ã§ã³ãããžã§ã¯ããäœæããŸãã ãããè¡ãã«ã¯ãéããŠããVisual Studio 2015ã§ã[ãã¡ã€ã«]-> [æ°èŠ]-> [ãããžã§ã¯ã...]ãéžæããŸããéãããŠã£ã³ããŠã§ãå·ŠåŽã®ã¡ãã¥ãŒã®[Windows]ã¿ãã«ç§»åãã[空ã®ã¢ããªïŒãŠãããŒãµã«WindowsïŒ]ãéžæããŸãã ååãã£ãŒã«ãã«AzureMLDemoãšå ¥åãã[OK]ãã¯ãªãã¯ããŸãã å¿ èŠã«å¿ããŠãå®æãããããžã§ã¯ããGitHubã§èŠã€ããããšãã§ããŸãã
æºåãæŽããšãVisual Studioã¯æ°ãããŠãããŒãµã«ã¢ããªã±ãŒã·ã§ã³ãããžã§ã¯ããéããŸãã [ãããã°]ã®å³åŽã®ããã»ããµã¢ãŒããã¯ãã£ãã£ãŒã«ãã§x86ã瀺ãããŠããããšã確èªããå³åŽã§ã¢ãã€ã«ä»®æ³ãã·ã³ã®1ã€ãã¹ã¿ãŒãã¢ããç°å¢ãšããŠéžæããŸãã ããšãã°ãã¢ãã€ã«ãšãã¥ã¬ãŒã¿ãŒ10.0.10240.0 720p 5ã€ã³ã1GBã
ããã§ãã¢ããªã±ãŒã·ã§ã³èªäœã®äœæã«é²ãããšãã§ããŸãã ãœãªã¥ãŒã·ã§ã³ãšã¯ã¹ãããŒã©ãŒã¡ãã¥ãŒã§ãMainPage.xamlãããã«ã¯ãªãã¯ããŸãã GUIããŒã¯ã¢ããèšèªXAMLã®èª¬æã¯ãã®äœæ¥ã®ç¯å²ãè¶ ããŠãããããéå§ãšçµäºã®<Grid ...>ã¿ã°ã次ã®ã³ãŒãã«çœ®ãæããã ãã§ãã
<ScrollViewer Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" HorizontalScrollMode="Disabled" VerticalScrollBarVisibility="Hidden"> <StackPanel> <TextBlock Text="Estimate the price of your dream car" Style="{ThemeResource TitleTextBlockStyle}" TextAlignment="Center" HorizontalAlignment="Center" Margin="5,20,5,5" TextWrapping="WrapWholeWords"/> <Border Margin="5 10" BorderBrush="LightGray" BorderThickness="2"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto"/> <ColumnDefinition Width="*"/> <ColumnDefinition Width="40"/> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="40"/> <RowDefinition Height="40"/> <RowDefinition Height="40"/> <RowDefinition Height="40"/> <RowDefinition Height="40"/> <RowDefinition Height="40"/> <RowDefinition Height="40"/> <RowDefinition Height="40"/> </Grid.RowDefinitions> <TextBlock Text="Make" Grid.Row="0" Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Right" Margin="5"/> <TextBox Name="tbxMake" Text="Audi" Grid.Row="0" Grid.Column="1" Grid.ColumnSpan="2" VerticalAlignment="Center" HorizontalAlignment="Stretch" Margin="5"/> <TextBlock Text="Body Style" Grid.Row="1" Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Right" Margin="5"/> <TextBox Name="tbxBodyStyle" Text="Sedan" Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="2" VerticalAlignment="Center" HorizontalAlignment="Stretch" Margin="5"/> <TextBlock Text="Wheel Base" Grid.Row="2" Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Right" Margin="5"/> <Slider Name="slWheelBase" Value="99" Grid.Row="2" Grid.Column="1" Minimum="86" Maximum="121" StepFrequency="1" VerticalAlignment="Center" HorizontalAlignment="Stretch" Margin="5,5,3,5"/> <TextBlock Name="tbWheelBase" Grid.Row="2" Grid.Column="2" Text="{x:Bind slWheelBase.Value, Mode=OneWay}" VerticalAlignment="Center" Margin="2,5,5,5"/> <TextBlock Text="Number of Cylinders" Grid.Row="3" Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Right" Margin="5"/> <TextBox Name="tbxNumberOfCylinders" Text="Four" Grid.Row="3" Grid.Column="1" Grid.ColumnSpan="2" VerticalAlignment="Center" HorizontalAlignment="Stretch" Margin="5"/> <TextBlock Text="Engine Size" Grid.Row="4" Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Right" Margin="5"/> <Slider Name="slEngineSize" Value="109" Grid.Row="4" Grid.Column="1" Minimum="61" Maximum="326" StepFrequency="1" VerticalAlignment="Center" HorizontalAlignment="Stretch" Margin="5,5,3,5"/> <TextBlock Name="tbEngineSize" Grid.Row="4" Grid.Column="2" Text="{x:Bind slEngineSize.Value, Mode=OneWay}" VerticalAlignment="Center" Margin="2,5,5,5"/> <TextBlock Text="Horsepowers" Grid.Row="5" Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Right" Margin="5"/> <Slider Name="slHorsepowers" Value="102" Grid.Row="5" Grid.Column="1" Minimum="48" Maximum="288" StepFrequency="1" VerticalAlignment="Center" HorizontalAlignment="Stretch" Margin="5,5,3,5"/> <TextBlock Name="tbHorsepowers" Grid.Row="5" Grid.Column="2" Text="{x:Bind slHorsepowers.Value, Mode=OneWay}" VerticalAlignment="Center" Margin="2,5,5,5"/> <TextBlock Text="Peak PRM" Grid.Row="6" Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Right" Margin="5"/> <Slider Name="slPeakRPM" Value="5500" Grid.Row="6" Grid.Column="1" Minimum="4150" Maximum="6600" StepFrequency="1" VerticalAlignment="Center" HorizontalAlignment="Stretch" Margin="5,5,3,5"/> <TextBlock Name="tbPeakRPM" Grid.Row="6" Grid.Column="2" Text="{x:Bind slPeakRPM.Value, Mode=OneWay}" VerticalAlignment="Center" Margin="2,5,5,5"/> <TextBlock Text="Highway MPG" Grid.Row="7" Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Right" Margin="5"/> <Slider Name="slHighwayMPG" Value="30" Grid.Row="7" Grid.Column="1" Minimum="16" Maximum="54" StepFrequency="1" VerticalAlignment="Center" HorizontalAlignment="Stretch" Margin="5,5,3,5"/> <TextBlock Name="tbHighwayMPG" Grid.Row="7" Grid.Column="2" Text="{x:Bind slHighwayMPG.Value, Mode=OneWay}" VerticalAlignment="Center" Margin="2,5,5,5"/> </Grid> </Border> <Button Name="btnGetEstimate" Grid.Row="2" Content="Get estimate" HorizontalAlignment="Center"/> <TextBlock Name="tbResult" TextAlignment="Left" Margin="10 5" TextWrapping="Wrap"/> </StackPanel> </ScrollViewer>
æãããªè€éãã«ããããããããã®ã³ãŒãã¯ããŠãŒã¶ãŒããŒã¿ã®å ¥åã«å¿ èŠãªããªãåçŽãªããŒã¯ã¢ãããäœæããŸãã ã¢ãã«ãã©ã¡ãŒã¿ãŒã®1ã€ã®åå ¥åèŠçŽ ã«ã¯ãtbxMakeãtxbBodyStyleãªã©ã®ååããããŸãã ãã®äžã«ã¯ãAzure MLãµãŒãã¹ã«ã¡ãã»ãŒãžãéä¿¡ããGet Estimateãã¿ã³ãããããã¹ãŠãåŒã³åºãã®çµæãé 眮ãããtbResultèŠçŽ ã§çµãããŸãã
[ãããã°]-> [ãããã°ã®éå§]ãã¯ãªãã¯ããŠã¢ããªã±ãŒã·ã§ã³ãèµ·åãããã¹ãŠãæ£ããè¡ãããããšã確èªããŸãããããžã§ã¯ããã³ã³ãã€ã«ãããŠèµ·åããŸãã ã¹ã©ã€ããŒã®äœçœ®ãå€æŽãããšãã¹ã©ã€ããŒã®å³åŽã®æ°å€ãããã«å¯Ÿå¿ããŠå€åããããšã確èªããŠãã ããã
[ãããã°]-> [ãããã°ã®åæ¢]ãã¯ãªãã¯ããŠããããã°ã»ãã·ã§ã³ãåæ¢ããŸãã
ãœãããŠã§ã¢ããžãã¯å®çŸ©
次ã«ã[èŠç©ãããååŸ]ãã¿ã³ãã¯ãªãã¯ããããã®åŠçã³ãŒãã決å®ããå¿ èŠããããŸãã ãœãªã¥ãŒã·ã§ã³ãšã¯ã¹ãããŒã©ãŒã§ãMainPage.xamlãå±éããMainPage.xaml.csãããã«ã¯ãªãã¯ããŠããã®GUIã®åé¢ã³ãŒããã¡ã€ã«ãéããŸãã
æåã®ã¹ãããã¯ãããã€ãã®å¿ èŠãªã©ã€ãã©ãªãæ¥ç¶ããããšã§ãã ãããè¡ãã«ã¯ããããžã§ã¯ãåãå³ã¯ãªãã¯ãã[Nugetããã±ãŒãžã®ç®¡ç...]ãéžæããŸããéããã¡ãã¥ãŒã§WebApi.Clientãæ€çŽ¢ããMicrosoft.AspNet.WebApi.Clientãšããååã®ããã±ãŒãžãã€ã³ã¹ããŒã«ããŸãã
ãã®åŸã次ã®è¿œå ã®å®£èšããã¡ã€ã«ã®å é ã«è¿œå ããŸãã
using System.Net.Http; using System.Net.Http.Headers; using Newtonsoft.Json; using System.Threading.Tasks; </source MainPage , . <source lang="cs"> public sealed partial class MainPage : Page { const string _apiKey = @"<your API key>"; const string _requestUri = @"Your key";
ã¢ã¯ã»ã¹ããŒã¯ãµãŒãã¹ã®ããã·ã¥ããŒãããŒãžã«ããããªã¯ãšã¹ãã¢ãã¬ã¹ã¯REQUEST / RESPONSEãã«ãããŒãžã«ãããŸãããªã³ã¯å ã«ã¯ä»¥äžã®ãªã³ã¯ããããŸãã
次ã®ã¹ãããã¯ãAzure MLãµãŒãã¹ã«ãªã¯ãšã¹ããè¡ããã«ããŒé¢æ°ãè¿œå ããããšã§ãã åãREQUEST / RESPONSEãã«ãããŒãžã§æäŸãããããã¥ã¡ã³ãã«åŸã£ãŠãå¿çãåä¿¡ããã«ã¯ã次ã®äžé£ã®ã¢ã¯ã·ã§ã³ãå®è¡ããå¿ èŠããããŸããèŠæ±ãçæããHTTP POSTèŠæ±ã§ãµãŒãã¹åŽã«éä¿¡ããå¿çãåŠçããŸãã
ãã¹ãŠã®ã¢ãã«ãã©ã¡ãŒã¿ãŒã®å ¥åãååŸããäŸ¡æ Œã®èŠç©ãããšãšãã«æµ®åå°æ°ç¹å€ãè¿ãCallAzureMLé¢æ°ãäœæããŸãã ããã§ã®éåæã¿ã¹ã¯ã¯ãéåæ/åŸ æ©ãã¿ãŒã³ã®å®è£ ã«å¯Ÿå¿ããŸããããã«ãããã¢ããªã±ãŒã·ã§ã³ã§ã®éåæåŒã³åºãã®æäœãå€§å¹ ã«ç°¡çŽ åãããŸãïŒè©³çŽ°ã«ã€ããŠã¯ã ãã¡ããã芧ãã ãã ïŒã
private async Task<float> CallAzureML(string make, string bodyStyle, double wheelBase, string numberOfCylinders, int engineSize, int horsepowers, int peakRPM, int highwayMPG) { }
ãŸããJSONã§ã®äœæ¥ãç°¡çŽ åããããã«ãNewtonsoft.Jsonã©ã€ãã©ãªã䜿çšããŸãã ãã®ç¹åŸŽçãªæ©èœã¯ã.NETã¬ãã«ã®éåžžã®ãªããžã§ã¯ãã®åœ¢åŒã§äŸ¿å©ãªæœè±¡åãä»ããŠJSONãªããžã§ã¯ããšå¯Ÿè©±ã§ããããšã§ãã ã¡ãœããã®å é ã«æ¬¡ã®ã³ãŒããé 眮ããŸãã
var requestBody = new { Inputs = new Dictionary<string, object>() { { "input", new { ColumnNames = new string[] {"make", "body-style", "wheel-base", "num-of-cylinders", "engine-size", "horsepower", "peak-rpm", "highway-mpg", "price"}, Values = new string[,] { { make, bodyStyle, wheelBase.ToString(), numberOfCylinders, engineSize.ToString(), horsepowers.ToString(), peakRPM.ToString(), highwayMPG.ToString(), "0" } } } } }, GlobalParameters = new Dictionary<string, int>() };
ããã§ã¯ãJSONèŠæ±ãªããžã§ã¯ãã®æ§é ãå¿åã¯ã©ã¹ã䜿çšããŠåäœæãããäºæ³ãããèŠæ±ã®æ§é ãå®å šã«ïŒå€§æåãšå°æåãåºå¥ãããŸãïŒç¹°ãè¿ãããŸãã æ¯èŒã®ããã«ãREQUEST / RESPONSEããŒãžããã®ãã®ãããªãªã¯ãšã¹ãã®äŸã以äžã«ç€ºããŸãã
{
"Inputs": {
"input": {
"ColumnNames": [ "make", "body-style", âwheel-base", "num-of-cylinders",
"engine-size", "horsepower", "peak-rpm", "highway-mpg",
"price" ],
"Values": [
[ "value", "value", "0", "value", "0", "0", "0", "0", "0" ],
[ "value", "value", "0", "value", "0", "0", "0", "0", "0" ]
]
}
},
"GlobalParameters": {}
}
次ã®ã¹ãããã¯ããµãŒãã¹èªäœãžã®èŠæ±ãæºããããšã§ãã ãããè¡ãã«ã¯ãéçºäžã®ã¡ãœããã«æ¬¡ã®ã³ãŒããè¿œå ããŸãã
try { using (var client = new HttpClient()) { client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("bearer", _apiKey); client.BaseAddress = new Uri(_requestUri); var response = await client.PostAsJsonAsync("", requestBody); if (response.IsSuccessStatusCode) { // succeeded throw new NotImplementedException(); } else { // failed throw new NotImplementedException(); } } } catch (Exception e) { throw; }
æåã®ã±ãŒã¹ã§ã¯ãHTTPã¯ã©ã€ã¢ã³ããäœæãããAzure MLã®ãµãŒãã¹ã«æ£åžžã«æ¥ç¶ããããã«å¿ èŠãªãã¹ãŠã®æ å ±ïŒã¢ãã¬ã¹ãšã¢ã¯ã»ã¹ããŒïŒãã€ã³ã¹ããŒã«ãããŸãã 次ã«ãåã«äœæããJSONãªããžã§ã¯ãã䜿çšããŠããµãŒãã¹ã®åŽã«POSTãªã¯ãšã¹ããè¡ãããŸãã åŒã³åºããæåãããã©ããã¯ãHTTPã¹ããŒã¿ã¹ã³ãŒãã«ãã£ãŠç¢ºèªãããŸãã
ã³ã¡ã³ãæåã®ããŒã¯ãä»ããé åã®ã³ãŒãã以äžã®ã³ãŒãã«çœ®ãæããŸãã ãµãŒããŒã®å¿çãæåå圢åŒã§é 次åä¿¡ããNewtonsoft.Jsonã³ã³ããŒã¿ãŒã䜿çšããŠåçãªããžã§ã¯ãã«è§£æããäŸ¡æ Œæ å ±ãååŸããŸãã æ¯èŒã®ããã®ãµãŒããŒå¿çã®äŸã¯ãããµãŒãã¹ã®ãã¹ããã»ã¯ã·ã§ã³ã«ãããŸãã
var responseContent = await response.Content.ReadAsStringAsync(); var val = JsonConvert.DeserializeObject<dynamic>(responseContent); float? price = (float)val?.Results?.prediction?.value?.Values[0][0]; if (price == null) throw new InvalidDataException("Response message has unknown format" + " or is empty."); return (float)price;
ãšã©ãŒç¶æ ã®å Žåãã¡ãœããã¯æ倧ã®æ å ±ãè¿ãå¿ èŠããããŸãã ãããã£ãŠãåã®å Žåãšåæ§ã«ãã¯ãšãªã®å 容ã¯æååãšããŠååŸãããŸãããä»åã¯é 次ãªããžã§ã¯ãã«å€æãããæååã«æ»ãããŸãã ããã¯ãããã£ã³ã°ãè¿œå ããŠãã®å 容ããã䟿å©ã«èªã¿åãããã«å¿ èŠã§ãã 倱æããã³ã¡ã³ãã§ããŒã¯ãããé åã®ã³ãŒãã以äžã®ãã®ã«çœ®ãæããŸãã
var responseContent = await response.Content.ReadAsStringAsync(); var responseObject = JsonConvert.DeserializeObject(responseContent); var formattedResponseContent = JsonConvert.SerializeObject(responseObject, Formatting.Indented); var message = String.Format("Server returned status code {0} with message {1}", response.StatusCode, formattedResponseContent); throw new InvalidDataException(message);
Azure MLã®åŒã³åºãã¡ãœããã¯å®äºãããšèŠãªãããšãã§ããŸãã ã芧ã®ãšããããã®å®è£ ã¯éåžžã«ç°¡åã§ãããçµ±èšããŒã¿ã¢ãã«ãåŠç¿ã¢ã«ãŽãªãºã ãããã³å ¥åãã¯ãã«ã®ä»»æã®æšå®å€ãè©äŸ¡ããæ¹æ³ãå®è£ ããããã»ã¹å šäœãæ§ç¯ããŸãã ãããè€éãªæ°åŠççè«ã¯ãããã°ã©ã ã³ãŒãã®æ°è¡ã«åãŸããŸãã
çµè«ãšããŠãæšå®ãã¿ã³ã®ååŸã€ãã³ããã³ãã©ãŒãå®è£ ããå¿ èŠããããŸãã ãŸããMainPage.xamlã«ç§»åããã€ãã³ããã³ãã©ãŒæ å ±ãGetEstimateãã¿ã³XMLã¿ã°ã«è¿œå ããŸãã
<Button ⊠Click="GetEstimate_Click"/>
MainPage.xaml.csã«æ»ããé©åãªã¡ãœãããäœæããŸãã 以åã«äœæããã¡ãœãããåŒã³åºããŠAzure MLãµãŒãã¹ã«ã¢ã¯ã»ã¹ããçµæãtbResultã«èšå®ããŸãã
private async void GetEstimate_Click(object sender, RoutedEventArgs e) { try { var price = await CallAzureML(tbxMake.Text, tbxBodyStyle.Text, slWheelBase.Value, tbxNumberOfCylinders.Text, (int)slEngineSize.Value, (int)slHorsepowers.Value, (int)slPeakRPM.Value, (int)slHighwayMPG.Value); tbResult.Text = String.Format("You are lucky!\n" + "Today it is as cheap as {0:c}. Don't miss your chance!", price); } catch (Exception ex) { // Shows error in result TextBlock tbResult.Text = String.Format("Oops! Something went wrong.\n" + "This can be helpful:\n{0}", ex.ToString()); } }
ãã¹ãŠãã¢ããªã±ãŒã·ã§ã³ã®æºåãã§ããŸããã ãããå®è¡ããç°ãªãç¹æ§ã®ã»ããã§è»ã®äŸ¡å€ãè©äŸ¡ããŠå®éšããŠãã ããã
ãããã«
Azure Machine Learningã¯ãæ©æ¢°åŠç¿ã¢ã«ãŽãªãºã ãæäœããããã®æ°ããçç£æ§ã®é«ãããŒã«ã§ãã ããããããã¯ãã¢ã«ãŽãªãºã ãåå¥ã®ãµãŒãã¹ãšããŠå ¬éãããã®åŸã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšããããšãéåžžã«ç°¡åã«ããå¯äžã®ç°å¢ã§ãã ãã®äœæ¥ã§ã¯ãæãåçŽãªåŠç¿ã¢ã«ãŽãªãºã ã®1ã€ã§ããç·åœ¢ååž°ã¢ã«ãŽãªãºã ã䜿çšãããŸããã Azure MLã«ã¯ãããŸããŸãªç®çã®ããã«ç§åŠè ã«ãã£ãŠäœæãããæ°åãã®ãã®ããããŸãã ãããŠæãéèŠãªããšã¯ããããã䜿çšããããã«æ°åŠè ã§ããå¿ èŠã¯ãŸã£ãããªããšããããšã§ãã ã³ã³ããŒãã³ãã䜿çšããŠå¿ èŠãªããŒã¿åŠçããã»ã¹ãåéããããã€ãã®å®éšãè¡ããæåããå Žåã¯ãã¹ãŠããµãŒãã¹ã®åœ¢åŒã§å ¬éããã ãã§ååã§ãã
以äžã«ãå®éšããããŒã¿ãµã³ãã«ãããã€ã瀺ããŸãã