← документы задачи · mind map ТЗ · роудмап развития

Шпаргалка scikit-learn для задачи 04

Официальная схема выбора алгоритма scikit-learn, перерисованная интерактивно. Нажмите на алгоритм или решение: справа — используется ли он у нас и насколько перспективен для контроля качества денситометрии. Сейчас стенд работает на правилах без scikit-learn, поэтому оценки — про следующую версию с обучением.

classification классификация regression регрессия clustering кластеризация dimensionalityreduction снижение размерности scikit-learn algorithm cheat-sheet

на телефоне схему можно листать вбок

данетне сработало алгоритмвопрос Источник схемы: scikit-learn, BSD
перспективность высокая

Нейросети для снимков (не scikit-learn)

U-Net или лёгкая CNN на PyTorch для сегментации позвонков, подвздошных костей, вертелов и ROI — закрывают Th12, ротацию и поля ROI. Нужна разметка контуров или точек хотя бы на сотне снимков; инференс локально в контейнере укладывается в требования ТЗ.

Что работает сейчас

Правила на numpy: профиль яркости вдоль оси, порог Отсу, скользящая медиана, центры позвонков и угол оси, яркость в углах кадра, поиск очень ярких объектов. Итог по позвоночнику F1 0,45 на обучающем наборе.

перспективность высокая

Рекомендуемый следующий шаг

Признаки, которые уже считает анализ, плюс HistGradientBoostingClassifier и LogisticRegression по типам нарушений с GroupKFold по исследованиям, class_weight и калибровкой вероятностей: даст ROC-AUC и честные ДИ; порог по F1 подбирать на валидации, а не на всех данных.

Все алгоритмы схемы

АлгоритмОбластьКлассы scikit-learnУ насПерспективность для задачи 04
SVC · Ensemble Classifiers
SVM с ядром и ансамбли
классификация SVC(kernel='rbf')
RandomForestClassifier
HistGradientBoostingClassifier
Нет. высокая
Лучший кандидат для версии с обучением: бустинг и лес работают на сотнях примеров, ловят нелинейность (охват зависит от угла и ширины кадра), дают вероятности для ROC-AUC и важность признаков для объяснения. Отдельная модель на каждый тип нарушения, class_weight, валидация GroupKFold по исследованиям, бутстреп ДИ.
KMeans
k-средних
кластеризация KMeans Нет. Кость от мягких тканей отделяет порог Отсу по гистограмме. средняя
Два применения: KMeans по яркости пикселей как замена порогу Отсу для кости, и группировка снимков по признакам — найти нетипичные кадры, другой аппарат или протокол для отказа «не DXA».
Linear SVC
Линейный SVM
классификация LinearSVC
LogisticRegression
Нет. Сейчас класс выносят пороги на признаках: угол оси, яркость подвздошных углов, число ярких пикселей. средняя
Хороший первый шаг на наших признаках снимка вместо ручных порогов: подбирает веса по экспертным меткам. LogisticRegression из той же ветки сразу даёт вероятность — это ROC-AUC из ТЗ. Нужны class_weight='balanced' (32 нарушения из 99) и разбиение по исследованиям.
Randomized PCA
PCA (рандомизированный)
снижение размерности PCA(svd_solver='randomized') Нет. средняя
PCA по уменьшенным снимкам 64×64 даёт карту набора и простой детектор аномалий: кадр далеко от облака DXA — кандидат в отказ «не денситометрия». Компоненты можно добавить в признаки классификатора.
SVR(kernel='rbf') · EnsembleRegressors
SVR с ядром и ансамбли регрессоров
регрессия SVR(kernel='rbf')
GradientBoostingRegressor
RandomForestRegressor
Нет. средняя
Перспективно для координат ориентиров — верх Th12, малый вертел, края ROI бедра — по дескрипторам профилей, если организатор или команда разметят точки хотя бы на сотне снимков. Тогда закроются «охват сверху» и ротация бедра.
Spectral Clustering · GMM
Спектральная кластеризация и GMM
кластеризация GaussianMixture
SpectralClustering
Нет. средняя
GaussianMixture на гистограмме яркости даёт мягкий порог кость/фон с вероятностью — устойчивее Отсу на тёмных кадрах и помогает оценке уверенности. Спектральная кластеризация здесь избыточна.
ElasticNet · Lasso
ElasticNet и Lasso
регрессия Lasso
ElasticNet
Нет. низкая
Регрессия как таковая нам почти не нужна; L1 полезна для отбора признаков перед классификатором — но то же даёт LogisticRegression(penalty='l1').
Isomap · Spectral Embedding
Isomap и спектральное вложение
снижение размерности Isomap
SpectralEmbedding
Нет. низкая
Красивая картинка набора для презентации, но на 252 снимках выигрыша над PCA для решения не даст.
KNeighbors Classifier
k ближайших соседей
классификация KNeighborsClassifier Нет. низкая
На 99 исследованиях с дисбалансом голосование соседей неустойчиво и чувствительно к масштабу признаков. Плюс — объяснение «похоже на исследования N» для врача, но это можно получить и без классификатора.
LLE
Локально-линейное вложение
снижение размерности LocallyLinearEmbedding Нет. низкая
То же, что Isomap, и чувствительнее к шуму.
MeanShift · VBGMM
MeanShift и вариационная GMM
кластеризация MeanShift
BayesianGaussianMixture
Нет. низкая
Можно сегментировать яркостные области без числа кластеров, но области снимка DXA известны заранее, а MeanShift медленный на пикселях.
Naive Bayes
Наивный Байес
классификация GaussianNB
MultinomialNB
Нет. низкая
Наши признаки сильно связаны (угол, положение оси, яркость краёв), предположение независимости ломается. Годится разве что как контрольный базис.
RidgeRegression · SVR(kernel='linear')
Ridge и линейный SVR
регрессия Ridge
SVR(kernel='linear')
Нет. низкая
Могла бы предсказывать, например, поправку положения Th12 по профилю яркости, но без разметки точек учить не на чем; геометрия нагляднее.
MiniBatch KMeans
MiniBatch k-средних
кластеризация MiniBatchKMeans Нет. не нужна
Для пикселей одного снимка и сотен снимков хватает обычного KMeans.
SGD Classifier
Классификатор на SGD
классификация SGDClassifier Нет. не нужна
Данных в тысячи раз меньше порога этой ветки; обычные LinearSVC и LogisticRegression решат то же точнее.
SGD Regressor
Регрессор на SGD
регрессия SGDRegressor Нет. не нужна
Не наш масштаб данных.
kernel approximation
Аппроксимация ядра
классификация Nystroem
RBFSampler
Нет. не нужна
Нужна, когда SVC с ядром не помещается в память; на 252 снимках SVC считается напрямую.
kernel approximation
Аппроксимация ядра
снижение размерности Nystroem
RBFSampler
Нет. не нужна
Не наш масштаб данных.