首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么fit_transform一直抛出错误?

为什么fit_transform一直抛出错误?
EN

Stack Overflow用户
提问于 2020-07-24 22:09:39
回答 1查看 49关注 0票数 0

我一直在努力理解为什么fit_transform总是抛出错误。调试没有多大帮助,因为它只是将我带到数组的定义,并且我不确定我错过了什么。有什么想法吗?

代码语言:javascript
复制
import numpy as np
from sklearn.preprocessing import MinMaxScaler
import pickle

def split_data(inputs, outputs, p_train=0.9, p_test=0.1):
    train_size = int(len(inputs) * p_train)
    test_size = int(len(inputs) * p_test)
    inputs_train, inputs_test = inputs[0:train_size, :], inputs[train_size:, :]
    outputs_train, outputs_test = outputs[0:train_size, :], outputs[train_size:, :]
    return inputs_train, inputs_test, outputs_train, outputs_test

rawinputs = pickle.load(open('rawinputs.pck', 'rb'))  
rawoutputs = pickle.load(open('rawoutputs.pck', 'rb'))  

#split
inputs_train, inputs_test, outputs_train, outputs_test = split_data(rawinputs, rawoutputs, p_train=0.90, p_test=0.10)

#normalize
scaler_inputs = MinMaxScaler()
inputs_train_scaled = scaler_inputs.fit_transform(inputs_train)
inputs_test_scaled = scaler_inputs.transform(inputs_test)
outputs_train = np.asmatrix(outputs_train)

在使用fit_transform的第一行抛出错误get:

代码语言:javascript
复制
inputs_train_scaled = scaler_inputs.fit_transform(inputs_train)

例如:一行rawinput数据的:

代码语言:javascript
复制
['28,7170876207375' '339,050018316624' '0,173448071160097' '158,211319524893']

抛出错误:

代码语言:javascript
复制
File "C:\****\venv\lib\site-packages\sklearn\base.py", line 690, in fit_transform return self.fit(X, **fit_params).transform(X)
EN

回答 1

Stack Overflow用户

发布于 2020-07-25 06:34:04

关键是inputs_train变量必须是二维数组。

下面是一个简单的例子:

代码语言:javascript
复制
from sklearn.datasets import fetch_olivetti_faces

我们将对人脸数据集应用MinMaxScaler

代码语言:javascript
复制
from sklearn.datasets import fetch_olivetti_faces

olivetti = fetch_olivetti_faces()

X = olivetti.images
y = olivetti.target

X是人脸图像,其中y是每个人脸的标签。

接下来,我们将把数据集分为训练集和测试集。

类似于您的split_data方法。

代码语言:javascript
复制
from sklearn.datasets import fetch_olivetti_faces
from sklearn.model_selection import train_test_split

olivetti = fetch_olivetti_faces()

X = olivetti.images
y = olivetti.target

x_train, x_test, y_train, y_test = train_test_split(X, y,
                                                    test_size=0.2,
                                                    random_state=42)

random_state变量将帮助我们在每次运行代码时生成相同的训练和测试集。

现在,如果我们查看x_train变量:

代码语言:javascript
复制
print(x_train.shape)

有320个训练图像,每个图像是64 x 64像素。我们必须重塑才能使用MinMaxScaler

代码语言:javascript
复制
x_train = x_train.reshape(x_train.shape[0], x_train.shape[1] * x_train.shape[2])

现在新的图像大小:

最终代码:

代码语言:javascript
复制
from sklearn.datasets import fetch_olivetti_faces
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler

olivetti = fetch_olivetti_faces()

X = olivetti.images
y = olivetti.target

x_train, x_test, y_train, y_test = train_test_split(X,
                                                    y,
                                                    test_size=0.2,
                                                    random_state=42)

x_train = x_train.reshape(x_train.shape[0], x_train.shape[1] * x_train.shape[2])
x_test = x_test.reshape(x_test.shape[0], x_test.shape[1] * x_test.shape[2])

min_max_obj = MinMaxScaler()

inputs_train_scaled = min_max_obj.fit_transform(X=x_train)
inputs_test_scaled = min_max_obj.transform(X=x_test)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63075311

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档