我试图在pandas数据帧中使用tpot和输入。我一直收到错误:
TypeError:ufunc' isnan'不支持输入类型,并且根据投射规则无法安全地将输入强制转换为任何支持的类型'''
我认为这个错误来自于isnan无法处理我的数据结构,但我不确定如何以不同方式对其进行格式化。我有分类和连续输入和连续输出的组合。以下是具有类似数据的代码示例:
train_x=[[1,2,3],['test1','test2','test3'],[56.2,4.5,3.4]]
train_y=[[3,6,7]]
from tpot import TPOTRegressor
tpot=TPOTRegressor()
我是否必须以某种方式转换我的分类数据? dataframe.values和dataframe.as_matrix给我的对象也给我一个错误。
答案 0 :(得分:3)
这是对的 - 您需要转换您的分类值。 TPOT假设所有数据都将采用scikit-learn兼容格式,这意味着所有数据都是数字的。我们最近才添加了对缺失值的支持,但大多数scikit-learn算法都不接受缺少值的数据。
我重复了下面的示例,以展示如何使用pandas将分类值转换为数值。
import pandas as pd
from tpot import TPOTRegressor
train_x = pd.DataFrame()
train_x['a'] = [1,2,3,4]
train_x['b'] = ['test1','test2','test3','test4']
train_x['c'] = [56.2,4.5,3.4,6.7]
# This line one-hot encodes the categorical variables
train_x = pd.get_dummies(train_x).values
# Print train_x out to understand what one-hot encoding entails
print(train_x)
train_y = [3,6,7,9]
my_tpot = TPOTRegressor(cv=2)
my_tpot.fit(train_x, train_y)