code_demo 用随机森林做缺失值预测

直接上代码

在做特征工程的时候, 其实可以用算法来处理特征工程的, 比如缺失值填充之类的. 这里一段code_demo是搬运来的, 不过是真滴好用呢.

# RandomForest - 强化, 对 new_user_class_level 进行 缺失值预测


from pyspark.mllib.regression import LabeledPoint

# 1. 过滤出 new_user_class_level 非空的df 作为 训练集

train_data2 = user_profile_df.dropna(subset=["new_user_class_level"]).rdd.map(
    lambda r:LabeledPoint(r.new_user_class_level - 1, [r.cms_segid, r.cms_group_id, r.final_gender_code, r.age_level, r.shopping_level, r.occupation])
)

# 2. 训练模型

from pyspark.mllib.tree import RandomForest

model2 = RandomForest.trainClassifier(train_data2, 4, {}, 5)

# 3. 测试 一波
model2.predict([0.0, 4.0 ,2.0 , 4.0, 1.0, 0.0])

# 预测值实际应该为2
# 4. 对缺失值进行预测
na_df = user_profile_df.na.fill(-1).where("new_user_class_level=-1")

def row(r):
    return r.cms_segid, r.cms_group_id, r.final_gender_code, r.age_level, r.shopping_level, r.occupation

# 5. rdd方式进行行处理
rdd2 = na_df.rdd.map(row)

# 6. 利用模型预测
predicts = model2.predict(rdd2)

# 7. 修正预测值(+1), 并合并 df 

tmp = predicts.map(lambda x:int(x)).collect()

pdf = pl_na_df.toPandas()

import numpy as np

pdf['new_user_class_level'] = np.array(tmp)+1

# 和预测df 和 真实 df 进行 unionAll
new_user_profile_df = user_profile_df.dropna(subset=["new_user_class_level"]).unionAll(
spark.createDataFrame(tmp, schema=schema))

# 注意: unionAll的使用(纵向合并df), 两个df的表结构必须完全一样
new_user_profile_df.show(5)

posted @   致于数据科学家的小陈  阅读(837)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示

目录导航