Ошибка значения: неправильная форма ввода (560, 5) sklearn

#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)