Я хочу найти значение 'k' в алгоритме k-средних, используя метод локтя. Я использую питона и панд. Мой файл .csv составляет около 500 МБ (содержит почти 1 млн. Строк). Проблема в том, что из-за MinMaxScaler
все конвертируется в float64
, и, таким образом, я получаю MemoryError
(попытался прочитать несколько строк, и это сработало).
До сих пор я пытался запустить его локально (MacBook Pro - 16 ГБ DDR4) и на экземпляре EC2 (бесплатный уровень) как в виде файла python, так и в pyspark (во всех случаях я получил MemoryError
). Что касается pyspark (так как я не эксперт) я создал SparkSession
и создал main
и 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 dataframe? Могу ли я распространять работу в Python? Должен ли я сосредоточиться на pySpark? Заранее спасибо!