Уменьшение размерности признаков
Цель
-
Знать три способа встраивания, фильтрации и переноса выбора функций.
-
Примените 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| — абсолютное значение 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