目录

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)

问题成功解决

 

 

 

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐