ãã®èšäºã®å·çã«ååããŠããããã€ã¯ããœããåŠçããŒãããŒã®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) {
æåã®ã±ãŒã¹ã§ã¯ã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) {
ãã¹ãŠãã¢ããªã±ãŒã·ã§ã³ã®æºåãã§ããŸããã ãããå®è¡ããç°ãªãç¹æ§ã®ã»ããã§è»ã®äŸ¡å€ãè©äŸ¡ããŠå®éšããŠãã ããã
ãããã«Azure Machine Learningã¯ãæ©æ¢°åŠç¿ã¢ã«ãŽãªãºã ãæäœããããã®æ°ããçç£æ§ã®é«ãããŒã«ã§ãã ããããããã¯ãã¢ã«ãŽãªãºã ãåå¥ã®ãµãŒãã¹ãšããŠå
¬éãããã®åŸã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšããããšãéåžžã«ç°¡åã«ããå¯äžã®ç°å¢ã§ãã ãã®äœæ¥ã§ã¯ãæãåçŽãªåŠç¿ã¢ã«ãŽãªãºã ã®1ã€ã§ããç·åœ¢ååž°ã¢ã«ãŽãªãºã ã䜿çšãããŸããã Azure MLã«ã¯ãããŸããŸãªç®çã®ããã«ç§åŠè
ã«ãã£ãŠäœæãããæ°åãã®ãã®ããããŸãã ãããŠæãéèŠãªããšã¯ããããã䜿çšããããã«æ°åŠè
ã§ããå¿
èŠã¯ãŸã£ãããªããšããããšã§ãã ã³ã³ããŒãã³ãã䜿çšããŠå¿
èŠãªããŒã¿åŠçããã»ã¹ãåéããããã€ãã®å®éšãè¡ããæåããå Žåã¯ãã¹ãŠããµãŒãã¹ã®åœ¢åŒã§å
¬éããã ãã§ååã§ãã
以äžã«ãå®éšããããŒã¿ãµã³ãã«ãããã€ã瀺ããŸãã