动手学深度学习Kaggle实战:预测房价 - 常见报错 TypeError: can‘t convert np.ndarray of type numpy.object_.

目录

1. 具体报错

2. GPT-4的回答

3. 实测结果


1. 具体报错

代码块:

n_train = train_data.shape[0]
train_features = torch.tensor(all_features[:n_train].values, dtype=torch.float32)
test_features = torch.tensor(all_features[n_train:].values, dtype=torch.float32)
train_labels = torch.tensor(
    train_data.SalePrice.values.reshape(-1, 1), dtype=torch.float32)

报错:

TypeError                                 Traceback (most recent call last)
Cell In[20], line 2
      1 n_train = train_data.shape[0]
----> 2 train_features = torch.tensor(all_features[:n_train].values, dtype=torch.float32)
      3 test_features = torch.tensor(all_features[n_train:].values, dtype=torch.float32)
      4 train_labels = torch.tensor(
      5     train_data.SalePrice.values.reshape(-1, 1), dtype=torch.float32)

TypeError: can't convert np.ndarray of type numpy.object_. The only supported types are: float64, float32, float16, complex64, complex128, int64, int32, int16, int8, uint64, uint32, uint16, uint8, and bool.

2. GPT-4的回答

这个错误表明在尝试将一个NumPy数组转换为PyTorch张量时遇到了问题。具体来说,`numpy.ndarray`的类型是`numpy.object_`,而PyTorch的`torch.tensor`函数不支持直接从这种类型的数组创建张量。`numpy.object_`类型的数组通常出现在数组中包含不同数据类型的元素时,这可能是因为数据集中有缺失值或者混合了数值型与非数值型数据。

解决这个问题的方法通常包括确保在转换之前,数组中的所有元素都是PyTorch支持的数据类型。对于这个特定的错误,你可能需要确保`all_features`在填充缺失值(`fillna`)并进行任何必要的类型转换后,不包含任何非数值类型的数据。

这里有几个可能的解决步骤:

  1. 确保数据类型一致:在将数据转换为PyTorch张量之前,确保`all_features`中的所有数据都是数值型数据。
  2. 填充缺失值:你已经尝试了用平均值填充缺失值,这是一个好的开始。确保这一步骤在数据类型转换之前完成。
  3. 转换数据类型:在创建PyTorch张量之前,强制将`all_features`转换为一个支持的数值类型,比如`float32`。

这里是一个更新后的代码示例,其中包括了对数据类型的显式转换:

# 假设 all_features 已经正确地填充了缺失值
# 强制转换为 float32 类型
all_features = all_features.astype(float)

n_train = train_data.shape[0]
# 现在转换为PyTorch张量不应该有问题
train_features = torch.tensor(all_features[:n_train].values, dtype=torch.float32)
test_features = torch.tensor(all_features[n_train:].values, dtype=torch.float32)
train_labels = torch.tensor(
    train_data.SalePrice.values.reshape(-1, 1), dtype=torch.float32)

如果`all_features`中有列不适合转换为浮点数(例如,文本或分类数据),你可能需要进一步处理这些列,比如通过独热编码(one-hot encoding)或移除它们,以确保所有数据都是数值型的。

3. 实测结果

在代码块的开头加上↓

all_features = all_features.astype(float)

问题成功解决

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值