首页 > 解决方案 > 如何在 Python 中为 k-means 预处理大型 pandas 数据帧

问题描述

我想使用肘法在 k-means 算法中找到“k”的值。我正在使用 python 和熊猫。我的 .csv 文件大约 500MB(包含近 1M 行)。问题是,由于MinMaxScaler所有内容都转换为float64,因此我得到了一个MemoryError(尝试读取几行并且它有效)。

到目前为止,我尝试在本地(MacBook Pro - 16GB DDR4)和 EC2 实例(免费层)上以 python 和 pyspark 文件的形式运行它(在所有情况下我都有一个MemoryError. 至于 pyspark (因为我不是专家),我创建了 aSparkSession并创建了 amain和 a if __name__==__main__

import pandas as pd
from sklearn.preprocessing import MinMaxScaler
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
data = pd.read_csv('prosepexergasia.csv',low_memory = False)

categorical_features = ['vendor_name', 'ship_from', 'market', 
'category_cl' ]
continuous_features = ['price']

for col in categorical_features:
    dummies = pd.get_dummies(data[col], prefix=col)
    data = pd.concat([data, dummies], axis=1)
    data.drop(col, axis=1, inplace=True)

mms = MinMaxScaler()
mms.fit(data)
data_transformed = mms.transform(data)

Sum_of_squared_distances = []
K = range(1,15)
for k in K:
    km = KMeans(n_clusters=k)
    km = km.fit(data_transformed)
    Sum_of_squared_distances.append(km.inertia_) 

我的问题是如何解决这个问题?我是否应该启动一个“更大”的 EC2 实例(具有更多内存)并将其作为 pandas 数据框运行?我可以在 python 中分发工作吗?我应该专注于 pySpark 吗?先感谢您!

标签: pythonpandasscikit-learnk-means

解决方案


推荐阅读