содержание
- набор данных
-
Доступные наборы данных
-
набор данных sklearn
-
- Извлечение признаков
-
Словарь
-
текст
-
- Предварительная обработка функций
- Безразмерность
- Нормализованный
- стандартизация
- Безразмерность
- Характеристика
-
Выбор функции
-
Анализ основных компонентов (уменьшение размеров PCA)
-
набор данных
Вот несколько примеров того, что считается набором данных:
-
Таблица или файл CSV с некоторыми данными
-
Организованная коллекция столов
-
Файл в собственном формате, содержащий данные
-
Набор файлов, которые вместе образуют значимый набор данных
-
Структурированные объекты, содержащие данные в других форматах, которые вы можете захотеть загрузить в специальные инструменты для обработки
-
изображение захваченных данных
-
Документы, связанные с машинным обучением, такие как обученные параметры или определения структуры нейронной сети.
-
все, что похоже на набор данных
sklearn — очень мощная библиотека машинного обучения, предоставляемая третьей стороной на Python, которая охватывает все аспекты от предварительной обработки данных до моделей обучения. Использование scikit-learn в реальном бою может значительно сэкономить нам время на написание кода и уменьшить объем нашего кода, чтобы у нас было больше энергии для анализа распределения данных, настройки модели и изменения гиперпараметров. (sklearn — это имя пакета)
Извлечение признаков
Цель
-
Использование DictVectorizer для реализации числовых и дискретных характеристик категорий
-
Используйте CountVectorizer для количественной оценки текстовых функций
-
Используйте TfidfVectorizer для количественной оценки текстовых функций
-
Расскажите о разнице между двумя методами выделения текстовых признаков
определение
Извлечение признаков заключается в任意数据
(например, текст или изображения)转换为可用于机器学习的数字特征
Примечание. Собственное значение предназначено для того, чтобы компьютер лучше понимал данные.
-
字典特征提取(特征离散化)
-
文本特征提取
-
图像特征提取(深度学习)
API извлечения функций
sklearn.feature_extraction
Извлечение функций словаря
эффект:对字典数据进行特征值化
- sklearn.feature_extraction.DictVectorizer(sparse=True,…)
- DictVectorizer.fit_transform(X) X: словарь или итератор, содержащий словарь, возвращаемое значение: возврат разреженной матрицы
- DictVectorizer.inverse_transform(X) X: массив массив или разреженная матрица Возвращаемое значение: формат данных до преобразования
- DictVectorizer.get_feature_names() возвращает имена категорий
применение
Выполните извлечение признаков для следующих данных
data = [{'city': '北京', 'temperature': 100}, {'city': '上海', 'temperature': 60}, {'city': '深圳', 'temperature': 30}]
Анализ процесса
-
Создать экземпляр класса DictVectorizer
-
Вызовите метод fit_transform для ввода данных и преобразования (обратите внимание на формат возврата).
def dict_demo():
"""
字典特征值提取
:return:
"""
data = [{'city': '北京', 'temperature': 100}, {'city': '上海', 'temperature': 60}, {'city': '深圳', 'temperature': 30}]
# 1. 实例化一个转换器 默认返回 sparse矩阵 将非0值按位置表示出来 以节省内存 提高加载效率
transfer = DictVectorizer(sparse=False)
# 应用场景:数据集中类别特征值较多;将数据集的特征-》字典类型;DictVectorizer转换;本身拿到的就是字典
# 2. 调用fit_transform()
data_new = transfer.fit_transform(data)
print("data_new:\n", data_new)
print("特征名字:\n", transfer.get_feature_names())
return None
Обратите внимание на результат без добавленного параметра sparse=False.
Этот результат не то, что вы хотите видеть, поэтому добавьте параметры, чтобы получить желаемый результат, здесь мы называем эту технику обработки данных профессиональным названием"one-hot
"кодирование.
Суммировать
Горячее кодирование будет выполняться для функций с информацией о категории.
Извлечение текстовых признаков
作用
: Собственное значение текстовых данных
-
sklearn.feature_extraction.text.CountVectorizer(stop_words=[])
- Матрица частоты возвращаемых слов
-
CountVectorizer.fit_transform(X) X: текст или итерируемый объект, содержащий текстовые строки Возвращаемое значение: возвращает разреженную матрицу
-
CountVectorizer.inverse_transform(X) X: массив массив или разреженная матрица Возвращаемое значение: формат данных до преобразования
-
CountVectorizer.get_feature_names() возвращаемое значение: список слов
-
sklearn.feature_extraction.text.TfidfVectorizer
применение
Выполните извлечение признаков для следующих данных
data = ["life is short, i like python", "life is too long i dislike python"]
Анализ процесса
-
Создать экземпляр класса CountVectorizer
-
Вызовите метод fit_transform для ввода данных и преобразования (обратите внимание на формат возврата, используйте toarray() для массива массива преобразования разреженных матриц)
def count_demo():
"""
文本特征值抽取
:return:
"""
data = ["life is short, i like python", "life is too long i dislike python"]
# 1、实例化一个转换器类
transfer = CountVectorizer()
# 演示停用词
# transfer = CountVectorizer(stop_words=["is", "too"])
data_new = transfer.fit_transform(data)
print("data_new:\n", data_new.toarray())
print("特征名字:\n", transfer.get_feature_names())
# 2、调用fit_transform
return None
Вопрос: А если заменить данные на китайский?
Выяснилось, что английский по умолчанию разделяется пробелами. Фактически, достигнут эффект сегментации слов, поэтому нам нужно выполнить обработку сегментации слов на китайском языке.
В следующем коде необходимо заранее сделать пробелы в тексте.
def count_chinese_demo():
"""
中文文本特征值抽取
:return:
"""
data = ["我 爱 北京 天安门", "天安门 上 太阳 升"]
data2 = ["我爱北京天安门", "天安门上太阳升"]
# 1、实例化一个转换器类
transfer = CountVectorizer()
data_new = transfer.fit_transform(data)
print("data_new:\n", data_new.toarray())
print("特征名字:\n", transfer.get_feature_names())
# 2、调用fit_transform
return None
Смотрите ниже для лучшего решения
Сегментация слова цзеба
- jieba.cut()
- Возвращает генератор слов
Необходимо установить библиотеку jieba
pip install jieba
анализ случая
data = ["在过去两个月里,我和60多位小伙伴进行了1对1的一小时沟通;",
"TA绝大多数是想要尝试副业变现的朋友。",
"从一线城市到三线城市,从宝妈到职场人,从职场到体制内。"]
анализировать
-
Подготовьте предложения и используйте jieba.cut для сегментации слов.
-
Создать экземпляр CountVectorizer
-
Превратите результат сегментации слов в строку в качестве входного значения fit_transform.
def count_word(text):
"""
进行中文分词 我爱北京天安门-》我 爱 北京 天安门
:param text:
:return:
"""
a = " ".join(list(jieba.cut(text)))
print(a)
return a
def count_chinese_demo2():
"""
中文文本特征值抽取 自动分词
:return:
"""
data = ["在过去两个月里,我和60多位小伙伴进行了1对1的一小时沟通;",
"TA绝大多数是想要尝试副业变现的朋友。",
"从一线城市到三线城市,从宝妈到职场人,从职场到体制内。"]
# 1、实例化一个转换器类
transfer = CountVectorizer(stop_words=["从宝妈"])
data_new = transfer.fit_transform(count_word(item) for item in data)
print("data_new:\n", data_new.toarray())
print("特征名字:\n", transfer.get_feature_names())
# 2、调用fit_transform
return None
Вопрос. Что делать, если слово или фраза часто встречается в нескольких статьях?
Извлечение текстовых признаков Tf-idf
Основная идея TF-IDF заключается в следующем: если слово или фраза имеет высокую вероятность появления в статье и редко встречается в других статьях, считается, что слово или фраза имеет хорошую способность различать категории и является пригодные для использования.Классификация.
Роль TF-IDF: используется для оценки важности слова для набора документов или документа в корпусе.
формула
Частота термина (tf) относится к частоте, с которой данное слово появляется в документе.
Частота обратного документа (idf) — это мера универсальной важности слова. IDF определенного слова можно разделить на общее количество документов, содержащих это слово. Количество файлов, а затем возьмем логарифм по основанию 10 от полученного частного, чтобы получить
Конечный результат можно понимать как степень важности.
Примечание. Если общее количество слов в документе равно 100, а слово «очень» встречается 5 раз, то частота слова «очень» в документе составляет 5/100 = 0,05. Частота документов (IDF) рассчитывается путем деления общего количества документов в наборе документов на количество документов, в которых встречается слово «очень». Итак, если слово «очень» встречается в 1000 документов, а общее количество документов равно 10 000 000, частота обратного документа равна lg(10 000 000 / 1 0000) = 3. Окончательная оценка «очень» для tf-idf этого документа составляет 0,05 * 3 = 0,15.
кейс
def tfidf_demo():
"""
用TF-IDF方法进行文本特征值抽取
:return:
"""
data = ["在过去两个月里,我和60多位小伙伴进行了1对1的一小时沟通;",
"TA绝大多数是想要尝试副业变现的朋友。",
"从一线城市到三线城市,从宝妈到职场人,从职场到体制内。"]
transfer = TfidfVectorizer(stop_words=["从宝妈"])
data_new = transfer.fit_transform(count_word(item) for item in data)
print("data_new:\n", data_new.toarray())
print("特征名字:\n", transfer.get_feature_names())
return None
Важность Tf-idf
Алгоритм классификационного машинного обучения для классификации статей на ранней стадии обработки данных
Предварительная обработка функций
Цель
-
Понимать характеристики числовых данных и категорийных данных
-
Используйте MinMaxScaler для нормализации данных объектов.
-
Стандартизация данных объектов с использованием StandardScaler
Что такое предварительная обработка признаков
Предварительная обработка признаков:Процесс преобразования данных объектов в данные объектов, более подходящие для модели алгоритма, с помощью некоторых функций преобразования.
Это можно понять из приведенной выше картинки
Включено
Безразмерность числовых данных:
-
Нормализованный
-
стандартизация
API предварительной обработки функций
sklearn.preprocessing
Почему мы хотим нормализовать/нормализовать?
Единицы или размеры признаков сильно различаются, или дисперсия признака на несколько порядков больше, чем у других признаков, что легко влияет (доминирует) на целевой результат, делая невозможным для некоторых алгоритмов изучение других признаков.
Нам нужно использовать некоторые методы безразмерного преобразования, чтобы преобразовать данные разных спецификаций в одну и ту же спецификацию.
Нормализованный
определение
Сопоставьте данные с (по умолчанию [0,1]), преобразовав исходные данные
формула
Воздействуя на каждый столбец, max — это максимальное значение столбца, min — минимальное значение столбца, затем X'' — конечный результат, mx, mi — указанные значения интервала соответственно. По умолчанию mx равно 1 и mi равно 0.
API
- sklearn.preprocessing.MinMaxScaler (feature_range = (0,1)…)
-
MinMaxScalar.fit_transform(X)
- X: данные в формате массива numpy [n_samples, n_features]
-
Возвращаемое значение: преобразованный массив той же формы
-
расчет данных
Мы оперируем следующими данными в файле date.txt. Сохраняются данные объекта предыдущей даты.
milage,Liters,Consumtime,target
40920,8.326976,0.953952,3
14488,7.153469,1.673904,2
26052,1.441871,0.805124,1
75136,13.147394,0.428964,1
38344,1.669788,0.134296,1
анализировать
-
Создание экземпляра MinMaxScalar
-
Преобразование через fit_transform
def minmax_demo():
"""
归一化
:return:
"""
# 1、获取数据
data = pd.read_csv("dating.txt")
data = data.iloc[:, :3]
print(data)
# 2、实例化一个转换器类
transform = MinMaxScaler()
# transform = MinMaxScaler(feature_range=[2, 3])
# 3、调用fit_transform
data_new = transform.fit_transform(data)
print("data_new:\n", data_new)
return None
Нормализованное резюме
Обратите внимание, что максимальное и минимальное значения различаются.Кроме того, на максимальное и минимальное значения легко влияют выбросы, поэтому этот метод имеет низкую надежность и подходит только для традиционных точных сценариев с небольшими данными.
стандартизация
определение
Преобразуйте данные, чтобы иметь среднее значение 0 и стандартное отклонение 1 путем преобразования исходных данных.
формула
Действуя на каждый столбец, среднее значение — это среднее значение, σ — стандартное отклонение.
Итак, вернемся к точке исключения, давайте еще раз посмотрим на стандартизацию.
-
Для нормализации: если есть выбросы, которые влияют на максимальное и минимальное значения, результаты, очевидно, изменятся.
-
Для стандартизации: если есть аномальные точки, из-за определенного количества данных небольшое количество аномальных точек
-
Влияние на среднее значение невелико, поэтому дисперсия меняется меньше.
API
- sklearn.preprocessing.StandardScaler( )
- После обработки для каждого столбца все данные группируются вокруг среднего значения 0, а стандартное отклонение равно 1.
- StandardScaler.fit_transform(X)
- X: данные в формате массива numpy [n_samples, n_features]
- Возвращаемое значение: преобразованный массив той же формы
расчет данных
Сделайте то же самое с приведенными выше данными.
[[90,2,10,40],
[60,4,15,45],
[75,3,13,46]]
анализировать
-
Создание экземпляра StandardScaler
-
Преобразование через fit_transform
def stand_demo():
"""
进行标准化
在已有样本足够多的情况下,适合现在嘈杂大数据场景
:return:
"""
# 1、获取数据
data = pd.read_csv("dating.txt")
data = data.iloc[:, :3]
print(data)
# 2、实例化一个转换器类
transform = StandardScaler()
# 3、调用fit_transform
data_new = transform.fit_transform(data)
print("data_new:\n", data_new)
return None
Стандартизированное резюме
Он относительно стабилен при наличии достаточного количества выборок и подходит для современных сценариев больших данных с большим количеством помех.
Уменьшение размерности признаков
Цель
-
Знать три способа встраивания, фильтрации и переноса выбора функций.
-
Примените 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