python - 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)
解决方案
在这种情况下,我认为这只是输入和输出中混合数据类型的结果。例如,如果您检查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)
.
推荐阅读
- python - 如何在python中将月度数据表格式化为时间序列
- python - 严格正浮点数作为其参数,标准化
- c++ - 在 main.cpp 中使用模板关键字时出现“带有 C 链接的模板”错误
- templates - UWP - 具有两个不同来源的 NavigationView
- pine-script - 即使再次满足相同的条件,也保持一个值
- python - 为什么pygame绘图仅在窗口被拖出屏幕后才出现?
- python - Python3 – 在 f 字符串中用 \n 分隔的打印列表
- javascript - 如何以一种形式验证 3 个 div 代码?
- javascript - 无法读取未定义 Angular 6 的属性“替换”
- git - 如何删除文件夹中标记为未添加到git的所有文件?(很多被删除的文件在切换分支后又出现了)