Python Scikit-learn 报错 'ValueError: at least one array or dtype is required' 解决方法

在使用 Scikit-learn 进行线性回归分析时,你可能会遇到类似这样的错误信息:pythonTraceback (most recent call last): File 'D:\pythonProject\数据结构与算法\线性回归.py', line 14, in lr_fit = lr.fit(X_tra, Y_tra) ^^^^^^^^^^^^^^^^^^^^ # ... 省略部分错误信息 ...ValueError: at least one array or dtype is required

这个错误信息表明在调用 lr.fit() 函数时,输入的数组 XY 存在问题,可能是数据缺失或数据类型不正确导致的。

问题原因分析

'ValueError: at least one array or dtype is required' 错误通常是由于以下原因造成的:

  1. 数据缺失: XY 中存在缺失值 (NaNNone),导致 NumPy 无法确定数据类型。2. 数据类型错误: XY 的数据类型不符合 Scikit-learn 的要求,例如包含字符串或其他非数值类型。

解决方案

为了解决这个问题,你需要检查并处理 XY 数据中的缺失值和数据类型问题。以下是一些常用的方法:

1. 处理缺失值

  • 删除包含缺失值的行: 使用 Pandas 的 dropna() 函数可以删除包含缺失值的行。 ```python import pandas as pd

    data = pd.read_excel('D:\M_hua\shaoshui.xlsx', index_col=0) data = data.dropna() # 删除包含缺失值的行 * **填充缺失值**: 使用 Pandas 的 `fillna()` 函数可以用指定值(例如均值、中位数等)填充缺失值。 python data['column_name'] = data['column_name'].fillna(data['column_name'].mean()) # 用该列的均值填充缺失值 ```

2. 数据类型转换

  • 转换为数值类型: 使用 Pandas 的 astype() 函数将数据转换为数值类型,例如 float64int64python data['column_name'] = data['column_name'].astype('float64') # 转换为浮点类型 * 处理非数值类型: 如果数据中包含非数值类型,你需要根据实际情况进行处理,例如将字符串类型转换为数值类型、删除或替换异常值等。

代码示例

以下是修改后的代码示例,包括对缺失值的处理和数据类型转换:pythonimport pandas as pdfrom sklearn.linear_model import LinearRegressionfrom sklearn.model_selection import train_test_split

data_shaoshui = pd.read_excel('D:\M_hua\shaoshui.xlsx', index_col=0)

处理缺失值data_shaoshui = data_shaoshui.dropna()

确保数据类型为数值类型X = data_shaoshui.iloc[:, :19].astype('float64')Y = data_shaoshui.iloc[:, 19:].astype('float64')

X_tra, X_tes, Y_tra, Y_test = train_test_split(X, Y, random_state=8)

lr = LinearRegression()lr_fit = lr.fit(X_tra, Y_tra)print('{:.3f}'.format(lr_fit.score(X_tra, Y_tra)))

lr_coef = pd.DataFrame(lr_fit.coef_, columns=X_tra.columns, index=['coef'])lr_coef['INTERCEPT'] = lr_fit.intercept_print(lr_coef)

总结

通过处理数据缺失和数据类型问题,你可以解决 'ValueError: at least one array or dtype is required' 错误,并顺利进行线性回归分析。请根据你的实际数据情况选择合适的处理方法。

Python Scikit-learn 报错 ValueError: at least one array or dtype is required 解决方法

原文地址: http://www.cveoy.top/t/topic/diO2 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录