如何在Python嵌套循环中创建数组/DataFrame存储seedN、模型测试得分及n_neighbors
存储KNN模型循环训练结果的实现方案
现有一段通过嵌套循环训练KNeighborsClassifier的Python代码,需要创建数组或DataFrame来存储每次循环中的seedN、模型测试集得分(clf.score(X_test, y_test))以及n_neighbors三个变量的值,以下是两种可行的实现方式:
方式一:列表收集数据后转DataFrame(推荐)
这种方式先通过列表批量收集所有循环结果,最后一次性转为DataFrame,效率更高,适合数据量较大的场景:
from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier import pandas as pd # 初始化存储结果的列表 result_list = [] for seedN in range(1, 50, 1): X_train, X_test, y_train, y_test = train_test_split(indicators, data2['target'], test_size=0.25, random_state=seedN) neighbors_settings = range(1, 70) # 尝试n_neighbors从1到69 for n_neighbors in neighbors_settings: clf = KNeighborsClassifier(n_neighbors=n_neighbors) clf.fit(X_train, y_train) test_score = clf.score(X_test, y_test) # 存储当前循环的三个变量值 result_list.append({ 'seedN': seedN, 'n_neighbors': n_neighbors, 'test_score': test_score }) # 将列表转为DataFrame result_df = pd.DataFrame(result_list) # 查看前5行验证结果 print(result_df.head())
方式二:直接逐行追加到DataFrame
这种方式更直观,但频繁追加DataFrame会带来一定性能损耗,适合小数据量场景:
from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier import pandas as pd # 初始化空DataFrame并指定列名 result_df = pd.DataFrame(columns=['seedN', 'n_neighbors', 'test_score']) for seedN in range(1, 50, 1): X_train, X_test, y_train, y_test = train_test_split(indicators, data2['target'], test_size=0.25, random_state=seedN) neighbors_settings = range(1, 70) for n_neighbors in neighbors_settings: clf = KNeighborsClassifier(n_neighbors=n_neighbors) clf.fit(X_train, y_train) test_score = clf.score(X_test, y_test) # 逐行追加数据到DataFrame result_df = pd.concat([result_df, pd.DataFrame({ 'seedN': [seedN], 'n_neighbors': [n_neighbors], 'test_score': [test_score] })], ignore_index=True) # 查看前5行验证结果 print(result_df.head())
内容的提问来源于stack exchange,提问作者odoacer the gaul
相关产品推荐
相关产品推荐

