ValueError:发现样本数量不一致的输入变量 [43,19]

数据挖掘 机器学习 分类 scikit-学习
2022-02-20 21:08:27

因此,我一直在尝试将我的数据集拆分为 70-30 的比例train_test_split,以便使用sklearnPLS 解决问题。但是,我遇到了一个错误,上面写着:

# Read data
df = pd.read_csv(
    filepath_or_buffer='colontumor.csv',
    header=None,
    sep=',')

df.tail()


X = df.iloc[:, :-1].values

# Split data to train and test on 70-30 ratio
X_train, X_test = train_test_split(
    X, test_size=0.30, random_state=None)

pls = PLSRegression(n_components=2)
pls.fit(X_train, X_test)
Y_pred = pls2.predict(X_train)

并以某种方式遇到了这个错误:

Line (17): pls.fit(X_train, X_test)
ValueError: Found input variables with inconsistent numbers of samples: [43, 19]

有什么解决办法吗?我已经转了好几个小时了。

2个回答

给出错误的行是:

pls.fit(X_train, X_test)

fit 中的第二个参数应该是您的标签,即您希望模型能够预测的值。相反,您正在输入X_test,其中包含与相同的特征X_train但具有另一个长度,从而导致您的错误。你想要一个y_train你的目标值并让它看起来像这样:

pls.fit(X_train, y_train)

但是要获得这个值,您需要从数据框中获取标签。在不知道数据的情况下很难知道如何做,但这可能会给你一个想法:

X = df.drop(['name of label column'], axis=1).iloc[:, :-1].values
y = df['name of label column'].iloc[:, :-1].values

# Split data to train and test on 70-30 ratio
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)

pls = PLSRegression(n_components=2)
pls.fit(X_train, y_train)

我以前没有使用过 PLSRegression,但问题在于您的输入。docsPLSRegression().fit()期望两个输入具有相同的行数,但在您的情况下显然不是这样。当您申请train_test_split()X 时,您只需按 70:30 比例的行数拆分数据框,我假设这不是您想要的。(我希望我说得通。)

只需在将数据框输入模型之前尝试打印数据框,然后检查这是否是您真正想要的。