Logistic Regression报错:'tuple' object has no attribute 'fit' 求助
解决Logistic Regression建模中的AttributeError问题
错误原因
你在定义模型时犯了一个细节错误:
log_regression = "Logistic Regression", LogisticRegression(random_state=16)
这里的逗号让Python把右侧内容解析成了元组(包含字符串和模型实例),而元组没有fit方法,因此调用log_regression.fit()时触发了AttributeError。
修正步骤
1. 修正模型赋值语句
直接实例化LogisticRegression对象即可,多余的字符串可以单独存储(如果需要的话):
# 仅实例化模型 log_regression = LogisticRegression(random_state=16) # 如果需要保留模型名称,单独定义变量 model_name = "Logistic Regression" log_regression = LogisticRegression(random_state=16)
2. 补充缺失的导入
原代码缺少LogisticRegression和accuracy_score的导入,必须补上:
from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_score
3. 处理特征数据(关键!否则训练仍会报错)
你的特征包含Sex(字符串类型,如"male"/"female")和Age(大概率存在缺失值),这两个问题会直接导致模型训练失败:
- 对
Sex进行数值编码:用LabelEncoder把字符串转为数值型 - 填充
Age的缺失值:比如用中位数填充(比均值更稳健)
完整修正代码
import pandas as pd from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_score from sklearn.preprocessing import LabelEncoder # 假设train_data是已加载的数据集DataFrame y = train_data["Survived"] # 目标变量 features = ["Age", "Sex", "Pclass"] x = train_data[features] # 特征变量 # 填充Age的缺失值 x["Age"] = x["Age"].fillna(x["Age"].median()) # 编码Sex特征 le = LabelEncoder() x["Sex"] = le.fit_transform(x["Sex"]) # 拆分训练集和测试集 x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=16) # 实例化模型 log_regression = LogisticRegression(random_state=16) # 训练模型 log_regression.fit(x_train, y_train) # 预测并计算准确率 y_pred = log_regression.predict(x_test) acc = accuracy_score(y_test, y_pred) print(f"模型准确率:{acc:.2f}")
额外说明
- 若
Age缺失值较少,也可以选择均值填充,具体根据数据集分布决定 - 对于多分类特征,推荐用
OneHotEncoder,但Sex是二分类,LabelEncoder足够满足需求
内容的提问来源于stack exchange,提问作者Yan
相关产品推荐
相关产品推荐

