Классификация с использованием DBSCAN w / Test-Train Split - PullRequest
1 голос
/ 29 марта 2019

Предлагаемый вопрос звучит следующим образом: используйте scikit-learn, чтобы разбить данные на обучающие и тестовые наборы. Классифицируйте данные как кошку или собаку, используя DBSCAN.

Я пытаюсь выяснить, как использовать DBSCAN для подбора модели с использованием обучающих данных, а затем предсказать метки тестового набора. Мне хорошо известно, что DBSCAN предназначен для кластеризации, а не прогнозирования. Я также рассмотрел Использование модели склеарна DBSCAN для классификации новых записей , а также многочисленных других потоков. DBSCAN поставляется только с функциями fit и fit_predict, которые не кажутся относительно полезными при попытке подгонки модели с использованием данных обучения и последующего тестирования модели с использованием данных тестирования.

Вопрос сформулирован плохо или я что-то упустил? Я просмотрел документацию по scikit-learn, а также искал примеры, но мне не повезло.

# Split the samples into two subsets, use one for training and the other for testing
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)

# Instantiate the learning model
dbscan = DBSCAN()

# Fit the model
dbscan.fit(X_train, y_train)

# Predict the response

# Confusion matrix and quantitative metrics
print("The confusion matrix is: " + np.str(confusion_matrix(y_test, dbscan_pred)))
print("The accuracy score is: " + np.str(accuracy_score(y_test, dbscan_pred)))

Ответы [ 2 ]

2 голосов
/ 30 марта 2019

Кто бы ни дал вам это задание, понятия не имеет ...

DBSCAN никогда не предскажет "кошку" или "собаку".Это просто невозможно.

Поскольку это неконтролируемый алгоритм, он не использует обучающие метки.y_train игнорируется (см. Документацию по параметрам), и глупо, что sklearn вообще позволит вам пропустить его! Он выведет наборы точек, которые являются кластерами.Многие инструменты будут перечислять эти наборы как 1, 2, ... Но набор не будет называться «собаками».

Более того, он также не может предсказать новые данные - которые вам нужны для прогнозирования »тестовые данные.Так что он не может работать с разделением теста на поезд, но это не имеет большого значения, потому что он все равно не использует метки.

1 голос
/ 29 марта 2019

Принятый ответ в вопросе, который вы связали, также довольно хорош для вас: вы хотите выполнить классификацию, а не обнаружить структуру (что и делает кластеризация).

DBSCAN, реализованный в scikit-learn, является трансдуктивным алгоритмом, то есть вы не можете делать предсказания для новых данных. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *.

Достаточно сказать, что при использовании алгоритма кластеризации концепция разбиения поезда / теста менее определена. Перекрестная проверка обычно включает другую метрику; например, в K-средних перекрестная проверка часто выполняется по гиперпараметру k, а не по взаимно исключающим подмножествам данных, а оптимизируемая метрика - это дисперсия внутри кластера, а не точность F1 .

Итог: попытка выполнить классификацию с использованием техники кластеризации - это, по сути, квадратный колышек. Если вы действительно этого хотите, вы можете заклинить, но было бы гораздо проще просто использовать готовый классификатор.

...