перепутал лабы

This commit is contained in:
MaDerniszator 2024-12-20 14:14:59 +04:00
parent c6a08076a5
commit da80c5bcc8
3 changed files with 319 additions and 201 deletions

2
.gitignore vendored
View File

@ -2,3 +2,5 @@ data/jio_mart_items.csv
/data
/Lab_2/lab_2.ipynb
/Lab_3/lab_3.ipynb
/Lab_4/lab_4.ipynb
/Lab_4/lab_products_clustering.ipynb

File diff suppressed because one or more lines are too long

View File

@ -1,200 +0,0 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "e7893b9e",
"metadata": {},
"source": [
"# Лабораторная работа: Методы искусственного интеллекта\n",
"## Задача кластеризации продуктов с использованием cuML\n",
"### Вариант: Продукты\n",
"В данной работе используется библиотека cuML для GPU-ускоренного анализа данных. Цель: провести кластеризацию продуктов на основе их характеристик."
]
},
{
"cell_type": "markdown",
"id": "e3834005",
"metadata": {},
"source": [
"### Загрузка и исследование данных"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "5530d138",
"metadata": {},
"outputs": [],
"source": [
"import cudf\n",
"import cuml\n",
"from cuml.preprocessing import LabelEncoder\n",
"from cuml.decomposition import PCA\n",
"from cuml.cluster import KMeans\n",
"import cupy as cp\n",
"import matplotlib.pyplot as plt\n",
"\n",
"# Загрузка данных\n",
"df = cudf.read_csv('your_dataset_path.csv')\n",
"print(df.info())\n",
"print(df.head())"
]
},
{
"cell_type": "markdown",
"id": "49112908",
"metadata": {},
"source": [
"### Предварительная обработка данных"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "1e3ef9fa",
"metadata": {},
"outputs": [],
"source": [
"# Обработка пропущенных значений\n",
"df = df.dropna()\n",
"\n",
"# Кодирование категориального признака 'items'\n",
"label_encoder = LabelEncoder()\n",
"df['items_encoded'] = label_encoder.fit_transform(df['items'])\n",
"\n",
"# Нормализация числовых признаков\n",
"numeric_features = ['items_encoded', 'price']\n",
"df_scaled = df[numeric_features].astype('float32')\n",
"\n",
"# Преобразование данных в формат cupy\n",
"X = cp.asarray(df_scaled.values)"
]
},
{
"cell_type": "markdown",
"id": "ff5f1f8f",
"metadata": {},
"source": [
"### Понижение размерности и визуализация данных"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "e15c80bb",
"metadata": {},
"outputs": [],
"source": [
"# Применение PCA для понижения размерности\n",
"pca = PCA(n_components=2)\n",
"reduced_data = pca.fit_transform(X)\n",
"\n",
"# Преобразуем данные из cupy в numpy\n",
"reduced_data_np = reduced_data.get()\n",
"\n",
"# Визуализация данных\n",
"plt.scatter(reduced_data_np[:, 0], reduced_data_np[:, 1])\n",
"plt.title('Визуализация данных после PCA')\n",
"plt.xlabel('PC1')\n",
"plt.ylabel('PC2')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "f2eef505",
"metadata": {},
"source": [
"### Выбор оптимального количества кластеров"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "f72195d2",
"metadata": {},
"outputs": [],
"source": [
"# Оценка инерции и коэффициента силуэта\n",
"inertia = []\n",
"silhouette_scores = []\n",
"k_range = range(2, 11)\n",
"for k in k_range:\n",
" kmeans = KMeans(n_clusters=k, random_state=42)\n",
" kmeans.fit(reduced_data)\n",
" inertia.append(kmeans.inertia_)\n",
" silhouette_scores.append(cuml.metrics.silhouette_score(reduced_data, kmeans.labels_))\n",
"\n",
"# Построение графиков\n",
"plt.figure(figsize=(14, 5))\n",
"plt.subplot(1, 2, 1)\n",
"plt.plot(k_range, inertia, marker='o')\n",
"plt.title('Критерий инерции')\n",
"plt.xlabel('Число кластеров')\n",
"plt.ylabel('Инерция')\n",
"\n",
"plt.subplot(1, 2, 2)\n",
"plt.plot(k_range, silhouette_scores, marker='o')\n",
"plt.title('Коэффициент силуэта')\n",
"plt.xlabel('Число кластеров')\n",
"plt.ylabel('Силуэт')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "180e85ac",
"metadata": {},
"source": [
"### Кластерный анализ"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "dd573024",
"metadata": {},
"outputs": [],
"source": [
"# Кластеризация с использованием KMeans\n",
"optimal_k = 4 # Выбираем на основе графиков\n",
"kmeans = KMeans(n_clusters=optimal_k, random_state=42)\n",
"labels = kmeans.fit_predict(reduced_data)\n",
"\n",
"# Визуализация кластеров\n",
"plt.scatter(reduced_data[:, 0], reduced_data[:, 1], c=labels, cmap='viridis')\n",
"plt.title('Кластеры (KMeans)')\n",
"plt.xlabel('PC1')\n",
"plt.ylabel('PC2')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "407d268e",
"metadata": {},
"source": [
"### Оценка качества кластеризации"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "d00795e2",
"metadata": {},
"outputs": [],
"source": [
"# Оценка коэффициента силуэта\n",
"silhouette = cuml.metrics.silhouette_score(reduced_data, labels)\n",
"print(f'Силуэт для кластеризации: {silhouette:.2f}')"
]
}
],
"metadata": {
"language_info": {
"name": "python"
}
},
"nbformat": 4,
"nbformat_minor": 5
}