You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Python Sklearn中ValueError:仅接受2个非关键字参数错误

解决Sklearn线性回归中的ValueError及代码问题

嘿,我来帮你一步步搞定这个问题~你碰到的ValueError: only 2 non-keyword arguments accepted主要是代码里的几个关键错误导致的,咱们逐个拆解:

1. 目标变量数组的语法错误

你的trainingScores数组写法有问题,现在的格式会让它变成多个零散数组的集合,而不是一个和样本数匹配的统一数组。从你的需求来看,是用2个特征(trainingData里的两个数值)预测1个目标值,所以trainingScores应该和trainingData的样本数(9个)对应,是一个一维数组。我先帮你修正语法(你可以根据实际目标值调整内容):

trainingScores = np.array([11, 18, 23, 33, 34, 6, 10, 19, 21])

2. fit方法的参数顺序完全搞反了

Sklearn所有模型的fit()方法规则都是先传特征矩阵X,再传目标变量y,也就是clf.fit(X, y)。你现在把trainingScores(目标值)和trainingData(特征)传反了,这是触发错误的核心原因之一。正确写法应该是:

clf.fit(trainingData, trainingScores)

3. predict方法的输入维度不符合要求

predict()要求输入的特征必须是二维数组(哪怕只有一个样本),每个样本占一行。你现在传的是一维数组np.array([862, 19012018 ]),会导致维度不匹配,需要改成二维格式:

predictionData = np.array([[862, 19012018 ]])

额外优化建议:日期特征处理

你用16012018这类整数表示日期(比如2018年1月16日?),这种格式模型很难学到有效的时间规律。建议把它转换成datetime类型,提取年、月、日或者转换成时间戳数值,比如:

from datetime import datetime

# 把日期整数转成datetime对象(假设格式是DDMMYYYY)
def convert_date(date_int):
    date_str = str(date_int)
    return datetime.strptime(date_str, "%d%m%Y")

# 转换trainingData里的日期特征为时间戳
trainingData[:,1] = [convert_date(d).timestamp() for d in trainingData[:,1]]

修正后的完整代码

from sklearn.linear_model import LinearRegression
import numpy as np
from datetime import datetime

# 特征数据(可后续优化日期特征)
trainingData = np.array([[861, 16012018], [860, 12012018], [859, 9012018], 
                         [858, 5012018], [857, 2012018], [856, 29122017], 
                         [855, 26122017], [854, 22122017], [853, 19122017]])

# 目标变量数组(根据实际数据调整)
trainingScores = np.array([11,18,23,33,34,6,10,19,21])

clf = LinearRegression(fit_intercept=True)
# 修正fit参数顺序
clf.fit(trainingData, trainingScores)

# 修正predict输入维度
predictionData = np.array([[862, 19012018 ]])
x=clf.predict(predictionData)
print(x)

内容的提问来源于stack exchange,提问作者dondeveto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:47:40