в процессе
This commit is contained in:
parent
19073f816e
commit
2c9c5ed30b
0
Lab_4/lab4.ipynb
Normal file
0
Lab_4/lab4.ipynb
Normal file
566
Lab_4/lab_4.ipynb
Normal file
566
Lab_4/lab_4.ipynb
Normal file
File diff suppressed because one or more lines are too long
216
Lab_4/lab_products_clustering.ipynb
Normal file
216
Lab_4/lab_products_clustering.ipynb
Normal 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
|
||||
}
|
Loading…
Reference in New Issue
Block a user