Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
ÓÃSpark»úÆ÷ѧϰÊý¾ÝÁ÷Ë®Ïß½øÐÐ¹ã¸æ¼ì²â
 
  2012  次浏览      27
 2018-11-19
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚ51cto£¬±¾ÎÄÖ÷Òª½éÉÜÈçºÎʹÓÃSpark ML°üµÄAPIÒÔ¼°»úÆ÷ѧϰÁ÷Ë®ÏßÄ£¿éµÈÏà¹ØÄÚÈÝ¡£

ÔÚÕâÆªÎÄÕÂÖУ¬ÎÒÃÇSparkµÄÆäËü»úÆ÷ѧϰAPI£¬ÃûΪSpark ML£¬Èç¹ûÒªÓÃÊý¾ÝÁ÷Ë®ÏßÀ´¿ª·¢´óÊý¾ÝÓ¦ÓóÌÐòµÄ»°£¬Õâ¸öÊÇÍÆ¼öµÄ½â¾ö·½°¸¡£¹Ø¼üµã£º

Á˽â»úÆ÷ѧϰÊý¾ÝÁ÷Ë®ÏßÓйØÄÚÈÝ¡£

ÔõôÓÃApache Spark»úÆ÷ѧϰ°üÀ´ÊµÏÖ»úÆ÷ѧϰÊý¾ÝÁ÷Ë®Ïß¡£

Êý¾Ý¼ÛÖµÁ´´¦ÀíµÄ²½Öè¡£

Spark»úÆ÷ѧϰÁ÷Ë®ÏßÄ£¿éºÍAPI¡£

ÎÄ×Ö·ÖÀàºÍ¹ã¸æ¼ì²âÓÃÀý¡£

Spark ML(spark.ml)°üÌṩÁ˹¹½¨ÔÚDataFrameÖ®ÉϵĻúÆ÷ѧϰAPI£¬ËüÒѾ­³ÉÁËSpark SQL¿âµÄºËÐIJ¿·Ö¡£Õâ¸ö°ü¿ÉÒÔÓÃÓÚ¿ª·¢ºÍ¹ÜÀí»úÆ÷ѧϰÁ÷Ë®Ïß¡£ËüÒ²¿ÉÒÔÌá¹©ÌØÕ÷³éÈ¡Æ÷¡¢×ª»»Æ÷¡¢Ñ¡ÔñÆ÷£¬²¢Ö§³Ö·ÖÀà¡¢»ã¾ÛºÍ·Ö´ØµÈ»úÆ÷ѧϰ¼¼Êõ¡£ÕâЩȫ¶¼¶Ô¿ª·¢»úÆ÷ѧϰ½â¾ö·½°¸ÖÁ¹ØÖØÒª¡£

ÔÚÕâÀïÎÒÃÇ¿´¿´ÈçºÎʹÓÃApache SparkÀ´×ö̽Ë÷ʽÊý¾Ý·ÖÎö(Exploratory Data Analysis)¡¢¿ª·¢»úÆ÷ѧϰÁ÷Ë®Ïߣ¬²¢Ê¹ÓÃSpark ML°üÖÐÌṩµÄAPIºÍËã·¨¡£

ÒòΪ֧³Ö¹¹½¨»úÆ÷ѧϰÊý¾ÝÁ÷Ë®Ïߣ¬Apache Spark¿ò¼ÜÏÖÔÚÒѾ­³ÉÁËÒ»¸ö·Ç³£²»´íµÄÑ¡Ôñ£¬¿ÉÒÔÓÃÓÚ¹¹½¨Ò»¸öÈ«ÃæµÄÓÃÀý£¬°üÀ¨ETL¡¢Ö¸Á¿·ÖÎö¡¢ÊµÊ±Á÷·ÖÎö¡¢»úÆ÷ѧϰ¡¢Í¼´¦ÀíºÍ¿ÉÊÓ»¯µÈ¡£

»úÆ÷ѧϰÊý¾ÝÁ÷Ë®Ïß

»úÆ÷ѧϰÁ÷Ë®Ïß¿ÉÒÔÓÃÓÚ´´½¨¡¢µ÷½ÚºÍ¼ìÑé»úÆ÷ѧϰ¹¤×÷Á÷³ÌÐòµÈ¡£»úÆ÷ѧϰÁ÷Ë®Ïß¿ÉÒÔ°ïÖúÎÒÃǸü¼ÓרעÓÚÏîÄ¿ÖеĴóÊý¾ÝÐèÇóºÍ»úÆ÷ѧϰÈÎÎñµÈ£¬¶ø²»ÊǰÑʱ¼äºÍ¾«Á¦»¨ÔÚ»ù´¡ÉèÊ©ºÍ·Ö²¼Ê½¼ÆËãÁìÓòÉÏ¡£ËüÒ²¿ÉÒÔÔÚ´¦Àí»úÆ÷ѧϰÎÊÌâʱ°ïÖúÎÒÃÇ£¬ÔÚ̽Ë÷½×¶ÎÎÒÃÇÒª¿ª·¢µü´úʽ¹¦ÄܺÍ×éºÏÄ£ÐÍ¡£

»úÆ÷ѧϰ¹¤×÷Á÷ͨ³£ÐèÒª°üÀ¨Ò»ÏµÁеĴ¦ÀíºÍѧϰ½×¶Î¡£»úÆ÷ѧϰÊý¾ÝÁ÷Ë®Ïß³£±»ÃèÊöΪһÖֽ׶εÄÐòÁУ¬Ã¿¸ö½×¶Î»òÕßÊÇÒ»¸öת»»Æ÷Ä£¿é£¬»òÕßÊǸö¹À¼ÆÆ÷Ä£¿é¡£ÕâЩ½×¶Î»á°´Ë³ÐòÖ´ÐУ¬ÊäÈëÊý¾ÝÔÚÁ÷Ë®ÏßÖÐÁ÷¾­Ã¿¸ö½×¶Îʱ»á±»´¦ÀíºÍת»»¡£

»úÆ÷ѧϰ¿ª·¢¿ò¼ÜÒªÖ§³Ö·Ö²¼Ê½¼ÆË㣬²¢×÷Ϊ×é×°Á÷Ë®ÏßÄ£¿éµÄ¹¤¾ß¡£»¹ÓÐһЩÆäËüµÄ¹¹½¨Êý¾ÝÁ÷Ë®ÏßµÄÐèÇ󣬰üÀ¨ÈÝ´í¡¢×ÊÔ´¹ÜÀí¡¢¿ÉÀ©Õ¹ÐԺͿÉά»¤ÐԵȡ£

ÔÚÕæÊµÏîÄ¿ÖУ¬»úÆ÷ѧϰ¹¤×÷Á÷½â¾ö·½°¸Ò²°üÀ¨Ä£Ð͵¼Èëµ¼³ö¹¤¾ß¡¢½»²æÑéÖ¤À´Ñ¡Ôñ²ÎÊý¡¢Îª¶à¸öÊý¾ÝÔ´»ýÀÛÊý¾ÝµÈ¡£ËüÃÇÒ²ÌṩÁËһЩÏñ¹¦ÄܳéÈ¡¡¢Ñ¡ÔñºÍͳ¼ÆµÈµÄÊý¾Ý¹¤¾ß¡£ÕâЩ¿ò¼ÜÖ§³Ö»úÆ÷ѧϰÁ÷Ë®Ï߳־û¯À´±£´æºÍµ¼Èë»úÆ÷ѧϰģÐͺÍÁ÷Ë®Ïߣ¬ÒÔ±¸½«À´Ê¹Óá£

»úÆ÷ѧϰ¹¤×÷Á÷µÄ¸ÅÄîºÍ¹¤×÷Á÷´¦ÀíÆ÷µÄ×éºÏÒѾ­ÔÚ¶àÖÖ²»Í¬ÏµÍ³ÖÐÔ½À´Ô½ÊÜ»¶Ó­¡£Ïóscikit-learnºÍGraphLabµÈ´óÊý¾Ý´¦Àí¿ò¼ÜҲʹÓÃÁ÷Ë®ÏߵĸÅÄîÀ´¹¹½¨ÏµÍ³¡£

Ò»¸öµäÐ͵ÄÊý¾Ý¼ÛÖµÁ´Á÷³Ì°üÀ¨Èçϲ½Ö裺

·¢ÏÖ

×¢Èë

´¦Àí

±£´æ

ÕûºÏ

·ÖÎö

չʾ

»úÆ÷ѧϰÊý¾ÝÁ÷Ë®ÏßËùÓõķ½·¨¶¼ÊÇÀàËÆµÄ¡£ÏÂͼչʾÁËÔÚ»úÆ÷ѧϰÁ÷Ë®Ïß´¦ÀíÖÐÉæ¼°µ½µÄ²»Í¬²½Öè¡£

±íÒ»£º»úÆ÷ѧϰÁ÷Ë®Ïß´¦Àí²½Öè

ÕâЩ²½ÖèÒ²¿ÉÒÔÓÃÏÂÃæµÄͼһ±íʾ¡£

ͼһ£º»úÆ÷ѧϰÊý¾ÝÁ÷Ë®Ïß´¦ÀíÁ÷ͼ

½ÓÏÂÀ´ÈÃÎÒÃÇÒ»Æð¿´¿´Ã¿¸ö²½ÖèµÄϸ½Ú¡£

Êý¾Ý×¢È룺ÎÒÃÇÊÕ¼¯ÆðÀ´¹©¸ø»úÆ÷ѧϰÁ÷Ë®ÏßÓ¦ÓóÌÐòµÄÊý¾Ý¿ÉÒÔÀ´×ÔÓÚ¶àÖÖÊý¾ÝÔ´£¬Êý¾Ý¹æÄ£Ò²ÊÇ´Ó¼¸°ÙGBµ½¼¸TB¶¼¿ÉÒÔ¡£¶øÇÒ£¬´óÊý¾ÝÓ¦ÓóÌÐò»¹ÓÐÒ»¸öÌØÕ÷£¬¾ÍÊÇ×¢È벻ͬ¸ñʽµÄÊý¾Ý¡£

Êý¾ÝÇåÏ´£ºÊý¾ÝÇåÏ´ÕâÒ»²½ÔÚÕû¸öÊý¾Ý·ÖÎöÁ÷Ë®ÏßÖÐÊǵÚÒ»²½£¬Ò²ÊÇÖÁ¹ØÖØÒªµÄÒ»²½£¬Ò²¿ÉÒÔ½Ð×öÊý¾ÝÇåÀí»òÊý¾Ýת»»£¬ÕâÒ»²½Ö÷ÒªÊÇÒª°ÑÊäÈëÊý¾Ý±ä³É½á¹¹»¯µÄ£¬ÒÔ·½±ãºóÐøµÄÊý¾Ý´¦ÀíºÍÔ¤²âÐÔ·ÖÎö¡£ÒÀ½øÈ뵽ϵͳÖеÄÊý¾ÝÖÊÁ¿²»Í¬£¬×Ü´¦Àíʱ¼äµÄ60%-70%»á±»»¨ÔÚÊý¾ÝÇåÏ´ÉÏ£¬°ÑÊý¾Ýת³ÉºÏÊʵĸñʽ£¬ÕâÑù²ÅÄܰѻúÆ÷ѧϰģÐÍÓ¦Óõ½Êý¾ÝÉÏ¡£

Êý¾Ý×Ü»áÓи÷ÖÖ¸÷ÑùµÄÖÊÁ¿ÎÊÌ⣬±ÈÈçÊý¾Ý²»ÍêÕû£¬»òÕßÊý¾ÝÏî²»ÕýÈ·»ò²»ºÏ·¨µÈ¡£Êý¾ÝÇåÏ´¹ý³Ìͨ³£»áʹÓø÷ÖÖ²»Í¬µÄ·½·¨£¬°üÀ¨¶¨ÖÆ×ª»»Æ÷µÈ£¬ÓÃÁ÷Ë®ÏßÖе͍ÖƵÄת»»Æ÷È¥Ö´ÐÐÊý¾ÝÇåÏ´¶¯×÷¡£

Ï¡Êè»ò´ÖÁ£Êý¾ÝÊÇÊý¾Ý·ÖÎöÖеÄÁíÒ»¸öÌôÕ½¡£ÔÚÕâ·½Ãæ×ܻᷢÉúÐí¶à¼«¶Ë°¸Àý£¬ËùÒÔÎÒÃÇÒªÓÃÉÏÃæ½²µ½µÄÊý¾ÝÇåÏ´¼¼ÊõÀ´±£Ö¤ÊäÈëµ½Êý¾ÝÁ÷Ë®ÏßÖеÄÊý¾Ý±ØÐëÊǸßÖÊÁ¿µÄ¡£

°éËæ×ÅÎÒÃǶÔÎÊÌâµÄÉîÈëÀí½â£¬Ã¿Ò»´ÎµÄÁ¬Ðø³¢ÊԺͲ»¶ÏµØ¸üÐÂÄ£ÐÍ£¬Êý¾ÝÇåϴҲͨ³£ÊǸöµü´úµÄ¹ý³Ì¡£ÏóTrifacta¡¢OpenRefine»òActiveCleanµÈÊý¾Ýת»»¹¤¾ß¶¼¿ÉÒÔÓÃÀ´Íê³ÉÊý¾ÝÇåÏ´ÈÎÎñ¡£

ÌØÕ÷³éÈ¡£ºÔÚÌØÕ÷³éÈ¡(ÓÐʱºòÒ²½ÐÌØÕ÷¹¤³Ì)ÕâÒ»²½£¬ÎÒÃÇ»áÓÃÌØÕ÷¹þÏ£(Hashing Term Frequency)ºÍWord2VecµÈ¼¼ÊõÀ´´ÓԭʼÊý¾ÝÖгéÈ¡¾ßÌåµÄ¹¦ÄÜ¡£ÕâÒ»²½µÄÊä³ö½á¹û³£³£Ò²°üÀ¨Ò»¸ö»ã±àÄ£¿é£¬»áÒ»Æð´«ÈëÏÂÒ»¸ö²½Öè½øÐд¦Àí¡£

Ä£ÐÍѵÁ·£º»úÆ÷ѧϰģÐÍѵÁ·°üÀ¨Ìṩһ¸öËã·¨£¬²¢ÌṩһЩѵÁ·Êý¾ÝÈÃÄ£ÐÍ¿ÉÒÔѧϰ¡£Ñ§Ï°Ëã·¨»á´ÓѵÁ·Êý¾ÝÖз¢ÏÖģʽ£¬²¢Éú³ÉÊä³öÄ£ÐÍ¡£

Ä£ÐÍÑéÖ¤£ºÕâÒ»²½°üÆÀ¹ÀºÍµ÷Õû»úÆ÷ѧϰģÐÍ£¬ÒÔºâÁ¿ÓÃËüÀ´×öÔ¤²âµÄÓÐЧÐÔ¡£ÈçÕâÆªÎÄÕÂËù˵£¬¶ÔÓÚ¶þ½øÖÆ·ÖÀàÄ£ÐÍÆÀ¹ÀÖ¸±ê¿ÉÒÔÓýÓÊÕÕß²Ù×÷ÌØÕ÷(Receiver Operating Characteristic£¬ROC)ÇúÏß¡£ROCÇúÏß¿ÉÒÔ±íÏÖÒ»¸ö¶þ½øÖÆ·ÖÀàÆ÷ϵͳµÄÐÔÄÜ¡£´´½¨ËüµÄ·½·¨ÊÇÔÚ²»Í¬µÄãÐÖµÉèÖÃÏÂÃè»æÕæÑôÐÔÂÊ(True Positive Rate£¬TPR)ºÍ¼ÙÑôÐÔÂÊ(False Positive Rate£¬FPR)Ö®¼äµÄ¶ÔÓ¦¹ØÏµ¡£

Ä£ÐÍÑ¡Ôñ£ºÄ£ÐÍÑ¡ÔñÖ¸ÈÃת»»Æ÷ºÍ¹À¼ÆÆ÷ÓÃÊý¾ÝȥѡÔñ²ÎÊý¡£ÕâÔÚ»úÆ÷ѧϰÁ÷Ë®Ïß´¦Àí¹ý³ÌÖÐÒ²ÊǹؼüµÄÒ»²½¡£ParamGridBuilderºÍCrossValidatorµÈÀà¶¼ÌṩÁËAPIÀ´Ñ¡Ôñ»úÆ÷ѧϰģÐÍ¡£

Ä£ÐͲ¿Êð£ºÒ»µ©Ñ¡ºÃÁËÕýÈ·µÄÄ£ÐÍ£¬ÎÒÃǾͿÉÒÔ¿ªÊ¼²¿Êð£¬ÊäÈëÐÂÊý¾Ý²¢µÃµ½Ô¤²âÐԵķÖÎö½á¹û¡£ÎÒÃÇÒ²¿ÉÒÔ°Ñ»úÆ÷ѧϰģÐͲ¿Êð³ÉÍøÒ³·þÎñ¡£

Spark»úÆ÷ѧϰ

»úÆ÷ѧϰÁ÷Ë®ÏßAPIÊÇÔÚApache Spark¿ò¼Ü1.2°æÖÐÒýÈëµÄ¡£Ëü¸ø¿ª·¢ÕßÃÇÌṩÁËAPIÀ´´´½¨²¢Ö´Ðи´ÔӵĻúÆ÷ѧϰ¹¤×÷Á÷¡£Á÷Ë®ÏßAPIµÄÄ¿±êÊÇͨ¹ýΪ²»Í¬»úÆ÷ѧϰ¸ÅÄîÌṩ±ê×¼»¯µÄAPI£¬À´ÈÃÓû§¿ÉÒÔ¿ìËÙ²¢ÇáËɵØ×齨²¢ÅäÖÿÉÐеķֲ¼Ê½»úÆ÷ѧϰÁ÷Ë®Ïß¡£Á÷Ë®ÏßAPI°üº¬ÔÚorg.apache.spark.ml°üÖС£

Spark MLÒ²ÓÐÖúÓڰѶàÖÖ»úÆ÷ѧϰËã·¨×éºÏµ½Ò»ÌõÁ÷Ë®ÏßÖС£

Spark»úÆ÷ѧϰAPI±»·Ö³ÉÁËÁ½¸ö°ü£¬·Ö±ðÊÇspark.mllibºÍspark.ml¡£ÆäÖÐspark.ml°ü°üÀ¨ÁË»ùÓÚRDD¹¹½¨µÄԭʼAPI¡£¶øspark.ml°üÔòÌṩÁ˹¹½¨ÓÚDataFrameÖ®Éϵĸ߼¶API£¬ÓÃÓÚ¹¹½¨»úÆ÷ѧϰÁ÷Ë®Ïß¡£

»ùÓÚRDDµÄMLlib¿âAPIÏÖÔÚ´¦ÓÚά»¤Ä£Ê½¡£

ÈçÏÂÃæÍ¼¶þËùʾ£¬Spark MLÊÇApache SparkÉú̬ϵͳÖеÄÒ»¸ö·Ç³£ÖØÒªµÄ´óÊý¾Ý·ÖÎö¿â¡£

ͼ¶þ£º°üÀ¨ÁËSpark MLµÄSparkÉú̬ϵͳ

»úÆ÷ѧϰÁ÷Ë®ÏßÄ£¿é

»úÆ÷ѧϰÊý¾ÝÁ÷Ë®Ïß°üÀ¨ÁËÍê³ÉÊý¾Ý·ÖÎöÈÎÎñËùÐèÒªµÄ¶à¸öÄ£¿é¡£Êý¾ÝÁ÷Ë®ÏߵĹؼüÄ£¿é±»ÁÐÔÚÁËÏÂÃæ£º

Êý¾Ý¼¯

Á÷Ë®Ïß

Á÷Ë®ÏߵĽ׶Î

ת»»Æ÷

¹À¼ÆÆ÷

ÆÀ¹ÀÆ÷

²ÎÊý(ºÍ²ÎÊýµØÍ¼)

½ÓÏÂÀ´ÎÒÃǼòµ¥¿´¿´ÕâЩģ¿é¿ÉÒÔÔõô¶ÔÓ¦µ½ÕûÌåµÄ²½ÖèÖС£

Êý¾Ý¼¯£ºÔÚ»úÆ÷ѧϰÁ÷Ë®ÏßÖÐÊÇʹÓÃDataFrameÀ´±íÏÖÊý¾Ý¼¯µÄ¡£ËüÒ²ÔÊÐí°´ÓÐÃû×ÖµÄ×ֶα£´æ½á¹¹»¯Êý¾Ý¡£ÕâЩ×ֶοÉÒÔÓÃÓÚ±£´æÎÄ×Ö¡¢¹¦ÄÜÏòÁ¿¡¢ÕæÊµ±êÇ©ºÍÔ¤²â¡£

Á÷Ë®Ïߣº»úÆ÷ѧϰ¹¤×÷Á÷±»½¨Ä£ÎªÁ÷Ë®Ïߣ¬Õâ°üÀ¨ÁËһϵÁеĽ׶Ρ£Ã¿¸ö½×¶Î¶¼¶ÔÊäÈëÊý¾Ý½øÐд¦Àí£¬ÎªÏÂÒ»¸ö½×¶Î²úÉúÊä³öÊý¾Ý¡£Ò»¸öÁ÷Ë®Ï߰Ѷà¸öת»»Æ÷ºÍ¹À¼ÆÆ÷´®Á¬ÆðÀ´£¬ÃèÊöÒ»¸ö»úÆ÷ѧϰ¹¤×÷Á÷¡£

Á÷Ë®ÏߵĽ׶ΣºÎÒÃǶ¨ÒåÁ½Öֽ׶Σ¬×ª»»Æ÷ºÍ¹À¼ÆÆ÷¡£

ת»»Æ÷£ºËã·¨¿ÉÒÔ°ÑÒ»¸öDataFrameת»»³ÉÁíÒ»¸öDataFrame¡£±ÈÈ磬»úÆ÷ѧϰģÐ;ÍÊÇÒ»¸öת»»Æ÷£¬ÓÃÓÚ°ÑÒ»¸öÓÐÌØÕ÷µÄDataFrameת»»³ÉÒ»¸öÓÐÔ¤²âÐÅÏ¢µÄDataFrame¡£

ת»»Æ÷»á°ÑÒ»¸öDataFrameת³ÉÁíÒ»¸öDataFrame£¬Í¬Ê±ÎªËü¼ÓÈëеÄÌØÕ÷¡£±ÈÈçÔÚSpark ML°üÖУ¬OneHotEncoder¾Í»á°ÑÒ»¸öÓбêÇ©Ë÷ÒýµÄ×Ö¶Îת»»³ÉÒ»¸öÓÐÏòÁ¿ÌØÕ÷µÄ×ֶΡ£Ã¿¸öת»»Æ÷¶¼ÓÐÒ»¸ötransform()º¯Êý£¬±»µ÷ÓÃʱ¾Í»á°ÑÒ»¸öDataFrameת»»³ÉÁíÒ»¸ö¡£

¹À¼ÆÆ÷£º¹À¼ÆÆ÷¾ÍÊÇÒ»ÖÖ»úÆ÷ѧϰËã·¨£¬»á´ÓÄãÌṩµÄÊý¾ÝÖнøÐÐѧϰ¡£¹À¼ÆÆ÷µÄÊäÈëÊÇÒ»¸öDataFrame£¬Êä³ö¾ÍÊÇÒ»¸öת»»Æ÷¡£¹À¼ÆÆ÷ÓÃÓÚѵÁ·Ä£ÐÍ£¬ËüÉú³Éת»»Æ÷¡£±ÈÈ磬Âß¼­»Ø¹é¹À¼ÆÆ÷¾Í»á²úÉúÂß¼­»Ø¹éת»»Æ÷¡£ÁíÒ»¸öÀý×ÓÊǰÑK-Means×öΪ¹À¼ÆÆ÷£¬Ëü½ÓÊÜѵÁ·Êý¾Ý£¬Éú³ÉK-MeansÄ£ÐÍ£¬¾ÍÊÇÒ»¸öת»»Æ÷¡£

²ÎÊý£º»úÆ÷ѧϰģ¿é»áʹÓÃͨÓõÄAPIÀ´ÃèÊö²ÎÊý¡£²ÎÊýµÄÀý×ÓÖ®Ò»¾ÍÊÇÄ£ÐÍҪʹÓõÄ×î´óµü´ú´ÎÊý¡£

ÏÂͼչʾµÄÊÇÒ»¸öÓÃ×÷ÎÄ×Ö·ÖÀàµÄÊý¾ÝÁ÷Ë®Ïߵĸ÷¸öÄ£¿é¡£

ͼÈý£ºÊ¹ÓÃSpark MLµÄÊý¾ÝÁ÷Ë®Ïß

ÓÃÀý

»úÆ÷ѧϰÁ÷Ë®ÏßµÄÓÃÀýÖ®Ò»¾ÍÊÇÎÄ×Ö·ÖÀà¡£ÕâÖÖÓÃÀýͨ³£°üÀ¨Èçϲ½Ö裺

ÇåÏ´ÎÄ×ÖÊý¾Ý

½«Êý¾Ýת»¯³ÉÌØÕ÷ÏòÁ¿£¬²¢ÇÒ

ѵÁ··ÖÀàÄ£ÐÍ

ÔÚÎÄ×Ö·ÖÀàÖУ¬ÔÚ½øÐзÖÀàÄ£ÐÍ(ÀàËÆSVM)µÄѵÁ·Ö®Ç°£¬»á½øÐÐn-gram³éÏóºÍTF-IDFÌØÕ÷È¨ÖØµÈÊý¾ÝÔ¤´¦Àí¡£

ÁíÒ»¸ö»úÆ÷ѧϰÁ÷Ë®ÏßÓÃÀý¾ÍÊÇÔÚÕâÆªÎÄÕÂÖÐÃèÊöµÄͼÏñ·ÖÀà¡£

»¹ÓкܶàÖÖÆäËü»úÆ÷ѧϰÓÃÀý£¬°üÀ¨ÆÛÕ©¼ì²â(ʹÓ÷ÖÀàÄ£ÐÍ£¬ÕâÒ²ÊǼලʽѧϰµÄÒ»²¿·Ö)£¬Óû§·ÖÇø(¾Û´ØÄ£ÐÍ£¬ÕâÒ²ÊǷǼලʽѧϰµÄÒ»²¿·Ö)¡£

TF-IDF

´ÊƵ-ÄæÏòÎĵµÆµÂÊ(Term Frequency - Inverse Document Frequency£¬TF-IDF)ÊÇÒ»ÖÖÔÚ¸ø¶¨Ñù±¾¼¯ºÏÄÚÆÀ¹ÀÒ»¸ö´ÊµÄÖØÒª³Ì¶ÈµÄ¾²Ì¬ÆÀ¹À·½·¨¡£ÕâÊÇÒ»ÖÖÐÅÏ¢»ñÈ¡Ëã·¨£¬ÓÃÓÚÔÚÒ»¸öÎĵµ¼¯ºÏÄÚ¸øÒ»¸ö´ÊµÄÖØÒªÐÔ´ò·Ö¡£

TF£ºÈç¹ûÒ»¸ö´ÊÔÚÒ»·ÝÎĵµÖз´¸´³öÏÖ£¬ÄÇÕâ¸ö´Ê¾Í±È½ÏÖØÒª¡£¾ßÌ弯Ëã·½·¨Îª£º

TF = (# of times word X appears in a document) / (Total # of

words in the document)

IDF£ºµ«Èç¹ûÒ»¸ö´ÊÔÚ¶à·ÝÎĵµÖж¼Æµ·±³öÏÖ(±ÈÈçthe£¬and£¬ofµÈ)£¬ÄǾÍ˵Ã÷Õâ¸ö´ÊûÓÐʲôʵ¼ÊÒâÒ壬Òò´Ë¾ÍÒª½µµÍËüµÄÆÀ·Ö¡£

ʾÀý³ÌÐò

ÏÂÃæÎÒÃÇ¿´¸öʾÀý³ÌÐò£¬Á˽âÒ»ÏÂSpark ML°ü¿ÉÒÔÔõÑùÓÃÔÚ´óÊý¾Ý´¦ÀíϵͳÖС£ÎÒÃǻῪ·¢Ò»¸öÎĵµ·ÖÀà³ÌÐò£¬ÓÃÓÚÇø±ð³ÌÐòÊäÈëÊý¾ÝÖÐµÄ¹ã¸æÄÚÈÝ¡£²âÊÔÓõÄÊäÈëÊý¾Ý¼¯°üÀ¨Îĵµ¡¢µç×ÓÓʼþ»òÆäËüÈκδÓÍⲿϵͳÖÐÊÕµ½µÄ¿ÉÄܰüº¬¹ã¸æµÄÄÚÈÝ¡£

ÎÒÃǽ«Ê¹ÓÃÔÚStrata Hadoop World ConferenceÑÐÌÖ»áÉÏÌÖÂ۵ġ°ÓÃSpark¹¹½¨»úÆ÷ѧϰӦÓá±µÄ¹ã¸æ¼ì²âʾÀýÀ´¹¹½¨ÎÒÃǵÄʾÀý³ÌÐò¡£

ÓÃÀý

Õâ¸öÓÃÀý»á¶Ô·¢Ë͵½ÎÒÃǵÄϵͳÖеĸ÷ÖÖ²»Í¬ÏûÏ¢½øÐзÖÎö¡£ÓÐЩÏûÏ¢ÀïÃæÊǺ¬ÓÐ¹ã¸æÐÅÏ¢µÄ£¬µ«ÓÐЩÏûÏ¢ÀïÃæÃ»ÓС£ÎÒÃǵÄÄ¿±ê¾ÍÊÇÒªÓÃSpark ML APIÕÒ³öÄÇЩ°üº¬ÁË¹ã¸æµÄÏûÏ¢¡£

Ëã·¨

ÎÒÃǽ«Ê¹ÓûúÆ÷ѧϰÖеÄÂß¼­»Ø¹éËã·¨¡£Âß¼­»Ø¹éÊÇÒ»Öֻعé·ÖÎöÄ£ÐÍ£¬¿ÉÒÔ»ùÓÚÒ»¸ö»ò¶à¸ö¶ÀÁ¢±äÁ¿À´Ô¤²âµÃµ½ÊÇ»ò·ÇµÄ¿ÉÄܽá¹û¡£

ÏêϸµÄ½â¾ö·½°¸

½ÓÏÂÀ´ÔÛÃÇ¿´¿´Õâ¸öSpark MLʾÀý³ÌÐòµÄϸ½Ú£¬ÒÔ¼°ÔËÐв½Öè¡£

Êý¾Ý×¢È룺ÎÒÃÇ»á°Ñ°üº¬¹ã¸æµÄÊý¾Ý(Îı¾Îļþ)ºÍ²»°üº¬¹ã¸æµÄÊý¾Ý¶¼µ¼Èë¡£

Êý¾ÝÇåÏ´£ºÔÚʾÀý³ÌÐòÖУ¬ÎÒÃDz»×öÈκÎÌØ±ðµÄÊý¾ÝÇåÏ´²Ù×÷¡£ÎÒÃÇÖ»ÊǰÑËùÓеÄÊý¾Ý¶¼»ã¾Ûµ½Ò»¸öDataFrame¶ÔÏóÖС£

ÎÒÃÇËæ»úµØ´ÓѵÁ·Êý¾ÝºÍ²âÊÔÊý¾ÝÖÐÑ¡ÔñһЩÊý¾Ý£¬´´½¨Ò»¸öÊý×é¶ÔÏó¡£ÔÚÕâ¸öÀý×ÓÖÐÎÒÃǵÄÑ¡ÔñÊÇ70%µÄѵÁ·Êý¾Ý£¬ºÍ30%µÄ²âÊÔÊý¾Ý¡£

ÔÚºóÐøµÄÁ÷Ë®Ïß²Ù×÷ÖÐÎÒÃÇ·Ö±ðÓÃÕâÁ½¸öÊý¾Ý¶ÔÏóÀ´ÑµÁ·Ä£ÐͺÍ×öÔ¤²â¡£

ÎÒÃǵĻúÆ÷ѧϰÊý¾ÝÁ÷Ë®Ïß°üÀ¨ËIJ½£º

Tokenizer

HashingTF

IDF

LR

´´½¨Ò»¸öÁ÷Ë®Ïß¶ÔÏ󣬲¢ÇÒÔÚÁ÷Ë®ÏßÖÐÉèÖÃÉÏÃæµÄ¸÷¸ö½×¶Î¡£È»ºóÎÒÃǾͿÉÒÔ°´ÕÕÀý×Ó£¬»ùÓÚѵÁ·Êý¾ÝÀ´´´½¨Ò»¸öÂß¼­»Ø¹éÄ£ÐÍ¡£

ÏÖÔÚ£¬ÎÒÃÇÔÙʹÓòâÊÔÊý¾Ý(ÐÂÊý¾Ý¼¯)À´ÓÃÄ£ÐÍ×öÔ¤²â¡£

ÏÂÃæÍ¼ËÄÖÐչʾÁËÀý×Ó³ÌÐòµÄ¼Ü¹¹Í¼¡£

ͼ4£ºÊý¾Ý·ÖÀà³ÌÐò¼Ü¹¹Í¼

¼¼Êõ

ÔÚʵÏÖ»úÆ÷ѧϰÁ÷Ë®Ïß½â¾ö·½°¸Ê±ÎÒÃÇÓõ½ÁËÏÂÃæµÄ¼¼Êõ¡£

±í¶þ£ºÔÚ»úÆ÷ѧϰÀý×ÓÖÐÓõ½µÄ¼¼ÊõºÍ¹¤¾ß

Spark ML³ÌÐò

¸ù¾ÝÑÐÌÖ»áÉϵÄÀý×Ó¶øÐ´³ÉµÄ»úÆ÷ѧϰ´úÂëÊÇÓÃScala±à³ÌÓïÑÔдµÄ£¬ÎÒÃÇ¿ÉÒÔÖ±½ÓʹÓÃSpark Shell¿ØÖÆÌ¨À´ÔËÐÐÕâ¸ö³ÌÐò¡£

¹ã¸æ¼ì²âScala´úÂëÆ¬¶Î£º

µÚÒ»²½£º´´½¨Ò»¸ö¶¨ÖƵÄÀ࣬ÓÃÀ´´æ´¢¹ã¸æÄÚÈݵÄϸ½Ú¡£

case class SpamDocument(file: String, text: String, label:

Double)

µÚ¶þ²½£º³õʼ»¯SQLContext£¬²¢Í¨¹ýÒþʽת»»·½·¨À´°ÑScala¶ÔÏóת»»³ÉDataFrame¡£È»ºó´Ó´æ·Å×ÅÊäÈëÎļþµÄÖ¸¶¨Ä¿Â¼µ¼ÈëÊý¾Ý¼¯£¬½á¹û»á·µ»ØRDD¶ÔÏó¡£È»ºóÓÉÕâÁ½¸öÊý¾Ý¼¯µÄRDD¶ÔÏó´´½¨DataFrame¶ÔÏó¡£

val sqlContext = new SQLContext(sc)
import sqlContext.implicits._

//
// Load the data files with spam
//
val rddSData = sc.wholeTextFiles("SPAM_DATA_FILE_DIR", 1)
val dfSData = rddSData.map(d => SpamDocument(d._1, d._2,1)).toDF()
dfSData.show()

//
// Load the data files with no spam
//
val rddNSData = sc.wholeTextFiles("NO_SPAM_DATA_FILE_DIR",
1)
val dfNSData = rddNSData.map(d => SpamDocument(d._1,d._2, 0)).toDF()
dfNSData.show()

µÚÈý²½£ºÏÖÔÚ£¬°ÑÊý¾Ý¼¯»ã¾ÛÆðÀ´£¬È»ºó¸ù¾Ý70%ºÍ30%µÄ±ÈÀýÀ´°ÑÕû·ÝÊý¾Ý²ð·Ö³ÉѵÁ·Êý¾ÝºÍ²âÊÔÊý¾Ý¡£

//
// Aggregate both data frames
//
val dfAllData = dfSData.unionAll(dfNSData)
dfAllData.show()

//
// Split the data into 70% training data and 30% test data
//
val Array(trainingData, testData) =
dfAllData.randomSplit(Array(0.7, 0.3))

µÚËIJ½£ºÏÖÔÚ¿ÉÒÔÅäÖûúÆ÷ѧϰÊý¾ÝÁ÷Ë®ÏßÁË£¬Òª´´½¨ÎÒÃÇÔÚÎÄÕÂÇ°Ãæ²¿·ÖÌÖÂÛµ½µÄ¼¸¸ö²¿·Ö£ºTokenizer¡¢HashingTFºÍIDF¡£È»ºóÔÙÓÃѵÁ·Êý¾Ý´´½¨»Ø¹éÄ£ÐÍ£¬ÔÚÕâ¸öÀý×ÓÖÐÊÇÂß¼­»Ø¹é¡£

//
// Configure the ML data pipeline
//

//
// Create the Tokenizer step
//
val tokenizer = new Tokenizer()
.setInputCol("text")
.setOutputCol("words")

//
// Create the TF and IDF steps
//
val hashingTF = new HashingTF()
.setInputCol(tokenizer.getOutputCol)
.setOutputCol("rawFeatures")

val idf = new
IDF().setInputCol("rawFeatures").setOutputCol
("features")

//
// Create the Logistic Regression step
//
val lr = new LogisticRegression()
.setMaxIter(5)
lr.setLabelCol("label")
lr.setFeaturesCol("features")

//
// Create the pipeline
//
val pipeline = new Pipeline()
.setStages(Array(tokenizer, hashingTF, idf, lr))

val lrModel = pipeline.fit(trainingData)
println(lrModel.toString())

µÚÎå²½£º×îºó£¬ÎÒÃǵ÷ÓÃÂß¼­»Ø¹éÄ£ÐÍÖеÄת»»·½·¨À´ÓòâÊÔÊý¾Ý×öÔ¤²â¡£

//
// Make predictions.
//
val predictions = lrModel.transform(testData)

//
// Display prediction results
//
predictions.select("file", "text", "label", "features", "prediction").show(300)

½áÂÛ

Spark»úÆ÷ѧϰ¿âÊÇApache Spark¿ò¼ÜÖÐ×îÖØÒªµÄ¿âÖ®Ò»¡£ËüÓÃÓÚʵÏÖÊý¾ÝÁ÷Ë®Ïß¡£ÔÚÕâÆªÎÄÕÂÖУ¬ÎÒÃÇÁ˽âÁËÈçºÎʹÓÃSpark ML°üµÄAPIÒÔ¼°ÓÃËüÀ´ÊµÏÖÒ»¸öÎı¾·ÖÀàÓÃÀý¡£

½ÓÏÂÀ´µÄÄÚÈÝ

ͼÊý¾ÝÄ£ÐÍÊǹØÓÚÔÚÊý¾ÝÄ£ÐÍÖв»Í¬µÄʵÌåÖ®¼äµÄÁ¬½ÓºÍ¹ØÏµµÄ¡£Í¼Êý¾Ý´¦Àí¼¼Êõ×î½üÊܵ½ÁËºÜ¶à¹Ø×¢£¬ÒòΪ¿ÉÒÔÓÃËüÀ´½â¾öÐí¶àÎÊÌ⣬°üÀ¨ÆÛÕ©¼ì²âºÍ¿ª·¢ÍƼöÒýÇæµÈ¡£

Spark¿ò¼ÜÌṩÁËÒ»¸ö¿â£¬×¨ÃÅÓÃÓÚͼÊý¾Ý·ÖÎö¡£ÎÒÃÇÔÚÕâ¸öϵÁеÄÎÄÕÂÖУ¬½ÓÏÂÀ´»áÁ˽âÕâ¸öÃûΪSpark GraphXµÄ¿â¡£ÎÒÃÇ»áÓÃSpark GraphXÀ´¿ª·¢Ò»¸öʾÀý³ÌÐò£¬ÓÃÓÚͼÊý¾Ý´¦ÀíºÍ·ÖÎö¡£

   
2012 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

»ùÓÚEAµÄÊý¾Ý¿â½¨Ä£
Êý¾ÝÁ÷½¨Ä££¨EAÖ¸ÄÏ£©
¡°Êý¾Ýºþ¡±£º¸ÅÄî¡¢ÌØÕ÷¡¢¼Ü¹¹Óë°¸Àý
ÔÚÏßÉ̳ÇÊý¾Ý¿âϵͳÉè¼Æ ˼·+Ч¹û
 
Ïà¹ØÎĵµ

GreenplumÊý¾Ý¿â»ù´¡Åàѵ
MySQL5.1ÐÔÄÜÓÅ»¯·½°¸
ijµçÉÌÊý¾ÝÖÐ̨¼Ü¹¹Êµ¼ù
MySQL¸ßÀ©Õ¹¼Ü¹¹Éè¼Æ
Ïà¹Ø¿Î³Ì

Êý¾ÝÖÎÀí¡¢Êý¾Ý¼Ü¹¹¼°Êý¾Ý±ê×¼
MongoDBʵս¿Î³Ì
²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
PostgreSQLÊý¾Ý¿âʵսÅàѵ