【问题标题】:Filling in the NaN values with Regression [closed]用回归填充 NaN 值
【发布时间】:2025-12-06 11:30:01
【问题描述】:

我有 x1=工作级别(数字),x2=工作代码(分类)和 y =库存价值(数字​​)。对于 3x500 的数据集,我在 Stock Value 中有 250 个 NaN 值。

我需要在下面的代码中进行哪些更改才能将 x2 读取为分类值并重新运行程序以查找系数?Data set example

> import pandas as pd from sklearn.linear_model import LinearRegression
> df = pd.read_excel("stats.xlsx")
> df_nonull=df.dropna() X_train = df_nonull[['Job Code','Job Level']]
> y_train = df_nonull[['Stock Value']]
> 
> 
> X_test = df[['Job Code','Job Level']] y_test = df[['Stock Value']]
> 
> regressor = LinearRegression() model=regressor.fit(X_train, y_train)
> # display coefficients print(regressor.coef_)

> print(regressor.coef_)

【问题讨论】:

  • 我认为你想要的叫做“插补”。一个简单的方法就是用 Job Code 的平均 Stock Value 填充 NaN。但是,如果您相信您的数据中有一些隐藏的结构(例如,股票价值随着代码的增加而增加),这可能行不通。
  • 嗨,Demetri,感谢您的回答——因为工作代码、工作级别和股票价值之间存在相关性——我不想使用“插补”。我想估计股票价值,记住它们与这两个输入有关,而不仅仅是平均值。
  • 是的,这改变了事情。我认为线性回归是一种合适的做事方式。你有任何理由期望这种关系是线性的吗?
  • 不,我不能假设,回归是我的第一个想法。所以我愿意接受建议。
  • 了解所有可能性将是一个超出 Stack Overflow 领域的推测性教程;为此,您可以尝试Cross Validated

标签: python machine-learning statistics nan missing-data


【解决方案1】:

这是一个简单的模型训练问题。您可用的训练数据(观察)是存在股票价值的行;您以后的“真实”数据是没有的行。

在这种情况下,分类数据是非常合法的。实际上,您也可以尝试将工作级别声明为分类,因为它是离散的;这将使您摆脱任何线性假设(尽管它也否认了级别代码排序的任何适用性)。

您的任务是选择一种能够为您的数据提供适当服务的模型类型。这需要研究和实验;欢迎来到数据科学。由于您尚未讨论您的数据形状、密度、连通性、聚类等,因此我们无法与您一起探讨这些问题。对三个特征的六次观察(请注意,职位代码和职位不是 100% 耦合的)不足以进行有根据的推测。

尝试在“线性”回归中添加一些多项式项:可能是每个输入的平方项和平方根。这通常是此类任务的第一次尝试。

【讨论】:

  • 欢迎来到 *。请阅读并遵循帮助文档中的发布指南。 on topichow to ask 在这里申请。
  • 特别是,有很多这样的包,你应该在提出问题之前进行研究。此外,这些软件包涵盖不同级别的参与,并带有不同的模型类型。你可以先看一下 SciKit / SciPy,因为有广泛的使用基础。
  • 没有“哪个型号”;正如我所说,你必须进行实验。你没有给我们一个完整的问题描述让我们权衡。