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

Logistic Regression代码中cross_val_predict触发TypeError错误的解决方法

问题解决方法

错误原因

你调用cross_val_predict时,传入的第一个参数是从statistics模块导入的mode函数——这是个普通统计函数,不是scikit-learn的模型估计器,而cross_val_predict要求第一个参数必须是实现了get_params方法的scikit-learn模型对象,因此触发类型错误。

修复后的代码

把cross_val_predict里的mode替换成你已经实例化好的Logistic回归模型model即可,同时补充交叉验证结果的准确率计算,让逻辑更完整:

from statistics import mode  # 若后续不用该函数可直接删除
import pandas as pd
from sklearn.model_selection import KFold
from sklearn.metrics import plot_confusion_matrix, accuracy_score
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import cross_val_predict
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split

# 导入数据集
datasets = pd.read_csv('C:/Users/n3.csv', header=None)
X = datasets.iloc[:, 0:5].values
Y = datasets.iloc[:, 5].values

# 划分训练集和测试集
X_Train, X_Test, Y_Train, Y_Test = train_test_split(X, Y, test_size=0.25, random_state=0)

# 实例化模型(数据集维度较大时,建议增加max_iter参数避免模型不收敛)
model = LogisticRegression(max_iter=1000)

# 交叉验证预测:将mode替换为实例化好的model
predicted = cross_val_predict(model, X_Train, Y_Train, cv=5)

# 计算训练集准确率与交叉验证预测准确率
train_acc = model.fit(X_Train, Y_Train).score(X_Train, Y_Train)
cv_acc = accuracy_score(Y_Train, predicted)

print(f"训练集准确率: {train_acc*100:.2f}%")
print(f"交叉验证预测准确率: {cv_acc*100:.2f}%")

额外说明

  1. 若不需要statistics模块的mode函数,可直接删除对应的导入语句,避免命名混淆。
  2. 当数据集特征较多或分布复杂时,LogisticRegression默认的迭代次数(max_iter=100)可能不足以让模型收敛,手动设置max_iter=1000能有效避免这类问题。
  3. cross_val_predict返回交叉验证过程中每个样本的预测值,搭配accuracy_score计算的准确率,比仅看训练集准确率更能反映模型的泛化能力。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 12:03:14