Машинное обучение — уменьшение размерности признаков

машинное обучение

Уменьшение размерности признаков

Цель

  • Знать три способа встраивания, фильтрации и переноса выбора функций.

  • Примените VarianceThreshold, чтобы удалить функции с низкой дисперсией

  • Понимать характеристики и расчет коэффициента корреляции

  • Выбор признаков с использованием коэффициентов корреляции

Снижение размерности

Снижение размерности относится к процессу уменьшения количества случайных переменных (признаков) при определенных ограниченных условиях для получения набора «некоррелированных» основных переменных.

  • уменьшить количество случайных величин

  • Коррелированные признаки: корреляция между относительной влажностью и количеством осадков и т. д.

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

Два способа уменьшения размерности

  • Выбор функций

  • Анализ основных компонентов (может понять способ извлечения признаков)

Выбор функций

Что такое выбор функций

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

метод:

  • Фильтр (тип фильтра): в основном исследует характеристики самой функции, взаимосвязь между функцией и функцией и целевое значение.

    • Метод выбора дисперсии: фильтрация признаков с низкой дисперсией
    • Коэффициент корреляции
  • Встроенный: алгоритм автоматически выбирает функции (связи между функциями и целевыми значениями).

    • Дерево решений: информационная энтропия, прирост информации
    • Регуляризация: L1, L2
    • Глубокое обучение: свертки и многое другое
  • Обертка

модуль

sklearn.feature_selection

фильтр

Фильтрация объектов с низкой дисперсией

Удалите некоторые признаки низкой дисперсии, значение дисперсии упоминалось ранее. В сочетании с размером дисперсии рассматривается угол этого метода.

  • Небольшая дисперсия признаков: большинство образцов признака имеют схожие значения.

  • Большая дисперсия признака: значения многих образцов признака различны

API

  • sklearn.feature_selection.VarianceThreshold(threshold = 0.0)
    • Удалить все функции с низкой дисперсией
    • Variance.fit_transform(X)
      • X: данные в формате массива numpy [n_samples, n_features]
      • Возвращаемое значение: функции с дисперсией тренировочного набора ниже порогового значения будут удалены. По умолчанию сохраняются все функции с ненулевой дисперсией, т. е. удаляются функции с одинаковым значением во всех выборках.

расчет данных

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

Все эти функции

pe_ratio,pb_ratio,market_cap,return_on_asset_net_profit,du_return_on_equity,ev,earnings_per_share,revenue,total_expense
index,pe_ratio,pb_ratio,market_cap,return_on_asset_net_profit,du_return_on_equity,ev,earnings_per_share,revenue,total_expense,date,return
0,000001.XSHE,5.9572,1.1818,85252550922.0,0.8008,14.9403,1211444855670.0,2.01,20701401000.0,10882540000.0,2012-01-31,0.027657228229937388
1,000002.XSHE,7.0289,1.588,84113358168.0,1.6463,7.8656,300252061695.0,0.326,29308369223.2,23783476901.2,2012-01-31,0.08235182370820669
2,000008.XSHE,-262.7461,7.0003,517045520.0,-0.5678,-0.5943,770517752.56,-0.006,11679829.03,12030080.04,2012-01-31,0.09978900335112327
3,000060.XSHE,16.476,3.7146,19680455995.0,5.6036,14.617,28009159184.6,0.35,9189386877.65,7935542726.05,2012-01-31,0.12159482758620697
4,000069.XSHE,12.5878,2.5616,41727214853.0,2.8729,10.9097,81247380359.0,0.271,8951453490.28,7091397989.13,2012-01-31,-0.0026808154146886697
def variance_demo():
    """
    过滤低方差特征
    :return:
    """
    # 1、获取数据
    data = pd.read_csv("factor_returns.csv")
    data = data.iloc[:, 1: -2]
    print(data)

    # 2、实例化一个转换器
    transfer = VarianceThreshold(threshold=5)

    # 3、调用fit_transform
    data_new = transfer.fit_transform(data)
    print("data_new", data_new, data_new.shape)
    return None


if __name__ == '__main__':
    # 低方差特征过滤
    variance_demo()

Коэффициент корреляции

Коэффициент корреляции Пирсона: Статистический показатель, отражающий тесноту корреляции между переменными.

Дело расчета формулы (понять, запоминать не надо)

формула:

Например, мы рассчитываем годовые инвестиции в рекламу и среднемесячный объем продаж.

= 0.9942

Итак, мы наконец пришли к выводу, что существует высокая положительная корреляция между расходами на рекламу и среднемесячными продажами.​

Функции

Значение коэффициента корреляции находится в пределах от –1 до +1, т.е. –1≤r≤+1. Его свойства следующие:

  • Когда r>0, это означает, что две переменные имеют положительную корреляцию, а когда r

  • Когда |r|=1, это означает, что две переменные полностью коррелированы; когда r=0, это означает, что между двумя переменными нет корреляции.

  • Когда 0<|r| |r|>

В целом его можно разделить на три уровня: |r|

Это обозначение: |r| — абсолютное значение r, |-5|=5

API

from scipy.stats import pearsonr
x : (N,) array_like
y : (N,) array_like Returns: (Pearson’s correlation coefficient, p-value)

Анализ главных компонентов

Цель

  • Уменьшение размерности признаков с помощью PCA

  • Применение: анализ основных компонентов между пользователями и категориями элементов

Что такое анализ главных компонентов (PCA)

определение: процесс преобразования многомерных данных в низкоразмерные, в ходе которого исходные данные могут быть отброшены и могут быть созданы новые переменные.

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

применение: В регрессионном анализе или кластерном анализе

Так как насчет лучшего понимания этого процесса? Давайте посмотрим на картинку

API

  • sklearn.decomposition.PCA(n_components=None)
    • Разложить данные на пространства меньшего размера
    • n_components:
      • Десятичный: указывает, сколько информации нужно сохранить.
      • Целое число: сколько признаков нужно свести к
    • PCA.fit_transform(X) X: данные в формате массива numpy [n_samples, n_features]
    • Возвращаемое значение: массив указанного измерения после преобразования

расчет данных

[[2,8,4,5],
[6,3,0,8],
[5,4,9,1]]
def pca():
    """
    主成分分析进行降维
    :return:
    """
    # 信息保留70%
    pca = PCA(n_components=0.7)
    data = pca.fit_transform([[2, 8, 4, 5], [6, 3, 0, 8], [5, 4, 9, 1]])
    print(data)

    return None

Кейс: Изучение пользовательских предпочтений для сегментации категорий элементов и уменьшения размерности

данные

  • order_products__prior.csv: информация о заказе и продукте

    • Поля: order_id, product_id, add_to_cart_order, переупорядочен
  • products.csv: информация о продукте

    • Поля: product_id, product_name, aisle_id, Department_id
  • orders.csv: информация о заказе пользователя

    • Поля: order_id, user_id, eval_set, order_number, ….
  • aisles.csv: конкретная категория предметов, к которой принадлежит предмет.

    • Поля: aisle_id, проход

анализировать

  • Объедините таблицы, чтобы user_id и проход были в одной таблице

  • выполнить кросс-табличное преобразование

  • уменьшение размерности

def pca_case_study():
    """
    主成分分析案例
    :return: 
    """
    # 去读四张表的数据
    prior = pd.read_csv("./instacart/order_products__prior.csv")
    products = pd.read_csv("./instacart/products.csv")
    orders = pd.read_csv("./instacart/orders.csv")
    aisles = pd.read_csv("./instacart/aisles.csv")

    print(prior)

    # 合并四张表
    mt = pd.merge(prior, products, on=['product_id', 'product_id'])
    mt1 = pd.merge(mt, orders, on=['order_id', 'order_id'])
    mt2 = pd.merge(mt1, aisles, on=['aisle_id', 'aisle_id'])
    
    # pd.crosstab 统计用户与物品之间的次数关系(统计次数)
    cross = pd.crosstab(mt2['user_id'], mt2['aisle'])

    # PCA进行主成分分析
    pc = PCA(n_components=0.95)
    data_new = pc.fit_transform(cross)
    print("data_new:\n", data_new.shape)

    return None