我有一系列机器学习模型
models = [ 'SVC', 'RandomForestClassifier', 'GradientBoostingClassifier']
我试图创建一个循环来遍历上述所有模型。下面的代码可以工作。
for i in models: clf = SVC() clf.fit(data_X_train, data_Y_train) predictions = clf.predict(data_X_test) # predictions 是包含 data_X_test 特征预测值(-1 或 1)的数组 predictions_dataframe = pd.DataFrame(predictions) # 将数组转换为数据框 from sklearn.metrics import accuracy_score y_predictions = clf.predict(data_X_test) # 基于 x_test 预测 y print("使用机器学习的准确率得分: " + str(accuracy_score(data_Y_test, y_predictions)))
我尝试了几种循环方法,但它们最终都报错,如下两种情况所示。
我得到的错误是
for i in models: clf = print(i)()TypeError Traceback (most recent call last)<ipython-input-43-d34dacb41464> in <module> 1 for i in models:----> 2 clf = print(i)() 3 4 clf.fit(data_X_train, data_Y_train) 5 TypeError: 'NoneType' object is not callable
或者
for i in models: clf = i()---------------------------------------------------------------------------TypeError Traceback (most recent call last)<ipython-input-44-316d0ec4eb4e> in <module> 1 for i in models:----> 2 clf = i() 3 4 clf.fit(data_X_train, data_Y_train) 5 TypeError: 'str' object is not callable
问题似乎是因为我在列表中使用了字符串,而实际上这是一个函数。
为什么字符串不能调用函数?我以为它在被调用后会变成函数。
我需要更改我的模型列表吗?
回答:
如果您已经有了模型实例,您可以将持有这些实例的变量放入列表中,然后对它们进行迭代。例如:
rfc = RandomForestClassifier()dtc = DecisionTreeClassifier()# 等等clfs = [rfc,dtc]for clf in clfs: clf.fit(x_train, y_train) # 等等