Вот набор данных, который я использую:
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 = 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)
y
, возвращаемыйmap(numerial, y)
, не является массивом