首页 > 解决方案 > ValueError: bad input shape (560, 5) sklearn

问题描述

我开始编写学习机模型。我有一个 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)

标签: pythonscikit-learnlogistic-regressionsklearn-pandasmodel-fitting

解决方案


您会收到该错误,因为您的标签是分类的。您需要使用标签编码器将其编码为 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)

推荐阅读