Обучить и протестировать набор данных

Вот набор данных, который я использую:

from sklearn.model_selection import train_test_split
from sklearn.datasets import load_boston
import warnings
    
with warnings.catch_warnings():
warnings.filterwarnings("ignore")
data = load_boston()
X = data.data
y = data.target

Сначала я преобразовал целевые данные в набор данных классификации в соответствии с подсказкой:

Шаг 1: Разделите диапазон целевых значений на три равные части — низкую, среднюю и высокую.

y = list(y)
for i in range(len(y)):
    index = y.index(min(y))
    if i < len(y)/3:
        y[index] = 100
    elif i > len(y)/3 and i < 2*(len(y)/3):
        y[index] = 200
    else:
        y[index] = 300

Шаг 2: Переназначьте целевые значения трем категориальным значениям 0, 1 и 2, представляющим нижний, средний и высокий диапазоны значений соответственно.

def numerial(y):
    if y == 100:
        return 0
    elif y == 200:
        return 1
    else:
        return 2

y = map(numerial, y)

Шаг 3: Разделите набор данных на 70% обучающий набор и 30% тестовый набор.

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 99)

Итак, когда я запускаю шаг 3, я постоянно получаю сообщение об ошибке:

TypeError: Singleton array array(<map object at 0x7fac066a57c0>, dtype=object) cannot be considered a valid collection.

Интересно, какой из шагов я сделал неправильно, чтобы продолжать получать сообщение об ошибке. Есть идеи?

y, возвращаемый map(numerial, y), не является массивом

ForceBru 18.03.2022 20:36
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
35
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете решить эту проблему с помощью следующей модификации:

y = list(map(numerial, y))

Но вы можете упростить свой код, используя функцию cut из pandas.

y = pd.cut(y, [0, len(y)/3, 2*len(y)/3, len(y)], labels=[0, 1, 2])

Или еще проще:

pd.cut(y, bins=3, labels=False)

Другие вопросы по теме