首页 > 解决方案 > sklearn OneHotEncoder 输出非数组对象错误

问题描述

我正在通过 Udemy 上的 Python 机器学习课程学习以下数据集(仅显示前几行)

   R&D Spend  Administration  Marketing Spend       State  Profit
0     165349          136898           471784    New York  192262
1     162598          151378           443899  California  191792
2     153442          101146           407935     Florida  191050
3     144372          118672           383200    New York  182902

该课程是在 2016 年制作的,因此一些模块已经更新,我在我的代码中进行了更改(例如:使用 ColumnTransformer make_column_transformer)。这段代码的输出应该是一个浮点数组(它在 Udemy 教程中)但是,由于某种原因,在代码更新之后,我的变量x被认为是在对其ndarray object进行处理之后。我不知道为什么,因为当我打印变量时x,它会打印出一个浮点数组。

原始数据文件可以在文件中的这个链接(一个 zip 文件夹)中找到50_startups.csv

我尝试添加.toarray(),但这破坏了代码。

谢谢

import pandas as pd 
import matplotlib.pyplot as plt 
import numpy as np 

dataset = pd.read_csv("Startups (multiple linear regression).csv")
x=dataset.iloc[:,:-1].values
y=dataset.iloc[:,-1]


#Encode categorical variables (New York, California, Florida)
from sklearn.compose import ColumnTransformer, make_column_transformer
from sklearn.preprocessing import OneHotEncoder
preprocess = make_column_transformer((OneHotEncoder(),[-1]),remainder="passthrough")
x = preprocess.fit_transform(x)

在此处输入图像描述

标签: pythonnumpymachine-learningscikit-learn

解决方案


在这种情况下,我认为这只是输入和输出中混合数据类型的结果。例如,如果您检查x

x
array([[165349, 136898, 471784, 'New York'],
       [162598, 151378, 443899, 'California'],
       [153442, 101146, 407935, 'Florida'],
       [144372, 118672, 383200, 'New York']], dtype=object)

你会看到它有dtype=object. 这是因为数组中混合了整数和字符串。因此,直通数组(R&D Spend、Administration 和 Marketing Spend)保持不变dtype。然后在fit_transform此数组中与您的OneHotEncoder转换结果堆叠以产生结果。这样,输出dtype与您提供的输入相同。

如果你想改变dtype你总是可以使用.astype(float).


推荐阅读