±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚ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À´¿ª·¢Ò»¸öʾÀý³ÌÐò£¬ÓÃÓÚͼÊý¾Ý´¦ÀíºÍ·ÖÎö¡£ |