基于K-均值的app列表聚类分析

目录

一、工程实现

1. 提取稀疏向量

2. K-均值聚类

3. 踩过的坑

二、评估


在个性化推荐中,新用户冷启动问题一直是难题。一般做法是tagCtr、地域、时间轴等(用户画像单一维度)推荐,效果也挺不错的。其实,除了以上比较明显维度考量,用户app列表也隐藏着用户丰富个性化特征。不同用户群体对app偏爱也不尽相同,例如游戏宅可能更多选择各种类型游戏app,漫画控喜欢二次元和动漫app,购物迷倾向电商购物。本文通过用户加载app列表,进一步挖掘用户群体标签,从而为冷启动提供更加丰富的基础特征。

K-均值聚类属于无监督学习聚类,采用距离作为相似性指标,通过迭代优化使得类内之间的数据最为相似,各类之间的数据相似度差别尽可能大。可以解决上述用户聚类问题。

一、工程实现

很多框架(sklearn、mllib、tf等)都有自带的K-均值聚类算法,如何选择合适的?

考虑到处理样本的数据量(7天,30多G),这里选择spark ml自带的K-均值算法。

1. 提取稀疏向量

app列表是由文本构成的字符串数组,参考NLP处理文档分词、提取词频向量将其转化为稀疏向量做法,这里采用ml提供的文档计数API CountVectorizer,如下

val cvm = new CountVectorizer().setInputCol("app_list").setOutputCol("app_list_cv").setMinDF(1)

 setMinDF设置最小出现次数,这里选择1,保证出现app名称都能够被处理。

2. K-均值聚类

kmeans的计算方法如下:

  • 随机选取K个中心点
  • 遍历所有数据,将每个数据划分到最近的中心点中
  • 计算每个聚类的平均值,并作为新的中心点
  • 重复2-3,直到这K个中线点不再变化(收敛了),或执行了足够多的迭代

 K-均值算法比较依赖K类中心确定,为了选择比较合适的K,在一定区间[minSeq,maxSeq]迭代寻优,通过手肘法确定最佳K。

ks.foreach(cluster => {
      val kmeans = new KMeans()
        .setK(cluster)
        .setMaxIter(maxIter)
        .setFeaturesCol("app_list_cv")
        .setPredictionCol("prediction")
      val kmm = kmeans.fit(result)
      val ssd = kmm.computeCost(result)
      map.put(cluster, ssd)
      if(minSsd > 0){
        minSsd = if(minSsd > ssd) {
          kmm.write.overwrite().save("hdfs://lee:8020/ljz/cluster")
          ssd
        } else minSsd
      }else{
        minSsd = ssd
      }

3. 踩过的坑

K-均值迭代寻优过程中,会重复加载处理的rdd(上文中reuslt),这里宜采用result.cache(),会极大提高运算速度。

在模型训练好后,保存CountVectorizer模型和最优K所在模型,在线预测直接加载即可,如下

val cvm = CountVectorizerModel.load("hdfs://lee:8020/user/ljz/countVector")
val result = cvm.transform(df)

val kmm = KMeansModel
     .load("hdfs://lee:8020/user/ljz/cluster")
     .setFeaturesCol("app_list_cv")
     .setPredictionCol("prediction")

val kc = kmm.transform(result).select("uid","prediction")

二、评估

一般会看下,聚类结果是否存在一定的主观关联,如下:

cluster1131
uid010203040506
app_list备份与恢复;TelemetryJService;OPPO日志转储器;SampleExtAuthService;Perfdump;ofo共享单车;号码归属地;OppoPowerMonitor;无线设置;GPS;FreeFallingMonitor;com.qti.service.colorservice;爱奇艺;WifiRxSensTest;MBN 测试;com.qualcomm.shutdownlistner;com.quicinc.cne.CNEService.CNEServiceApp;美团;游戏加速;优酷;com.qualcomm.qti.smcinvokepkgmgr;SmartcardService;便签;com.nearme.sync.App;双卡与移动网络;搜狗输入法OPPO版;SVI Settings;HealthAuthService;语音设置;超级淘;天气服务;随手记;SampleAuthenticatorService;下载管理;美图秀秀;联系人黑名单备份与恢复;TelemetryJService;OPPO日志转储器;SampleExtAuthService;Perfdump;号码归属地;OppoPowerMonitor;无线设置;GPS;百度新闻;FreeFallingMonitor;com.qti.service.colorservice;爱奇艺;WifiRxSensTest;MBN 测试;com.qualcomm.shutdownlistner;com.quicinc.cne.CNEService.CNEServiceApp;美团;语爱交友;游戏加速;优酷;com.qualcomm.qti.smcinvokepkgmgr;SmartcardService;便签;com.nearme.sync.App;双卡与移动网络;搜狗输入法OPPO版;SVI Settings;HealthAuthService;语音设置;天气服务;SampleAuthenticatorService;下载管理;美图秀秀;备份与恢复;TelemetryJService;OPPO日志转储器;SampleExtAuthService;Perfdump;CTAutoRegist;号码归属地;OppoPowerMonitor;无线设置;GPS;FreeFallingMonitor;com.qti.service.colorservice;爱奇艺;com.oppo.helper;WifiRxSensTest;MBN 测试;com.qualcomm.shutdownlistner;com.quicinc.cne.CNEService.CNEServiceApp;美团;优酷;com.qualcomm.qti.smcinvokepkgmgr;SmartcardService;便签;com.nearme.sync.App;双卡与移动网络;搜狗输入法OPPO版;SVI Settings;HealthAuthService;语音设置;天气服务;SampleAuthenticatorService;下载管理;美图秀秀;相机;玩机技巧;计步器;华为桌面;EuiReceive;智能线控;UEInfoCheck;运动健康;文件管理;com.huawei.iaware;通过蓝牙导入;纪念碑谷2;主题;HwChrService;华为服务框架;爱奇艺;FwkPlugin;高铁管家12306火车票;Nearby2.0;悬浮按钮;美团;优酷;学习通;情景智能;手势服务;SmartcardService;华为应用市场;相机;华为桌面;EuiReceive;智能线控;UEInfoCheck;文件管理;com.huawei.iaware;通过蓝牙导入;主题;HwChrService;华为服务框架;爱奇艺;搜狗输入法;悬浮按钮;美团;情景智能;手势服务;SmartcardService;华为应用市场;手机营业厅;学生模式;Huawei Secure IME;收音机;静心池;RegService;讯飞语音引擎;华为钱包;天气;华为 Swype 输入法;位置共享;com.huawei.cryptosms.service;查找我的手机;招商银行;华为会员服务;屏幕录制;视频编辑;com.huawei.securitymgr;iConnect;AutoRegSms;视频•优酷版;com.hisi.mapcon;androidhwext;微信;百度输入法华为版;com.huawei.logupload;Android 系统;应用宝;imonitor;华为移动服务;中国工商银行;Huawei Share;HwIndexSearchObserverService;智能解锁;支付保护中心;HwIndexSearchService;Huawei Share;FIDO UAF ASM;华为生活服务;樊登读书会;相机;ofo共享单车;华为桌面;EuiReceive;智能线控;UEInfoCheck;运动健康;文件管理;com.huawei.iaware;通过蓝牙导入;主题;HwChrService;华为服务框架;中国国航;悬浮按钮;优酷;情景智能;工银现金快线;手势服务;SmartcardService;华为应用市场;QQ音乐;学生模式;Huawei Secure IME;搜狗阅读;驾驶模式;讯飞语音引擎;华为钱包;天气;大众点评;华为 Swype 输入法;Tedesco;美图秀秀;位置共享;com.huawei.cryptosms.service;赛导游;查找我的手机;华为连接服务;

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值