带有 tpot 的分类数据

Deb*_*aul 4 python tpot

我正在尝试将 tpot 与我在 Pandas 数据帧中的输入一起使用。我不断收到错误:

类型错误:输入类型不支持 ufunc 'isnan',并且无法根据转换规则 ''safe'' 将输入安全地强制转换为任何受支持的类型

我相信这个错误是因为 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()
Run Code Online (Sandbox Code Playgroud)

我是否必须以某种方式转换我的分类数据?dataframe.values 和 dataframe.as_matrix 给我的对象也给我一个错误。

Ran*_*son 5

没错 - 您需要转换分类值。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)
Run Code Online (Sandbox Code Playgroud)