ã©ã³ãã ãã©ã¬ã¹ãã®ã¤ãããã
ãã®è¨äºã¯Competitive Programming Advent Calendar 2014 - PARTAKE24æ¥ç®ã®è¨äºã§ããé¢é£è¨äºã«å®è£
ç·¨ãããã¾ãã
ランダムフォレストのつくりかた(C++の実装例つき) - じじいのプログラミング
ä»å¹´ã¯ãTopCoderã®æ©æ¢°å¦ç¿ãããã«ç©æ¥µçã«åå ãã¦ãçµé¨ãããããè©°ããã®ã§ããã®ãã¦ãã¦ãå ¬éãããã¨æãã¾ãã
- èªåã®ããæ¹ã¯ææµãªã®ã§ãã¢ããã¤ã¹ãããã ããã¨ãã¨ã¦ãããããã§ãã
- ãã®è¨äºã«ã¯ã©ã³ãã ãã©ã¬ã¹ãã®èª¬æã¯ããã¾ããããããä¸ã«è¯ãè¨äºãå¤ãããã¾ãã「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京ã®è¨äºã¯èªã¿ãããã¨æãã¾ããã
- ãã®ä¸ã®ã³ãã®ããã¤ãã¯ãã©ã³ãã ãã©ã¬ã¹ãã«éãã使ããã¨æãã¾ãã
- å®è£ ã¯ãªãã®ã§ãRãPythonããã±ã¼ã¸çã®ãã¼ã«ãä½¿ãæ¹ã«ã使ããã¨æãã¾ããå®è£ ãããæ¹ã¯ãä¸è¨ã®è¨äºãã¿ã¦ãã ããã
ã¾ãã¯ãã¼ã¿ãçºããã
ãã¸ã¥ã¢ã©ã¤ãºãã¦ãã¼ã¿ãçºããã®ããã¾ãç¬¬ä¸æ©ã§ããããã¼ã¿ã«ä¸æ£å¤ãæ··ãã£ã¦ããªãããã人éãè¦ãã°ããåãããããªæ³åã¯ãªããããªã©ããã§ãã¯ãã¾ããExcelã§ãRã§ãããã®ã§ãè¦ã¾ããããæ¥µç«¯ãªè©±ã§ãããTopCoderã®éå»ã®æ©æ¢°å¦ç¿ãããä¸ã§ãçããå¿ ãããã宿°*æ´æ°åãã«ãªããã¼ã¿ã¨ããã®ãããã¾ããããããã£ãç¹å¥ãªæ³åãè¦éãã¨ã大ããä¸å©ã«ãªãã¾ãã
説æå¤æ°ããèªå·±å¤æã§åããªãã
ããã¯ãããã¡ãªå¤±æã§ããæ©æ¢°å¦ç¿ã§ã¯ã説æå¤æ°x0,x1,x2...ããç®ç夿°yãäºæ³ãã¾ãããããã¦ãã®åé¡ã§ã¯ã説æå¤æ°ã®å
å®¹ãæ¸ããããã¾ãããã ãå顿ã§å
容説æãèªã¿ããããããã¯ä»åã®åé¡ã«é¢ä¿ãªããªããã¨æã£ã¦ãåãã®ã¯ããã¾ããããèªå·±å¤æã§è¿½å ããã®ã¯è¯ãã§ãããåãã®ã¯ãã¡ã§ãã
ä¾ãã°ãTopCoderã®OctaveClassifierï¼"http://community.topcoder.com/longcontest/?module=ViewProblemStatement&rd=15879&pm=13017"ï¼ã¨ããåé¡ã§ã¯setIDã¨ãã夿°ãã説æå¤æ°ã«æ®ãããã©ããããä¸ä½ã«å
¥ãããã©ããã®éµã«ãªãã¾ãããæ¬ä½ãã¼ã¿åæã®ä¾é ¼è
ã¯æå³ãªãã¤ããå¤ã ã£ãã¯ããªã®ã§ãããå®éã«ãã¼ã¿ãçºãã¦ã¿ãã¨ä»¥ä¸ã®ããã«ãè¿ãã®setIDã®ãã®ãããªãã¨ãªãä¼¼ããããªé
ç½®ã«ãªã£ã¦ããã®ãåããã¨æãã¾ãã
説æå¤æ°ãå¤ããã¦ãåããããªããã¨ã¯ãããã¨æãã¾ããã©ã³ãã ãã©ã¬ã¹ãã®å ´åã¯ã説æå¤æ°ã®å¯ä¸åº¦ãæ±ããããã®ã§ãå¯ä¸åº¦ãä½ã夿°ãåãé¤ãã¨ããã®ã¯ããã§ãï¼ãã ãçµé¨ä¸ããã¾ã大ããªå¹æã¯ãªãã§ãï¼ããããã¯æ¬¡å 忏ã®ã¢ã«ã´ãªãºã ã§èª¬æå¤æ°ãåãã¾ãããã
説æå¤æ°ã追å ããã
åé¡ã§ä¸ãããããã¼ã¿ããã®ã¾ã¾èª¬æå¤æ°ã«ããã³ãã ãã ã¨ãããã¯ä»ã®äººããã£ã¦ããã®ã§ãä¸ä½10%ã¨ãã«å ¥ãã®ã¯é£ããã¨æãã¾ãããã§ã«ãããã¼ã¿ãããæ°ããªèª¬æå¤æ°ãæ±ã追å ãããã¨ã§ãæ§è½ããã£ã¨ããããã¨ãã§ãã¾ãããããããã°ã説æå¤æ°x0,x1,x2ãããªããããªåé¡ã§ããx3,x4â¦ãèªåã§å®ç¾©ãã¦è¿½å ããã¨ãæ§è½ãä¸ããå ´åãããã¨ãããã¨ã§ãã
ï¼1ï¼å種ã®ãã¼ã¿ã¨ã®ããããã表ã夿°ã追å ãã
ããã¯æå¤ã¨è¦è½ã¨ããã¡ã§ããã©ããã¦ãï¼ã¤ï¼ã¤å¥ã®ãã¼ã¿ã¨ãã¦è¦ãã¡ãªã®ã§ãããä»ã®ãã¼ã¿ã¨ã®é¢ä¿ã¯éè¦ã§ããä¾ãã°ã以ä¸ã®å³ã§ãåãè²ã®ç¹ãå種ã®ãã¼ã¿ã ã£ãã¨ãã¾ãã黿·µã®ç·ã®ç¹ããä»ã®ç·ç¹ãå«ãç©å½¢é åã®ã©ã®è¾ºã«ãããã¨ããã®ã¯ãæããã«ç¹å¾´ã®ï¼ã¤ã¨ããã¾ããä»ã«ããéå¿ã»å帰ç´ç·ã»å
±åæ£è¡åãªã©ãéåããæ±ã¾ãçµ±è¨æ
å ±ã¯ããããã¨ããã¾ããããã«å¿ç¨ãã¦ãéå¿ããã®è·é¢ã¨ããå¯åº¦ã¨ããåãã©ãã«å
ã§xã®å¤ãä½çªç®ã«å¤§ããã¨ãããããã£ã夿°ã追å ããã®ãæå¹ãªå ´åã¯ããã¾ãã
ã¾ããå種ã®ãã¼ã¿ã§ããã¨ããæ
å ±ãããã¼ã¿ã®èª¬æå¤æ°ã«å«ã¾ãã¦ããªãå ´åããå種ã¨ã¿ãªããå ´åãããã¾ãã以ä¸ã®ä¾ã§ã¯ãã峿ãä¸ã«ä¼¸ã³ããã¼ã¿ã®éåãç·ã©ãã«ã«ãªããã¨ããæ³åãããããã§ããããããå ´åã¯ãk-meansã®ãããªã¯ã©ã¹ã¿ãªã³ã°ã¢ã«ã´ãªãºã ã§å種ã¨ã¿ãªããããå¯åº¦ãé«ãé åãUnionFindã§ã¤ãªãã§ããããå種ã®ãã¼ã¿ãã¿ãªãã°åãæ±ãã¾ãã
ï¼2ï¼ä¸æ£å¤ã®æ°ã追å ãã
ãã¼ã¿ãããããã¨ãããã¨èªä½ãç¹å¾´ã¨ããããã®ã§ã䏿£å¤ã®æ°ãã«ã¦ã³ããã¦ã説æå¤æ°ã¨ãã¦è¿½å ããã»ããè¯ãã§ãã
ï¼3ï¼x1-x2, x1+x2çã追å ãã
ã©ã³ãã ãã©ã¬ã¹ãã¯ã軸ã«å¹³è¡ãªåãæ¹ããã§ããªãã®ã§ãx1-x2ã¨ãã£ãå·®åã追å ããã®ã¯æå¹ãªãã¨ãããã¾ããã§ããæ±ºå®æ¨ï¼æ¬ã ããä½ãã¨ããããã§ã¯ãªãã®ã§ãè¶³ããªãã£ãããã¨è¨ã£ã¦ãããã¾ã§æªãçµæã«ãªãã£ã¦ãã¨ã¯ãªãã®ã§ããããããã广ãããã¨ãã¯ããã¾ãã
ï¼4ï¼ä»ã®ã¸ã£ã³ã«ã®æ©æ¢°å¦ç¿ã§ä½¿ãããç¹å¾´éã追å ãã
æååãåºã¦ããããã®ã¾ã¾åæåã«ãããã£ããåèªã«åãã¦åèªå¥ã«IDãä»ãããã¨ããåå¦å¼ã«å¯¾ãã¦n-gramã使ã£ã¦ã¿ããã¨ãããããã工夫ã§ãã¾ããä»ã®ã¸ã£ã³ã«ã®æ©æ¢°å¦ç¿ã§ä½¿ãããç¹å¾´éãããããã¨è¿½å ã§ããªããèãã¾ãããã
æ¨ã¯å°ããã¤å¢ãã
ã©ã³ãã ãã©ã¬ã¹ãã§æ¨ãå¢ãããã¨ã§çµæãæªããªãã¨ãããã¨ã¯ãã¾ãããã¾ãããã¤ã¾ããè¨ç®æéãä½ã£ã¦ãããªããã©ãã©ãæ¨ãå¢ããã¦ãã£ãã»ããè¯ãã§ããç¹ã«TopCoderã«ã¼ã«ã®å ´åã¯ãè¨ç®æéå¶éãããã®ã§ãæåã«æ¨ãä½ãæ¬æ°ãå¤ãã§æ±ºãæã¡ãã¦ãã¾ãã¨ãæéã®ãªã®ãªã¾ã§æ¨ãå¢ããã¨ãããã¨ã¯ã§ãã¾ããã10æ¬ã¨ã100æ¬ã¨ãå°ãªãæ¬æ°ãè¶³ãã¦ããããã®é½åº¦æéãè¨æ¸¬ãã¦ãæéã®ãªã®ãªã¾ã§è¿½å ããå½¢ãããã§ããèªåã§ã³ã¼ããæ¸ããå ´åã¯ç°¡åã«ã§ãã¾ãããRè¨èªã§ãforest <- grow(forest, 100)ã®ããã«æ¸ãã¦ç¹°ãè¿ãå¼ã¹ã°å°ããã¤å¢ãããã¨ãã§ãã¾ãã
ã¾ããTopCoderã«ã¼ã«ã®å ´åã¯ãã¡ã¢ãªå¶éãããã®ã§ããã®å¶éã«ã²ã£ããããªãããã«ããããã«ããæ¨ãå°ããã¤å¢ããææ³ã¯æå¹ã§ãã
ãã¼ã¿ã®ä¸é¨ãéå¦ç¿ãã§ãã¯ç¨ã«ã¨ã£ã¦ããã
æ£ç´ã©ã³ãã ãã©ã¬ã¹ãã§ã¯ããã¾ãéè¦ã§ã¯ããã¾ããããããã§ããã¼ã¿ãå°ãªãå ´åã調æ´ãã¹ã夿°ãå¤ãæ©æ¢°å¦ç¿ææ³ã®å ´åã¯ããã¯ããã£ãã»ããè¯ãã¨æãã¾ãã
èªåã®å ´åã¯ã以ä¸ã®ãããªæé ã§è¡ã£ã¦ãã¾ãã
- ãã¼ã¿ã90%ï¼ã¯ãã¹ããªãã¼ã·ã§ã³ç¨ï¼ã¨10%ï¼éå¦ç¿å¯¾çç¨ï¼ã«ããã
- ã¯ãã¹ããªãã¼ã·ã§ã³ããã®90%ã®ãã¼ã¿ãããã«2ã¤ã«åãã¦ãçæ¹ãè¨ç·´ãã¼ã¿ãçæ¹ããã¹ããã¼ã¿ã¨ãããããã§ã説æå¤æ°ãå¢ããããã宿°ã®èª¿æ´ãããããã¦ãè¯ãã¹ã³ã¢ãã§ãããã«ãããããããã¼ã¿ã®åãæ¹ãå¤ãã¦ãä½åº¦ãç¹°ãè¿ãã
- æºè¶³ããã£ãããæ®ã10%ã®éå¦ç¿å¯¾çç¨ããã¹ããã¼ã¿ã¨ãã¦ä½¿ããããã§çµæããã£ã¨æªããªã£ãããéå¦ç¿ãçãããã®ã§(2)ããããç´ããï¼ãã ã(2)(3)ãä½åº¦ãç¹°ãè¿ãã¨ããã¼ã¿ãåããæå³ããªãã®ã§ã注æï¼
ã¡ãªã¿ã«ãTopCoderã®é常ã®ãã©ã½ã³ãããã§ããæçµèª¿æ´æã®æé©åï¼ï¼æå¾ã«ããã°ã©ã ä¸ã«æ®ã£ã宿°ã調æ´ãããã¨ã§ã¹ã³ã¢ã稼ãï¼ã®ã¨ãããèª¿æ´æã«ä½¿ããªãã£ããã¹ãã±ã¼ã¹ã使ã£ã¦å®è¡ããåããããã®å¾ç¹ãã¨ããã確èªãã¾ããããã§ã¬ã¯ã³ã¨ç¹æ°ãä¸ãã£ãããéå¦ç¿ãçãã¾ãã
/////
以ä¸ã§ããã¿ãªãããããã²ã©ã³ãã ãã©ã¬ã¹ãã使ã£ã¦ã¿ã¦ãã ããã
ææ¥12/25æçµæ¥ã¯ãAdvent Calendar主å¬è ã® tanzakuããï¼æ¯å¹´ãããã¨ããããã¾ãï¼ã¨ããã¤ãè¡æã®è¨äºã§æ¥½ãã¾ãã¦ãããli_sakuããã§ãããæ¥½ãã¿ã«ï¼