Ошибка «ValueError: не удалось преобразовать строку в плавающее» в scikit-learn - PullRequest
0 голосов
/ 26 ноября 2018

Я запускаю следующий скрипт:

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.preprocessing import OneHotEncoder
dataset = pd.read_csv('data/50_Startups.csv')
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, 4].values
onehotencoder = OneHotEncoder(categorical_features=3, 
handle_unknown='ignore')
onehotencoder.fit(X)

Заголовок данных выглядит так: data

И у меня есть это:

ValueError: не удалось преобразовать строку в число с плавающей точкой: 'New York'

Я прочитал ответы на похожих вопросов, а затем открыл scikit-learn документации, но, как вы можете видеть, у авторов scikit-learn нет проблем с пробелами в строках

Я знаю, что могу использовать LabelEncocder из sklearn.preprocessing, а затем использовать OHE, и это работает хорошо,но в этом случае

In case you used a LabelEncoder before this OneHotEncoder to convert the categories to integers, then you can now use the OneHotEncoder directly.
warnings.warn(msg, FutureWarning)

происходит массаж.

Вы можете использовать полный CSV-файл или

[[165349.2, 136897.8, 471784.1, 'New York', 192261.83],
[162597.7, 151377.59, 443898.53, 'California', 191792.06],
[153441.51, 101145.55, 407934.54, 'Florida', 191050.39],
[144372.41, 118671.85, 383199.62, 'New York', 182901.99],
[142107.34, 91391.77, 366168.42, 'Florida', 166187.94]]

5 первых строк, чтобы проверить этокод.

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Попробуйте это:

from sklearn.compose import ColumnTransformer, make_column_transformer
from sklearn.preprocessing import OneHotEncoder

columntransformer = make_column_transformer(
(OneHotEncoder(categories='auto'), [3]),
    remainder='passthrough')


X = columntransformer.fit_transform(X)
X = X.astype(float)
0 голосов
/ 26 ноября 2018

Это categorical_features=3, что причиняет тебе боль.Вы не можете использовать categorical_features со строковыми данными.Уберите эту опцию, и удача будет с вами.Кроме того, вам, вероятно, нужно fit_transform, а не fit как таковое.

onehotencoder = OneHotEncoder(handle_unknown='ignore')
transformed = onehotencoder.fit_transform(X[:, [3]]).toarray()
X1 = np.concatenate([X[:, :2], transformed, X[:, 4:]], axis=1)
#array([[165349.2, 136897.8, 0.0, '0.0, 1.0, 192261.83],
#       [162597.7, 151377.59, 1.0, 0.0, 0.0, 191792.06],
#       [153441.51, 101145.55, 0.0, 1.0, 0.0, 191050.39],
#       [144372.41, 118671.85, 0.0, 0.0, 1.0, 182901.99],
#       [142107.34, 91391.77, 0.0, 1.0, 0.0, 166187.94']])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...