Python - работает в x_test y_test fit ошибки - PullRequest
0 голосов
/ 24 августа 2018

Я построил нейронную сеть, и она отлично работала с небольшим набором данных из 300 000 строк с 2 категориальными переменными и 1 независимой переменной, но столкнулся с ошибками памяти, когда я увеличил ее до 6,5 миллионов строк.Поэтому я решил изменить код и становлюсь ближе, но теперь я столкнулся с проблемой с ошибками соответствия.У меня есть 2 категориальные переменные и один столбец для зависимой переменной 1 и 0 (подозрительно или не подозрительно. Для начала набор данных выглядит следующим образом:

DBF2
   ParentProcess                   ChildProcess               Suspicious
0  C:\Program Files (x86)\Wireless AutoSwitch\wrl...    ...            0
1  C:\Program Files (x86)\Wireless AutoSwitch\wrl...    ...            0
2  C:\Windows\System32\svchost.exe                      ...            1
3  C:\Program Files (x86)\Wireless AutoSwitch\wrl...    ...            0
4  C:\Program Files (x86)\Wireless AutoSwitch\wrl...    ...            0
5  C:\Program Files (x86)\Wireless AutoSwitch\wrl...    ...            0

Мой код следовал / с ошибками:

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

X = DBF2.iloc[:, 0:2].values
y = DBF2.iloc[:, 2].values#.ravel()

from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder_X_1 = LabelEncoder()
X[:, 0] = labelencoder_X_1.fit_transform(X[:, 0])
labelencoder_X_2 = LabelEncoder()
X[:, 1] = labelencoder_X_2.fit_transform(X[:, 1])

onehotencoder = OneHotEncoder(categorical_features = [0,1])
X = onehotencoder.fit_transform(X)

index_to_drop = [0, 2039]
to_keep = list(set(xrange(X.shape[1]))-set(index_to_drop))
X = X[:,to_keep]

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0)
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)

#ERROR
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/sklearn/base.py", line 517, in fit_transform
    return self.fit(X, **fit_params).transform(X)
  File "/usr/local/lib/python2.7/dist-packages/sklearn/preprocessing/data.py", line 590, in fit
    return self.partial_fit(X, y)
  File "/usr/local/lib/python2.7/dist-packages/sklearn/preprocessing/data.py", line 621, in partial_fit
    "Cannot center sparse matrices: pass `with_mean=False` "
ValueError: Cannot center sparse matrices: pass `with_mean=False` instead. See docstring for motivation and alternatives.

X_test = sc.transform(X_test)

#ERROR
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/sklearn/preprocessing/data.py", line 677, in transform
    check_is_fitted(self, 'scale_')
  File "/usr/local/lib/python2.7/dist-packages/sklearn/utils/validation.py", line 768, in check_is_fitted
    raise NotFittedError(msg % {'name': type(estimator).__name__})
sklearn.exceptions.NotFittedError: This StandardScaler instance is not fitted yet. Call 'fit' with appropriate arguments before using this method.

Если это поможет, я напечатал X_train и y_train:

X_train
<5621203x7043 sparse matrix of type '<type 'numpy.float64'>'
with 11242334 stored elements in Compressed Sparse Row format>

y_train
array([0, 0, 0, ..., 0, 0, 0])

1 Ответ

0 голосов
/ 24 августа 2018

X_train - это разреженная матрица, которая отлично подходит для случаев, когда вы используете большой набор данных, как в вашем случае. Проблема в том, что документация объясняет:

with_mean: логическое значение, по умолчанию True

Если True, отцентрируйте данные перед масштабированием. Это не работает (и будет поднять исключение) при попытке на разреженных матрицах, потому что центрирование их влечет за собой создание плотной матрицы, которая обычно используется случаи могут быть слишком большими, чтобы поместиться в память.

Вы можете попробовать передать with_mean=False:

sc = StandardScaler(with_mean=False)
X_train = sc.fit_transform(X_train)

Следующая строка завершается сбоем, потому что sc все еще остается нетронутым StandardScaler объектом.

X_test = sc.transform(X_test)

Чтобы иметь возможность использовать метод преобразования, вы должны сначала указать StandardScaler для набора данных. Если вы намеревались поместить StandardScaler в свой тренировочный набор и использовать его для преобразования тренировочного набора и тестового набора в одно и то же пространство, то вы можете сделать это следующим образом:

sc = StandardScaler(with_mean=False)
X_train_sc = sc.fit(X_train)
X_train = X_train_sc.transform(X_train)
X_test = X_train_sc.transform(X_test)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...