Сегментация клиентов или кластеризация полезны по-разному. Его можно использовать для целевого маркетинга. Иногда при построении прогнозной модели более эффективно кластеризовать данные и строить отдельную прогнозную модель для каждого кластера. В этой статье я объясню, как я сделал это для создания кластеров с использованием модели k-средних, развернутой с помощью Flask.
Алгоритм K-средних
AndreyBu, который имеет более 5 лет опыта в машинном обучении и в настоящее время обучает людей своим навыкам, говорит, что цель K-средних проста: сгруппировать похожие точки данных вместе и выявить лежащие в основе закономерности. Для достижения этой цели K-means ищет фиксированное количество (k) кластеров в наборе данных .
Давайте посмотрим, как работает алгоритм машинного обучения K-средних с использованием языка программирования Python. Мы будем использовать библиотеку Scikit-learn и некоторые случайные данные, чтобы проиллюстрировать простое объяснение кластеризации K-средних.
Шаг 1. Импортируйте библиотеки
import pandas as pdimport numpy as np from sklearn import preprocessingimport matplotlib.pyplot as pltfrom sklearn.cluster import KMeans import Flask, request, jsonify, render_template
Как видно из приведенного выше кода, мы импортируем в наш проект следующие библиотеки:
- Панды для чтения и написания электронных таблиц
- Numpy для проведения эффективных вычислений
- Matplotlib для визуализации данных
- Sklearn для языка программирования Python
- Фляга для развертывания
Шаг 2. Предварительная обработка данных
Это метод интеллектуального анализа данных, который преобразует необработанные данные в понятный формат. Необработанные данные (данные реального мира) всегда неполны, и эти данные нельзя передать через модель. Это вызовет определенные ошибки. Вот почему нам нужно предварительно обработать данные перед отправкой через модель.
Вот шаги, которые я выполнил:
- удалить повторяющиеся строки
- заменить отсутствующие значения средним, медианным или режимом функции
- преобразовать категориальную переменную в числовые данные с помощью кодировщика меток
- ограничить диапазон переменных с помощью масштабирования функций
def Preproceesing(): d.drop_duplicates(keep='first') d.x1.fillna(d.x1.mean(), inplace=True) # x1 example le = preprocessing.LabelEncoder() #label encoder le.fit(d.x1) d.x1=le.transform(d.x1) in_max_scaler = preprocessing.MinMaxScaler() #feature scaling scaled_array = min_max_scaler.fit_transform(d) d = pd.DataFrame(scaled_array,columns=d.columns) return d
Шаг 3. PCA для визуализации данных
Для многих приложений машинного обучения это помогает иметь возможность визуализировать ваши данные, вы можете использовать PCA, чтобы уменьшить эти 4-мерные данные до 2-х или 3-х измерений, чтобы вы могли строить и, надеюсь, лучше понимать данные.
def PCA(d): pca = PCA() pca.fit(d) pca_samples = pca.transform(d) return pca_samples
Шаг 4: моделирование
Вот код для обучения k-средних и поиска центроида:
clusterer = KMeans(n_clusters=4,random_state=42,n_init=10).fit(d) centers = clusterer.cluster_centers_ labels= clusterer.predict(d)
Чтобы определить оптимальное количество кластеров для k-средних, метод локтя является одним из самых популярных методов определения этого оптимального значения k.
Мы должны выбрать значение k в «изгибе», то есть в точке, после которой искажение / инерция начинает линейно уменьшаться.
Как мы можем сказать, что показатель качества кластеризации хорош?
значение силуэта является мерой того, насколько объект похож на его собственный кластер (сплоченность) по сравнению с другими кластерами (разделение). Силуэт варьируется от -1 до +1, где высокое значение указывает, что объект хорошо соответствует своему собственному кластеру и плохо соответствует соседним кластерам. Если большинство объектов имеют высокое значение, то конфигурация кластеризации подходит. Если многие точки имеют низкое или отрицательное значение, то в конфигурации кластеризации может быть слишком много или слишком мало кластеров.
from sklearn.metrics import silhouette_score silhouette_score(d,labels)
Шаг 4: развертывание
Для нашего приложения мы определим маршрут @ app.route (’/ clustering’), для вызова нашей модели, как показано в приведенном ниже коде:
app = Flask(__name__) app.config["DEBUG"] = True @app.route('/clustering') def predict(): data= pd.read_csv('dataset.csv') data=prepross(data) data=pca(data) clusterer = KMeans(n_clusters=4,random_state=42,n_init=10).fit(d) centers = clusterer.cluster_centers_ labels= clusterer.predict(d) return jsonify(labels) if __name__ == '__main__': app.run(debug='true' )
чтобы проверить это, сохраните файл как app.py и запустите его. API по умолчанию будет работать на порту 5000. Затем используйте Postman или просто команду на терминале, набрав:
C:\Users\USER\Desktop\media\heroku> python app.py
Его легко понять, особенно если вы ускорите обучение с помощью Учебника по кластеризации K-средних. Он быстро предоставляет результаты обучения. Таким образом, вы можете прийти к осмысленным выводам и рекомендациям, используя кластеризацию k-средних для создания кластеров клиентов.
Если вы хотите поиграть с моим исходным кодом, вы можете найти его здесь.