【问题标题】:All independent variables are categorical and dependent(target) variable is continuous所有自变量都是分类的,因(目标)变量是连续的
【发布时间】:2020-10-21 19:53:08
【问题描述】:

这是我建立模型所需的数据:

dataframe

  • 数据框包含 834 行和 4 列('Size','Sector','Road Connectivity','Price')

  • AIM 是训练模型以预测价格

  • “大小”、“扇区”和“道路连通性”是分配给 X 变量的 3 个特征。

  • “价格”,即我们的目标特征分配给 y 变量

  • 我已经制作了一个由一个热编码器和线性回归器组成的管道 下面是代码:

ohc=OneHotEncoder(categories = "auto")
lr=LinearRegression(fit_intercept=True,normalize=True)
pipe=make_pipeline(ohc,lr)
from sklearn.model_selection import ShuffleSplit
from sklearn.model_selection import cross_val_score
kfolds=ShuffleSplit(n_splits=5,test_size=0.2,random_state=0)
cross_val_score(pipe,X,y,cv=kfolds).mean()

输出 =0.8970496076598085

xinp=([['04M','Sec 10','C road']])
pipe.fit(X,y)
pipe.predict(xinp)

现在,当我将值传递给管道以进行预测时,它会显示错误:

"""在转换过程中在第 1 列中发现未知类别 ['Sec 10']"""

感谢任何有助于构建模型的建议...

【问题讨论】:

标签: python machine-learning regression data-science categorical-data


【解决方案1】:

看起来您提供了类别(在xinp 中,Sec 10 值),它不存在于训练数据中,因此它不能是一个热编码,因为没有虚拟变量(没有相应的二进制列) 为了它。一种可能的解决方案如下:

ohc=OneHotEncoder(categories = "auto", handle_unknown = "ignore")

来自 scikit 一热编码器documentation

handle_unknown{'error', 'ignore'}, default='error'

如果在转换期间存在未知的分类特征,是否引发错误或忽略(默认为引发)。当这 参数设置为“忽略”,遇到未知类别 在转换期间,为此生成的 one-hot 编码列 特征将全为零。在逆变换中,未知 类别将被表示为无。

【讨论】:

  • 已经试过了,它只是忽略错误然后预测错误的值,即使将类别更改为另一个,它仍然预测错误的值或引发错误。我认为该模型无法适应“部门”功能
  • 它无法正确预测值,只是因为模型背后的逻辑:它在训练期间从未见过类别“Sec 10”,所以它无法说出任何关于它的信息,它是与价格的关系。您需要一些数据集样本,其中“Sector”变量为“Sec 10”,以便模型能够了解它与价格之间的某种关系。
  • 即使我改变了类别,结果是一样的,即使我取训练数据值,结果也是一样的,即要么显示错误,如果错误被设置为忽略,预测值要小得多或大于实际值。你想让我理解什么,我已经尝试过了,我认为问题出在编码器或回归器上,或者训练数据不够大,无法在其上建立模型。我只是不知道问题出在哪里是!!!!!!
  • 从数据框的屏幕截图中,无法得知数据集中的行数(只能看到前 5 行)。您能否提供完整的数据集(不仅仅是屏幕截图),以便可以重现该问题?
  • 数据是客户的,我不能在公共平台上分享,但我可以私信给你看。请在评论中留下您的联系方式。谢谢
猜你喜欢
  • 2021-05-06
  • 1970-01-01
  • 2020-10-24
  • 2020-10-26
  • 2014-01-23
  • 2020-10-10
  • 2023-03-04
  • 2019-08-24
  • 2020-09-23
相关资源
最近更新 更多