в процессе

This commit is contained in:
MaDerniszator 2024-12-20 12:16:47 +04:00
parent 19073f816e
commit 2c9c5ed30b
3 changed files with 782 additions and 0 deletions

0
Lab_4/lab4.ipynb Normal file
View File

566
Lab_4/lab_4.ipynb Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,216 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "b33feadc",
"metadata": {},
"source": [
"# Лабораторная работа: Методы искусственного интеллекта\n",
"## Задача кластеризации продуктов\n",
"### Вариант: Продукты\n",
"В данной работе используется датасет с описанием продуктов. Цель: провести кластеризацию, чтобы выявить группы товаров на основе их характеристик. Это может быть полезно для сегментации ассортимента и оптимизации маркетинговых стратегий."
]
},
{
"cell_type": "markdown",
"id": "ae0cdcc2",
"metadata": {},
"source": [
"### Бизнес-цель\n",
"Определить сегменты продуктов на основе характеристик из предоставленного датасета. Сегментация поможет:\n",
"- Разработать целевые рекламные кампании для различных групп товаров.\n",
"- Улучшить стратегию ценообразования."
]
},
{
"cell_type": "markdown",
"id": "29c45779",
"metadata": {},
"source": [
"### Загрузка и исследование данных"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "dab41ace",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"from sklearn.decomposition import PCA\n",
"from sklearn.cluster import KMeans, AgglomerativeClustering\n",
"from sklearn.metrics import silhouette_score\n",
"from scipy.cluster.hierarchy import dendrogram, linkage\n",
"import seaborn as sns\n",
"\n",
"# Загрузка данных\n",
"df = pd.read_csv('your_dataset_path.csv')\n",
"df.info() # Проверка структуры датасета\n",
"df.head()"
]
},
{
"cell_type": "markdown",
"id": "834f0e46",
"metadata": {},
"source": [
"### Предварительная обработка данных"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "14f5eb76",
"metadata": {},
"outputs": [],
"source": [
"# Обработка пропущенных значений\n",
"df.dropna(inplace=True)\n",
"\n",
"# Проверим распределение числовых признаков\n",
"df.describe()\n",
"\n",
"# Нормализация данных\n",
"from sklearn.preprocessing import StandardScaler\n",
"scaler = StandardScaler()\n",
"numeric_features = ['items', 'price']\n",
"df_scaled = scaler.fit_transform(df[numeric_features])\n",
"df_scaled = pd.DataFrame(df_scaled, columns=numeric_features)"
]
},
{
"cell_type": "markdown",
"id": "56fd1a00",
"metadata": {},
"source": [
"### Понижение размерности и визуализация данных"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "c23ca5db",
"metadata": {},
"outputs": [],
"source": [
"# Применение PCA для понижения размерности\n",
"pca = PCA(n_components=2)\n",
"reduced_data = pca.fit_transform(df_scaled)\n",
"\n",
"# Визуализация данных\n",
"plt.scatter(reduced_data[:, 0], reduced_data[:, 1])\n",
"plt.title('Визуализация данных после PCA')\n",
"plt.xlabel('PC1')\n",
"plt.ylabel('PC2')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "dd1339ee",
"metadata": {},
"source": [
"### Выбор оптимального количества кластеров"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "cf6663df",
"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(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": "d55dd7f8",
"metadata": {},
"source": [
"### Кластерный анализ"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "d17981b3",
"metadata": {},
"outputs": [],
"source": [
"# Кластеризация с KMeans\n",
"optimal_k = 4 # Выбираем на основе графиков\n",
"kmeans = KMeans(n_clusters=optimal_k, random_state=42)\n",
"kmeans_labels = kmeans.fit_predict(reduced_data)\n",
"\n",
"# Визуализация кластеров\n",
"plt.scatter(reduced_data[:, 0], reduced_data[:, 1], c=kmeans_labels, cmap='viridis')\n",
"plt.title('Кластеры (KMeans)')\n",
"plt.xlabel('PC1')\n",
"plt.ylabel('PC2')\n",
"plt.show()\n",
"\n",
"# Иерархическая кластеризация\n",
"hierarchical = AgglomerativeClustering(n_clusters=optimal_k)\n",
"hierarchical_labels = hierarchical.fit_predict(reduced_data)\n",
"\n",
"plt.scatter(reduced_data[:, 0], reduced_data[:, 1], c=hierarchical_labels, cmap='viridis')\n",
"plt.title('Кластеры (Иерархическая кластеризация)')\n",
"plt.xlabel('PC1')\n",
"plt.ylabel('PC2')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "98bd2b6e",
"metadata": {},
"source": [
"### Оценка качества кластеризации"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "82e73067",
"metadata": {},
"outputs": [],
"source": [
"# Оценка коэффициента силуэта для KMeans и иерархической кластеризации\n",
"kmeans_silhouette = silhouette_score(reduced_data, kmeans_labels)\n",
"hierarchical_silhouette = silhouette_score(reduced_data, hierarchical_labels)\n",
"\n",
"print(f'Силуэт для KMeans: {kmeans_silhouette:.2f}')\n",
"print(f'Силуэт для иерархической кластеризации: {hierarchical_silhouette:.2f}')"
]
}
],
"metadata": {},
"nbformat": 4,
"nbformat_minor": 5
}