scikit-learn报”ValueError: Invalid input X. Expected array-like, got {input_type}. “的原因以及解决办法

  • Post category:Python

该报错通常由以下两种情况导致:

  1. X为列表或元组类型,但其元素数量不一致:

例如,将以下两个列表作为X传入模型训练过程中:

X = [[1, 2, 3], [4, 5]]

则会报错:

ValueError: Found input variables with inconsistent numbers of samples: [2, 1]

解决办法:确保X中所有元素的数量一致,可以通过补齐缺少的元素或去除多余的元素来达到一致性。

  1. X不是array-like类型,可能是DataFrame、Series等类型:

例如,将以下DataFrame作为X传入模型训练过程中:

import pandas as pd

df = pd.DataFrame({
    'a': [1, 2, 3],
    'b': [4, 5, 6]
})

X = df

则会报错:

ValueError: Invalid input X. Expected array-like, got <class 'pandas.core.frame.DataFrame'>

解决办法:

将X转化为array-like类型,可以使用pandas中的.values方法来实现:

X = df.values

此外,还需要注意X中的数据类型是否符合模型输入要求,对于某些模型,如决策树等,需要保证X中的特征都是数值型的,否则会出现类似以下的错误:

ValueError: could not convert string to float: 'a'

当出现该错误时,可以使用sklearn.preprocessing模块中的工具类将非数值型特征进行编码,如OneHotEncoder、LabelEncoder等。