#python #pandas #scikit-learn #supervised-learning
#python #pandas #scikit-learn #обучение под руководством
Вопрос:
Я загружаю файл CSV в фрейм данных Pandas для проекта машинного обучения. У меня есть 16 столбцов. «Метка» или «цель» — это последний столбец. Остальное — переменные. Мне нужно определить первые 15 столбцов как объекты, а 16-й — как целевой.
Все примеры, которые я нахожу, похоже, демонстрируют машинное обучение на наборе, в котором они уже определены. Как я могу сам определить свою «цель»?
import pandas as pd
import numpy as np
import sklearn
from sklearn.model_selection import train_test_split
lymph = pd.read_csv("D:\dataset_10_lymph.csv", encoding="utf-8", header = 0)
array = lymph.values
data = array[:,0:-1]
target = array[:,-1]
X_train, X_test, y_train, y_test = train_test_split(lymph.data, lymph.target, stratify=lymph.target, random_state=66)
Но когда я пытаюсь проверить, что мой целевой массив сгенерирован правильно, я получаю обратную трассировку.
Ошибка атрибута: объект ‘DataFrame’ не имеет атрибута ‘data’
Похоже, что это был бы тривиальный шаг, который нужно было бы предпринять, если только они не используют набор данных sklearn для практики. Будем признательны за любую помощь. Спасибо.
Ответ №1:
Ну, я научился с этим работать:
target = lymph.columns[-1]
X = lymph.drop(target, axis = 1)
y = lymph.drop(X, axis = 1)
X_train, X_test, y_train, y_test = train_test_split(X, y,test_size=0.2)
Ответ №2:
Это:
lymph = pd.read_csv("D:\dataset_10_lymph.csv", encoding="utf-8", header = 0)
предоставит вам фрейм данных с именами столбцов в цифрах. Таким образом, последующие lymph.data
не найдут столбец с именем data
и не дадут вам обратную трассировку.
Вы можете назначить имена столбцов следующим образом:
lymph.columns = [....]
в списке список из 16 строк, как вы сказали, есть 16 столбцов. Затем вы должны использовать эти имена столбцов при вызове функции train_test_split()
. Однако, как вы сказали, первые 15 столбцов являются входными, а 16-я — меткой. Итак, с меткой все просто, но входные объекты — это просто фрейм данных с удаленным 16-м столбцом. Поэтому сделайте это вместо:
train_test_split(lymph.drop("target", axis=1), lymph.target, stratify=lymph.target, random_state=66)
где "target"
— это имя вашего 16-го столбца.
Комментарии:
1. Спасибо за ваш ответ @adrtam. Я не уверен, что вы предлагаете. Если я использую: print (target), он фактически печатает значения 16-го столбца. Но он не рассматривает его как объект, когда я вызываю его, когда пытаюсь разделить свой набор с помощью train_test_split. Как мне определить, что последний столбец является целевым объектом, чтобы я мог использовать все программы ML, которые работают с наборами данных с предопределенными объектами «данные» и «целевые»?
2. Итак, я избавился от «header = 0» и добавил «data = lympha.columns [0: -1], target = lympha.columns[-1]» когда я печатаю target и data, он печатает соответствующие заголовки столбцов. но когда я использую ваш train_test_split, я все равно получаю «объект ‘DataFrame’ не имеет атрибута ‘target'». Я просто чувствую, что есть 100 примеров, которые используют наборы данных sklearn, где целевые объекты и объекты данных предопределены. Кажется, что это такой очевидный вопрос, который нужно задать «Хорошо, если я загружу свой собственный файл CSV, как мне определить их, чтобы я мог использовать весь существующий там код». Я искал и пробовал много разных вещей, но безрезультатно.