ValueError: невозможно преобразовать строку в плавающее с пандами и Amazon Sagemaker - PullRequest
0 голосов
/ 10 июня 2019

Я пытаюсь развернуть простую модель ML в SageMaker, чтобы освоить ее, и мне не везет, потому что я получаю следующую ошибку:

ValueError: could not convert string to float: '6.320000000000000097e-03 1.800000000000000000e+01 2.310000000000000053e+00 0.000000000000000000e+00 5.380000000000000338e-01 6.575000000000000178e+00 6.520000000000000284e+01 4.089999999999999858e+00 1.000000000000000000e+00 2.960000000000000000e+02 1.530000000000000071e+01 3.968999999999999773e+02 4.980000000000000426e+00 2.400000000000000000e+01'

Это первая строка моего фрейма данных.

Это код в моей записной книжке, который я сейчас использую:

from sagemaker import get_execution_role, Session
from sagemaker.sklearn.estimator import SKLearn
work_dir = 'data'
session  = Session()
role     = get_execution_role()
train_input = session.upload_data('data')
script      = 'boston_housing_prep.py'

model = SKLearn(
entry_point         = script,
train_instance_type = 'ml.c4.xlarge',
role                = role,
sagemaker_session   = session,
hyperparameters     = {'alpha': 10}
)

model.fit({'train': train_input})

Мой скрипт для boston_housing_prep.py выглядит так:

import argparse
import pandas as pd
import os

from sklearn.linear_model import Ridge
from sklearn.externals import joblib
from sklearn.preprocessing import StandardScaler
import numpy as np

if __name__ == '__main__':
    parser = argparse.ArgumentParser()

    parser.add_argument('--alpha', type=int, default=1)

    parser.add_argument('--output-data-dir', type=str, default=os.environ['SM_OUTPUT_DATA_DIR'])
    parser.add_argument('--model-dir', type=str, default=os.environ['SM_MODEL_DIR'])
    parser.add_argument('--train', type=str, default=os.environ['SM_CHANNEL_TRAIN'])

    args = parser.parse_args()
    input_files = [ os.path.join(args.train, file) for file in os.listdir(args.train) ]
    if len(input_files) == 0:
        raise ValueError(('There are no files in {}.\n' +
                      'This usually indicates that the channel ({}) was incorrectly specified,\n' +
                      'the data specification in S3 was incorrectly specified or the role specified\n' +
                      'does not have permission to access the data.').format(args.train, "train"))
    raw_data = [ pd.read_csv(file, header=None, engine="python") for file in input_files ]
    df       = pd.concat(raw_data)

    y_train = df.iloc[:, -1]
    X_train = df.iloc[:, :5]

    scaler  = StandardScaler()
    X_train = scaler.fit_transform(X_train)

    alpha = args.alpha

    clf = Ridge(alpha=alpha)
    clf = clf.fit(X_train, y_train)

    joblib.dump(clf, os.path.join(args.model_dir, "model.joblib"))

def model_fn(model_dir):
    clf = joblib.load(os.path.join(model_dir, "model.joblib"))
    return clf

Вот строка, которая ставит проблему:

X_train = scaler.fit_transform(X_train)

Я попытался df = df.astype(np.float) после загрузки в df, но это тоже не сработало.

Этот файл загружается без проблем, когда я не в SageMaker.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...