You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 16:24:13