ValueError: Неизвестный тип метки: «непрерывный» при совместном использовании моделей кластеризации + классификации - PullRequest
0 голосов
/ 05 апреля 2020

Я создал модель кластеризации, чтобы попытаться найти различные группы клиентов на основе годового дохода и оценки расходов, используя алгоритм KMeans из Scikit-Learn. Используя значение кластера, которое он возвращал каждому клиенту, я попытался создать модель классификации с использованием вспомогательной векторной классификации из sklearn.svm. Однако, когда я попытался вписать новую модель в набор данных, я получил сообщение об ошибке:

File "/Users/user/Documents/Machine Learning A-Z Template Folder/Part 4 - Clustering/Section 24 - K-Means Clustering/cluster_and_prediction.py", line 28, in <module>
    classifier.fit(x_train, y_train)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/sklearn/svm/_base.py", line 149, in fit
    y = self._validate_targets(y)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/sklearn/svm/_base.py", line 525, in _validate_targets
    check_classification_targets(y)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/sklearn/utils/multiclass.py", line 169, in check_classification_targets
    raise ValueError("Unknown label type: %r" % y_type)
ValueError: Unknown label type: 'continuous'

Мой код выглядит следующим образом

import pandas as pd 
import numpy as np 

# Using relevant columns from dataset
dataset = pd.read_csv('Mall_Customers.csv')
x = dataset.iloc[:, 3:5].values

# Creating model with ideal amount of clusters
kmeans = KMeans(n_clusters=5, init='k-means++', max_iter=300, n_init=10, random_state=0)
kmeans.fit(x)

predictions = kmeans.predict(x)

# Creating numpy array for feature scaling
predictions = np.array(predictions, dtype=int)
predictions = predictions[:, None]

from sklearn.preprocessing import StandardScaler
sc_x = StandardScaler()
sc_y = StandardScaler()
x = sc_x.fit_transform(x)
predictions = sc_y.fit_transform(predictions)

# Splitting dataset into training and test sets
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, predictions, test_size=.25)

# Creating Support Vector Classification model
from sklearn.svm import SVC
classifier = SVC(kernel='rbf')
classifier.fit(x_train, y_train)

Колено Модель используется для Кластеризация

Кластеризация визуализации

.zip файл с набором данных (набор данных называется 'Mall_Customers.csv'

Как я могу это исправить?

1 Ответ

0 голосов
/ 06 апреля 2020

Поскольку вы хотите решить эту проблему как проблему классификации с 5 классами, вы должны , а не использовать масштабатор для ваших меток; это преобразует их в непрерывные переменные, введенные в классификационную модель, отсюда и ошибка.

Кроме того, это не имеет отношения к проблеме, но правильная методология заключается в том, чтобы приспособить ваш скейлер только к вашим тренировочным данным, а затем использовать этот подогнанный скейлер для преобразования ваших тестовых данных.

Итак, вот необходимые изменения (после того, как вы закончили с настройкой переменной predictions):

# initial (unscaled) x used here:
x_train, x_test, y_train, y_test = train_test_split(x, predictions, test_size=.25)
sc = StandardScaler()
x_train_scaled = sc.fit_transform(x_train)
x_test_scaled = sc.transform(x_test)

classifier = SVC(kernel='rbf')
classifier.fit(x_train_scaled, y_train) # no scaling for predictions or y_train

Также не имеет отношения к проблеме, но вы Вы должны масштабировать свои x данные до с помощью k-средних, то есть сначала вам нужно масштабировать x, а затем выполнять кластеризацию (оставляя это в качестве упражнения, поскольку оно не имеет ничего общего с ошибкой ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...