当前位置:网站首页>pyspark---低频特征处理
pyspark---低频特征处理
2022-08-03 05:29:00 【WGS.】
低频的特征出现的少,本身也学不好,还不如都给default,整合来学。
拿某一个特征来说:对于低频的都给用default
代替,default
参与编码与训练,评估的时候遇到新值,也可以用default
来填充,以此解决低频特征学不好和冷启动问题。
tmpd = [{
'model': 'AVA', 'city': '苏州', 'y': 0}, {
'model': 'AVA', 'city': '苏州', 'y': 0},
{
'model': 'TNY', 'city': '青岛', 'y': 0}, {
'model': 'AVA', 'city': '青岛', 'y': 0},
{
'model': 'TNY', 'city': '青岛', 'y': 0}, {
'model': 'TNY', 'city': '青岛', 'y': 0},
{
'model': 'TNY', 'city': '青岛', 'y': 0}, {
'model': 'AVA', 'city': '上海', 'y': 0},
{
'model': 'Mi', 'city': '上海', 'y': 0}, {
'model': 'Mi', 'city': '上海', 'y': 0},
{
'model': 'Mi', 'city': '上海', 'y': 0}, {
'model': 'fla', 'city': '北京', 'y': 0}, ]
tmpd = ss.createDataFrame(tmpd)
tmpd.show()
+----+-----+---+
|city|model| y|
+----+-----+---+
|苏州| AVA| 0|
|苏州| AVA| 0|
|青岛| TNY| 0|
|青岛| AVA| 0|
|青岛| TNY| 0|
|青岛| TNY| 0|
|青岛| TNY| 0|
|上海| AVA| 0|
|上海| Mi| 0|
|上海| Mi| 0|
|上海| Mi| 0|
|北京| fla| 0|
+----+-----+---+
- demo示例:将记录数少于3 & 没有点击的特征值都给
default
def row_count2(row):
uid, y = row[0], row[1]
clicks = sum(y)
lens = len(y)
pvs = lens - clicks
return uid, pvs, clicks, lens
''' 低频处理 '''
def low_frequency(df):
low_enc_dict = {
'city': 3, 'model': 3}
for c in low_enc_dict.keys():
dfpg = df.groupby(c).agg(fn.collect_list('y').alias('y')).rdd.map(row_count2).toDF(schema=[c, 'pvs', 'clicks', 'lens'])
# print(dfpg.count())
# dfpg.orderBy(['lens', 'clicks'], ascending=[0, 0]).show(10)
# dfpg.orderBy(['lens', 'clicks'], ascending=[1, 1]).show(50)
# dfpg.filter(dfpg['lens'] <= low_enc_dict[c]).filter(dfpg['clicks'] == 0).select('lens').agg({'lens': 'sum'}).show()
lowlst = []
tlst = dfpg.filter(dfpg['lens'] <= low_enc_dict[c]).filter(dfpg['clicks'] == 0).select(c).collect()
for row in tlst:
lowlst.append(row[0])
df = df.withColumn(c, fn.udf(lambda x: 'default' if x in lowlst else x)(fn.col(c)))
# print(c, len(lowlst), df.filter(df[c] == 'default').count())
return df
tmpd = low_frequency(df=tmpd)
tmpd.show()
+-------+-------+---+
| city| model| y|
+-------+-------+---+
|default| AVA| 0|
|default| AVA| 0|
| 青岛| TNY| 0|
| 青岛| AVA| 0|
| 青岛| TNY| 0|
| 青岛| TNY| 0|
| 青岛| TNY| 0|
| 上海| AVA| 0|
| 上海|default| 0|
| 上海|default| 0|
| 上海|default| 0|
|default|default| 0|
+-------+-------+---+
边栏推荐
- MySql data format is converted to Redis key-value pair format
- MySql的安装配置超详细教程与简单的建库建表方法
- ES6中 async 函数、await表达式 的基本用法
- 【地平线 开发板】实现模型转换并在地平线开发板上部署的全过程操作记录(魔改开发包)
- WinServer2012r2破解多用户同时远程登录,并取消用户控制
- MySQL之concat的用法
- Multi-Head-Attention原理及代码实现
- C # program with administrator rights to open by default
- xshell报错-要继续使用此程序,您必须应用最新的更新或使用新版本
- Mysql去除重复数据
猜你喜欢
随机推荐
我的Go+语言初体验——祝福留言小系统,让她也可以感受到你的祝福
【应届生租房】应届生如何租房以及注意事项
MySQL 日期时间类型精确到毫秒
VS项目配置管理器
html+css+php+mysql实现注册+登录+修改密码(附完整代码)
TFS (Azure conversation) prohibit people checked out at the same time
nvm 卸载详细流程
Podman一篇就学会
MySQL的触发器
mysql的配置文件(my.ini或者 my.cnf)所在位置
sql中 exists的用法
Servlet详解含实例
【干货分享】PCB 板变形原因!不看不知道
MySQL的安装(详细教程)
WinServer2012r2破解多用户同时远程登录,并取消用户控制
Oracle Common Commands - Basic Commands
MySQL 数据库基础知识(系统化一篇入门)
【dllogger bug】AttributeError: module ‘dllogger‘ has no attribute ‘StdOutBackend‘
阿里云短信服务的使用(创建,测试笔记)
prometheus 监控mysql数据库