如何解决如何编写一种更快速的方法来遍历列表中具有变量组合的列表,以运行预测模型,而不是进行迭代?
我已经有一个功能,可以附加我需要的所有准确性,召回率等度量,并输出一个数据框,以便快速,轻松地比较。
所有变量都在数据框中,因此我要做的就是选择所需的列。由于保密协议,我无法与您共享我的数据集。但是实际数据集大约需要23K观察长,并使用scaler.fit_transform()
和一个二进制因变量进行了转换。因此,下面的所有内容都组成了。
import itertools
input = ["var_1","var_2","var_3","var_4","var_5","var_6","var_7"]
output = sum([list(map(list,combinations(input,i))) for i in range(len(input) + 1)],[])
counter = 0
for item in itertools.chain.from_iterable(output):
train_x = train[["Age","Gender","Income","Seniority","Management","Masters"]].join(train[[item]])
test_x = test[["Age","Masters"]].join(train[[item]])
train_y = [["Longevity"]]
test_x = ["Longevity"]]
mlp = MLPClassifier(hidden_layer_sizes=(10),max_iter=1000)
svclassifier = SVC(kernel='linear')
counter = counter + 1
knn_model(mlp,str("model_name" + str(counter)))
svm_model(svclassifier,str("model_name" + str(counter)))
我为knn_model和svm_model写了函数。我并不认为这些功能是必需的,但这是knn_model。 svm_model完全相同,只是拍了一个不同的名字
knn_results = pd.DataFrame(columns = ["Model_Name","Accuracy","Precision","Recall","Test_Error","F_Stat","T_Negative","F_Positive","F_Negative","T_Positive","Model"])
def knn_model(model,model_name):
model = mlp.fit(train_x,train_y)
y_pred = pd.DataFrame(mlp.predict(test_x),columns = ["Predicted"])
global knn_results
name = model_name
a_score = metrics.accuracy_score(test_y,y_pred)
p_score = metrics.precision_score(test_y,y_pred)
r_score = metrics.recall_score(test_y,y_pred)
TN = metrics.confusion_matrix(test_y,y_pred)[0,0]
FP = metrics.confusion_matrix(test_y,1]
FN = metrics.confusion_matrix(test_y,y_pred)[1,0]
TP = metrics.confusion_matrix(test_y,1]
t_error = (1 - metrics.accuracy_score(test_y,y_pred))
f1_score = metrics.f1_score(test_y,y_pred)
knn_results = knn_results.append(
{'Model_Name': name,'Accuracy': a_score,'Precision': p_score,'Recall': r_score,"Test_Error": t_error,"F1_Score": f1_score,'T_Negative': TN,'F_Positive': FP,'F_Negative': FN,'T_Positive': TP,"Model": model},ignore_index=True)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。