для чего нужен метод предиката ()?Предполагается ли указывать на ближайший кластер для невидимых данных?
Да, точно.
тогда как вы будете обрабатывать новую точку данных, если выполняете меру уменьшения размерностинапример SVD?
Вы применяете тот же метод уменьшения размерности к невидимым данным, прежде чем передать их в .predict()
.Вот типичный рабочий процесс:
# prerequisites:
# x_train: training data
# x_test: "unseen" testing data
# km: initialized `KMeans()` instance
# dr: initialized dimensionality reduction instance (such as `TruncatedSVD()`)
# fitting
x_dr = dr.fit_transform(x_train)
y = km.fit_predict(x_dr)
# ...
# working with unseen data (models have been fitted before)
x_dr = dr.transform(x_test)
y = km.predict(x_dr)
# ...
На самом деле такие методы, как fit_transform
и fit_predict
, существуют для удобства.y = km.fit_predict(x)
эквивалентно y = km.fit(x).predict(x)
.
Я думаю, что будет проще увидеть, что происходит, если мы напишем подходящую часть следующим образом:
# fitting
dr.fit(x_train)
x_dr = dr.transform(x_train)
km.fit(x_dr)
y = km.predict(x_dr)
За исключением вызова .fit()
модели используются одинаково во время подгонки и с невидимыми данными.
Резюме:
- Цель
.fit()
состоит в том, чтобы обучить модель с данными. - Цель
.predict()
или .transform()
- применить обученную модель к данным. - Если вы хотите подогнать модель и применить ее к тем же данным во время обучения, есть
.fit_predict()
или .fit_transform()
для удобства. - При объединении в цепочку нескольких моделей (таких как уменьшение размерности и кластеризация) применяйте их в том же порядке во время подгонки и тестирования.