监督式逻辑回归Python代码报错求助:TypeError: 'list' object is not callable
排查Logistic回归代码中的TypeError及其他问题
嘿,我来帮你一步步揪出代码里的问题!你遇到的TypeError: 'list' object is not callable是典型的语法误用,咱们逐个拆解解决:
1. 触发TypeError的核心原因
看你最后一行代码:
predicted == y_testarray([ True, True, True, True, True, True, True, True,True, True, True, True, True, True, True], dtype=bool)
你之前已经把y_testarray定义成了一个列表,结果这里却把它当成函数加括号调用了——列表是不能像函数那样执行的,这就直接触发了“列表不可调用”的错误。而且这行逻辑本身也不对,你应该是想对比predicted和y_testarray,正确写法是直接写:
predicted == y_testarray
2. 列表定义的冗余括号
你定义predictedarray和y_testarray时多套了一层括号:
predictedarray=([0, 0, 2, 2, 1, 0, 0, 2, 2, 1, 2, 0, 2, 2, 2]) y_testarray=([0, 0, 2, 2, 1, 0, 0, 2, 2, 1, 2, 0, 2, 2, 2])
虽然Python不会报错,但完全没必要,规范的写法是直接去掉外层括号:
predictedarray = [0, 0, 2, 2, 1, 0, 0, 2, 2, 1, 2, 0, 2, 2, 2] y_testarray = [0, 0, 2, 2, 1, 0, 0, 2, 2, 1, 2, 0, 2, 2, 2]
3. sklearn版本兼容问题
你用的cross_validation.train_test_split在较新的sklearn版本里已经被迁移到model_selection模块下了。虽然你用的Spyder 3.6环境可能还支持旧写法,但为了避免后续版本冲突,建议替换成:
from sklearn.model_selection import train_test_split
然后调用时直接用train_test_split(...)即可,不用再加cross_validation.前缀。
4. 修正后的完整可运行代码
把所有问题修复后,完整代码如下:
from sklearn.datasets import load_iris from sklearn import linear_model from sklearn.model_selection import train_test_split from sklearn import metrics # 加载数据集 iris = load_iris() # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.10, random_state=111) # 初始化并训练逻辑回归模型 logClassifier = linear_model.LogisticRegression(random_state=111) logClassifier.fit(X_train, y_train) # 生成测试集预测结果 predicted = logClassifier.predict(X_test) # 定义手动对比数组(修正括号) predictedarray = [0, 0, 2, 2, 1, 0, 0, 2, 2, 1, 2, 0, 2, 2, 2] y_testarray = [0, 0, 2, 2, 1, 0, 0, 2, 2, 1, 2, 0, 2, 2, 2] # 计算模型准确率 accuracy = metrics.accuracy_score(y_test, predicted) print(f"模型在测试集上的准确率: {accuracy}") # 正确对比预测结果与手动数组 comparison_result = predicted == y_testarray print(f"预测结果与手动数组的匹配情况: {comparison_result}")
运行这段代码应该就能正常输出结果,不会再触发TypeError啦!
内容的提问来源于stack exchange,提问作者Muhammad Ahmed
相关产品推荐
相关产品推荐

