Assistant: 
User: User: Привет. У меня забивается оперативная память при выполнении этого кода. Подскажи можно ли как-то этого избежать? (у меня 32гб оперативной памяти ddr5)

```
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import cross_val_score, GridSearchCV, train_test_split
from sklearn.datasets import fetch_openml

# Загрузка датасета MNIST из библиотеки openml
mnist = fetch_openml('mnist_784', version=1)

X, y = mnist['data'], mnist['target'] # Разделяем данные на признаки (X) и целевую переменную (y)

# Разделяем данные на обучающую и тестовую выборки. В данном случае первые 60k - обучающие данные.
X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=60_000/70_000)

knn_clf = KNeighborsClassifier()

knn_clf.fit(X_train, y_train) # Обучаем модель на обучающих данных

# Проводим кросс-валидацию для оценки качества модели с помощью метрики 'accuracy'
cross_val_score(knn_clf, X_train, y_train, cv=3, scoring='accuracy')

# Определяем параметры для поиска по сетке (Grid Search) 
parameters = {'n_neighbors': [4, 5], 'weights': ['uniform', 'distance']}

grid_search_clf = GridSearchCV(
    estimator=knn_clf,
    param_grid=parameters,
    cv=3,
    scoring='accuracy',
    n_jobs=-1
) #  Поиск лучших гиперпараметров модели

grid_search_clf.fit(X_train,y_train) # Обучаем модель с использованием поиска по сетке гиперпараметров 

knn_best = grid_search_clf.best_estimator_
print(f"Наилучшие параметры: {grid_search_clf.best_params_}")

cross_val_score(knn_best,X_train,y_train ,cv=3) # оценка модели




from scipy.ndimage import shift

def shift_digits(data_frame, direction):
    """
    Сдвиг изображений с цифрами в указанном направлении.
    """
    shifted_data = data_frame.values
    for i in range(shifted_data.shape[0]):
        shifted_digit = shift(shifted_data[i].reshape(28, 28), direction)
        shifted_data[i] = shifted_digit.reshape(784,)
        
    return shifted_data

shifted_up = pd.DataFrame(shift_digits(X_train.copy(), [-1, 0]), columns=X_train.columns) # сдвиг вверх
shifted_down = pd.DataFrame(shift_digits(X_train.copy(), [1, 0]), columns=X_train.columns) # сдвиг вниз
shifted_right = pd.DataFrame(shift_digits(X_train.copy(), [0, 1]), columns=X_train.columns) # сдвиг вправо
shifted_left = pd.DataFrame(shift_digits(X_train.copy(), [0, -1]), columns=X_train.columns) # сдвиг влево

# Объединяем оригинальные и сдвинутые изображения в один DataFrame
combined_X_train = pd.concat([X_train, shifted_up, shifted_down, shifted_right, shifted_left])
combined_Y_train = pd.concat([y_train] * 5)  # Объединяем метки для всех новых данных

print(combined_X_train.shape)
print(combined_Y_train.shape)

cross_val_score(knn_best, combined_X_train, combined_Y_train, cv=3, scoring='accuracy') # оценка модели






from sklearn.preprocessing import OrdinalEncoder

df = pd.read_csv('data/column_2C_weka.csv')

df.info()

df.describe().T

df.isnull().sum() # Проверяем наличие пропусков в данных

df.duplicated().sum() # Проверяем количество дубликатов в данных

##==> Визуализация данных
###########################################

data_frame = df[
    (df['pelvic_incidence'] < 100) &
    (df['pelvic_tilt numeric'].between(-4, 45)) &
    (df['lumbar_lordosis_angle'] < 110) &
    (df['pelvic_radius'].between(89, 147)) &
    (df['degree_spondylolisthesis'] < 102)
]

for column in ['class', 'pelvic_incidence', 'pelvic_tilt numeric', 'lumbar_lordosis_angle', 'sacral_slope', 'pelvic_radius', 'degree_spondylolisthesis']:
    plt.figure()
    plt.hist(data_frame[column]) if column == 'class' else plt.boxplot(data_frame[column])
    plt.title(column)
    plt.show()

# Кодирование классов
data_frame['class'] = OrdinalEncoder(categories=[['Abnormal', 'Normal']]).fit_transform(data_frame[['class']])

# Подготовка данных для обучения
features = data_frame.drop('class', axis=1)
target = data_frame['class']
X_train, X_test, y_train, y_test = train_test_split(features, target, test_size=0.33)
X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.5)

# Обучение и оценка модели
knn_classifier = KNeighborsClassifier()
knn_classifier.fit(X_train, y_train)
print(f'Точность на тестовом наборе: {cross_val_score(knn_classifier, X_test, y_test, cv=3, scoring="accuracy").mean()}')

# Оптимизация гиперпараметров
param_grid = {'n_neighbors': range(1, 11), 'weights': ['uniform', 'distance']}
best_knn_model = GridSearchCV(knn_classifier, param_grid).fit(X_val, y_val).best_estimator_
print(f'Наилучшая точность на тестовом наборе: {cross_val_score(best_knn_model, X_test, y_test, cv=3, scoring="accuracy").mean()}')
```
Assistant: Привет! Похоже, что у тебя возникают проблемы с использованием оперативной памяти при выполнении этого кода. Вот несколько советов, которые могут помочь уменьшить использование памяти:

1. **Уменьшение размера данных**: Если возможно, попробуй уменьшить размер обучающего набора данных. Например, можно использовать только часть данных из MNIST или уменьшить размерность данных с помощью методов, таких как PCA (анализ главных компонент).

2. **Использование `n_jobs`**: В `GridSearchCV` ты уже используешь `n_jobs=-1`, что означает использование всех доступных ядер процессора. Это может увеличить использование памяти. Попробуй установить `n_jobs=1`, чтобы использовать только одно ядро.

3. **Проверка типов данных**: Убедись, что типы данных в твоем DataFrame оптимальны. Например, если у тебя есть целочисленные данные, убедись, что они имеют тип `int8` или `int16`, если это возможно, вместо `int64`.

4. **Удаление ненужных переменных**: После того как ты закончил использовать переменные, которые занимают много памяти, попробуй удалить их с помощью `del` и вызвать сборщик мусора с помощью `import gc; gc.collect()`.

5. **Пакетная обработка**: Если ты работаешь с большими наборами данных, попробуй разбить их на более мелкие части и обрабатывать их по очереди.

6. **Использование `dask` или `modin`**: Эти библиотеки могут помочь с обработкой больших наборов данных, так как они используют ленивую загрузку и распределенные вычисления.

Попробуй применить эти советы и посмотри, поможет ли это снизить использование оперативной памяти. Если у тебя есть дополнительные вопросы, не стесняйся спрашивать!
User: а как мне узнать сколько у меня ядер
Assistant:
Assistant: