有没有办法在多个数据集上部分训练 KNN 模型?

问题描述 投票:0回答:1

我正在处理一个非常大的数据集,其中包含 50 个(总共 150 GB)参与者的数据。连接/合并的数据文件太大,以至于我的计算机不断出现内存错误。因此,我正在研究在每个数据集上部分训练 KNN 模型的方法,这样我就可以从 RAM 中擦除已经训练过的数据集。我的电脑有 32 GB RAM。

这可能很简单,但我一直在绞尽脑汁。有什么办法可以做到这一点吗?

我想象的粗略示例:

knn = KNeighborsClassifier(n_neighbors=6)

for participant in participant_list: 

    df = pd.read_csv(csv_file_of_this_participant) 

    X_train = df.drop(Column_name) 
    y_train = df[Column_name]

    knn.partial_fit(X_train, y_train, classes=np.unique(y_train)) 
    #something like the line above to partially train it

    del df 


#And then another for loop would follow to test it.

我尝试过特征选择和主成分分析来提高合并数据集的内存效率,但 KNN 仍然遇到内存错误。

我尝试使用一个循环来遍历数据块并在该循环中训练和测试 KNN 模型,但最终仍然遇到内存问题。即使它有效,我也只会得到仅在部分数据上训练的 knn 模型的一堆结果,并且我必须对最终结果进行平均,所以这似乎不是最佳的。

python out-of-memory ram knn
1个回答
0
投票

在推理期间,即预测时间,KNN 模型需要访问训练数据以找到最近的训练实例。如果您的数据集大小为 150 GB,KNN 模型可能不是最佳选择。

在我看来,你至少有三种选择:

1.) 如果您的数据集包含大量冗余数据点,您可以对数据进行下采样。

2.) 对数据进行分区,以便在每个分区上训练各个模型。

3.) 使用能够处理大型训练数据集的算法和实现。您可以从 XGBoost 开始:https://xgboost.readthedocs.io/en/latest/tutorials/external_memory.html

© www.soinside.com 2019 - 2024. All rights reserved.