python - 如何在 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 吗?先感谢您!
解决方案
推荐阅读
- google-analytics - 在 Google Analytics 中将域名附加到 URI 的问题
- coordinates - 简单脚本鼠标单击脚本(自动键)的问题
- python - 将文件上传到某个驱动器时发生错误时,有没有办法实现重试功能?
- sql - 如何在 access 2016 表达式生成器中为公式添加掩码
- javascript - 使用 JavaScript 插入 HTML 元素
- excel - 更改excel中的日期格式
- c++ - 根据 a 或正则表达式中的匹配确定替换字符串
- javascript - 将对象用作 formState 时,角度表单 addControl 不起作用
- oracle - 更新 oracle 12 c 中归档的 NCHAR(2 CHAR) 时会自动添加空格/空格
- php - 在数组PHP中重复字符串x次数