#python #scikit-learn #logistic-regression #sklearn-pandas #model-fitting
#python #scikit-learn #логистическая регрессия #sklearn-pandas #подгонка модели
Вопрос:
Я начинаю писать модель обучающей машины. У меня есть набор данных Y_train, содержащий метки, в которых есть 5 классов. Набор данных X_train содержит образцы. Я пытаюсь создать свою модель с помощью логистической регрессии.
X_train ((560, 20531)) и Y_train ((560, 5)) имеют одинаковые размеры.
Я видел несколько публикаций, связанных с той же проблемой, но я не смог решить проблему. Я не знаю, как исправить эту ошибку, не могли бы вы мне помочь, пожалуйста?
X = pd.read_csv('/Users/lottie/desktop/data.csv', header=None, skiprows=[0])
Y = pd.read_csv('/Users/lottie/desktop/labels.csv', header=None)
Y_encoded = list()
for i in Y.loc[0:,1] :
if i == 'BRCA' : Y_encoded.append(0)
if i == 'KIRC' : Y_encoded.append(1)
if i == 'COAD' : Y_encoded.append(2)
if i == 'LUAD' : Y_encoded.append(3)
if i == 'PRAD' : Y_encoded.append(4)
Y_bis = to_categorical(Y_encoded)
#separation of the data
X_train, X_test, Y_train, Y_test = train_test_split(X, Y_bis, test_size=0.30, random_state=42)
regression_log = linear_model.LogisticRegression(multi_class='multinomial', solver='newton-cg')
X_train=X_train.iloc[:,1:]
#train model
train_train = regression_log.fit(X_train, Y_train)
Комментарии:
1. Что именно у вас
X_train
именно? На первый взгляд кажется, что вы инвертируете количество выборок с количеством функций. ПопробуйтеX.shape
Y.shape
и скажите мне, что выдает консоль.2. X_train содержит для каждой строки (= выборки) содержит значения для каждого данные. Y_train: содержит для каждого образца соответствующий класс. X.форма: (801, 20532) и Y.форма (801, 2)
3. Честно говоря, X и Y должны иметь одинаковое количество строк, что является согласованным. X выглядит странно. Откуда у вас 20532 функции?
Ответ №1:
Вы получаете эту ошибку, потому что ваша метка категорична. Вам нужно использовать кодировщик меток, чтобы закодировать его в 0,1,2 .. , проверьте страницу справки из scikit-learn. Ниже будет представлена реализация с использованием примера набора данных, аналогичного вашему:
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn import linear_model
from sklearn import preprocessing
le = preprocessing.LabelEncoder()
Y = pd.DataFrame({'label':np.random.choice(['BRCA','KIRC','COAD','LUAD','PRAD'],560)})
X = pd.DataFrame(np.random.normal(0,1,(560,5)))
Y_encoded = le.fit_transform(Y['label'])
X_train, X_test, Y_train, Y_test = train_test_split(X, Y_encoded, test_size=0.30, random_state=42)
regression_log = linear_model.LogisticRegression(multi_class='multinomial', solver='newton-cg')
X_train=X_train.iloc[:,1:]
train_train = regression_log.fit(X_train, Y_train)