当前位置: 首页 > 知识库问答 >
问题:

如何处理33000多个城市的分类变量?

鲁淇
2023-03-14

我在Python工作。我对分类变量“城市”有一个问题。

我正在一个超过一百万行的大数据集上建立一个预测模型。我有100多种功能。其中之一是“城市”,由33000个不同的城市组成。

我使用例如XGBoost,其中我需要将分类变量转换为数字。Dummifying会导致功能的数量大幅增加。XGBoost(和我的20 gb RAM)无法处理此问题。

有没有其他方法来处理这个变量,除了例如。一个热编码,假人等。?(当使用一个热编码时,例如,我有性能问题,我的模型中有太多的功能,我正在运行内存溢出。)

有什么办法解决这个问题吗?

共有3个答案

苏洛城
2023-03-14

除了模型之外,还可以通过按地理区域对要素(城市)进行分组来减少要素的数量。另一种选择是按人口规模对它们进行分组。

另一种选择是使用分位数箱按频率对它们进行分组。目标编码可能是您的另一个选择。

在许多情况下,特征工程涉及大量的手工工作,不幸的是,您不能总是自动地将所有内容分类

何兴安
2023-03-14

自1.3.0版以来,XGBoost还增加了对分类编码的实验支持。

从另一个问题复制我的答案。

2020年11月23日

XGBoost从1.3版起就开始使用。0添加了对分类功能的实验支持。从文档中:

1.8.7类别数据

除了执行编码的html" target="_blank">用户之外,XGBoost还使用gpu_hist和gpu_predictor对分类数据提供实验支持。无需对输入测试数据进行特殊操作,因为在训练期间,类别信息被编码到模型中。

https://buildmedia.readthedocs.org/media/pdf/xgboost/latest/xgboost.pdf

在DMatrix部分中,文档还说:

enable_categorical(布尔值,可选)-1.3.0版中新增。

对分类特征进行专门化的实验支持。除非您对开发感兴趣,否则不要设置为True。目前,它仅适用于gpu_hist tree方法,1与rest(一个热)分类拆分。此外,还需要JSON序列化格式、gpu_预测器和pandas输入。

其他型号选项:

如果您不需要使用XGBoost,您可以使用像LightGBM或CatBoost这样的模型,它支持分类编码,而无需开箱即用的一次性编码。

梁楷
2023-03-14

您可以使用某种更好地反映这些城市的嵌入(并通过直接OHE压缩总特征的数量),可能使用一些特征来描述每个城市所属的地区,然后使用一些其他特征来描述国家/地区,等等。

请注意,由于您没有提供有关此任务的任何具体细节,因此我在示例中仅使用了地理数据,但您可以使用与每个城市相关的其他变量,如平均温度、人口、面积等,具体取决于您在此处尝试解决的任务。

另一种方法是用城市的坐标(经纬度)替换城市名称。同样,根据模型的任务,这可能是有帮助的。

希望这有帮助

 类似资料:
  • 但我得到了NullPointerException任何人都可以帮忙

  • 我的城市是一款增量点击游戏。你需要点击收获原始资源,然后注意: 要用现金购买东西 研究需要脑力 运行事物需要能量 矿石可提供基础材料 水可作为消耗品 犯罪会让你付出代价...(尚未实施) 污染会使你生病    

  • 我有一个关于Catboost的问题。在建模之前,我是否要预处理分类? 如果我有86个变量,包括1个目标变量。在这85个变量中,有2个数字变量和83个分类变量(type)。目标变量是二进制因子,1或0。 第1列和第4列至第85列为系数类型 第2列和第3列是数字。 我对

  • 定义 选择城市的组件。 图片展示 代码演示 import City from 'pile/dist/components/city' <City show={false} // cityArr={cityArr} // 城市数组 // position= {cityArr[0]} //定位城市 // 城市对象的默认属性为 // city_id、city_name、firs

  • 我使用的是OpenGL,但我并不完全满意将每个三角形(或在我的例子中为四边形)的值传递给片段着色器的标准方法,即将它们分配给基本体的每个顶点,并将它们传递给顶点着色器,以推测不必要的插值(除非使用“flat”指令)在片段着色器中(也就是说,每个片段不变化)。 是否有某种方法可以存储每个三角形(或四边形)的值,这些三角形(或四边形)需要在片段着色器中访问,这样就不需要每个顶点的冗余副本?那么,这种方

  • 我有一个person对象,它有一个名称和一个地址列表作为参数。地址有一个街道,类型,城市,和个人我想获得一个按城市分组的地图。我卡住了