1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/aBugsLife-CARS

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 6.5 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 30.11.2024 18:56 2fdcf82

Алгоритм CARS

CARS (competitive adapative reweighted sampling) — это метод выбора переменных признаков, который объединяет метод Монте-Карло и модель PLS регрессии. Он имитирует принцип «выживает сильнейший» из теории Дарвина (Li et al., 2009). В алгоритме CARS каждый раз с помощью адаптивного перевзвешивания выборки (ARS) сохраняются точки с более высокими абсолютными значениями коэффициентов регрессии модели PLS в качестве нового подмножества. Точки с меньшими весами исключаются, а затем на основе нового подмножества строится модель PLS. После многократных вычислений выбирается подмножество с наименьшей среднеквадратичной ошибкой перекрестной проверки (RMSECV) в качестве набора характеристических длин волн.

Конкретный процесс алгоритма CARS:

  1. Используя метод Монте-Карло, случайным образом выбирают определённое количество образцов (обычно 80%) из корректирующего набора для построения модели. Оставшиеся 20% используются в качестве прогнозирующего набора для создания модели PLS. Необходимо заранее определить количество выборок N. Записываются абсолютные значения коэффициентов регрессии каждой выборки, где $|b_i|$ — абсолютное значение коэффициента регрессии i-й переменной, $w_i$ — вес абсолютного значения коэффициента регрессии i-й переменной. $$ w_i=|b_i|/\sum_{i=1}^m|b_i|, $$ где m — количество оставшихся переменных в каждой выборке.
  2. С помощью экспоненциально убывающей функции (EDF) принудительно удаляются длины волн с относительно небольшими абсолютными значениями весов коэффициентов регрессии. Для i-го раза, когда модель PLS строится на основе MC выборки, доля сохранённых точек длины волны $R_i$ определяется как $$ R_i=\mu e^{-k_i}, $$ где $\mu$ и k — константы, которые можно вычислить следующим образом:
    • В случае, когда все длины волн участвуют в анализе моделирования после одной выборки, доля сохраняемых точек длины волны равна 1.
    • Когда после последней выборки (N-я выборка) остаются только две длины волны для моделирования PLS, доля сохраняемых точек длины волны составляет $2/n$, где n — исходное количество точек длины волны. Из этих двух случаев можно сделать вывод, что формулы для вычисления $\mu$ и k следующие: $$ \mu=(\cfrac{n}{2})^{\cfrac{1}{N-1}},k=\cfrac{ln(\cfrac{n}{n})}{N-1}. $$
  3. На каждом этапе выборки выбираются длины волн, соответствующие доле $R_i * n$, с использованием адаптивного перевзвешенного отбора выборки (ARS), и строится модель PLS для расчёта RMSECV.
  4. После завершения N выборок алгоритм CARS получает N групп кандидатов характеристических подмножеств длин волн и соответствующих значений RMSECV, и выбирается подмножество, соответствующее наименьшему значению RMSECV, в качестве характеристической длины волны.

Быстрое использование

  1. Предупреждение: если у вас слабые навыки программирования и недостаточное понимание Python, не рекомендуется использовать код этого проекта. Код проекта не был тщательно протестирован и не может гарантировать универсальность. Если вы внесли структурные изменения в проект, обязательно сообщите мне об этом для синхронизации изменений.

  2. Чтение данных:

# Импорт pandas для чтения данных
import pandas as pd
import numpy as np

# Чтение данных
data = pd.read_csv("./data/peach_spectra_brix.csv")
  1. Обработка данных:
# m * n
print("Форма матрицы данных data.shape:", data.shape)

# 50 образцов, 600 длин волн, первый столбец — значения степени зрелости персика, необходимо отделить
X = data.values[:, 1:]
# Эквивалентная операция
# X = data.drop(['Brix'], axis=1)

y = data.values[:, 0]
# Эквивалентная операция
# y = data.loc[:,'Brix'].values

print(f"X.shape:{X.shape}, y.shape:{y.shape}")
  1. Импорт инструментов:
import CARS
  1. Моделирование и отбор:
lis = CARS.CARS_Cloud(X, y)
print("Количество длин волн:", len(lis))
print(lis)
  1. Экспорт данных:
X_ = X[:, lis]

Примечание: CARS имеет случайный характер, рекомендуется запустить пять раз, чтобы выбрать наилучшее значение RMSEC и количество длин волн.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/aBugsLife-CARS.git
git@api.gitlife.ru:oschina-mirror/aBugsLife-CARS.git
oschina-mirror
aBugsLife-CARS
aBugsLife-CARS
master