Заметки о машинном обучении Python
На основе видеоруководства «3-Day Quick Start Python Machine Learning [Dark Horse Programmer]» на станции B адрес видео выглядит следующим образом:
Обзор машинного обучения
1.1 Обзор искусственного интеллекта
1.1.1 Связь между машинным обучением, искусственным интеллектом и глубоким обучением
-
Связь между машинным обучением, искусственным интеллектом и глубоким обучением
- Машинное обучение — это подход к искусственному интеллекту
- Глубокое обучение — это метод, разработанный на основе машинного обучения.
-
Дартмутские конференции — начало искусственного интеллекта
В 1956 году несколько ученых-компьютерщиков встретились на Дартмутской конференции и придумали концепцию «искусственного интеллекта».
1.1.2 Что могут машинное обучение и глубокое обучение?
Существует множество сценариев применения машинного обучения, которые, можно сказать, проникают во все сферы жизни. Различные сценарии в медицине, авиации, образовании, логистике, электронной коммерции и т. д.
- Используется в области майнинга и прогнозирования:
- Сценарии применения: прогноз продаж магазина, количественные инвестиции, рекомендации по рекламе, классификация корпоративных пользователей...
- Используется в поле изображения:
- Сценарии применения: обнаружение дорожных знаков, распознавание лиц и т. д.
- Используется в области самонагревающейся обработки языка:
- Сценарии применения: классификация текста, анализ настроений, автоматический чат, определение текста и т.д.
В настоящее время важно освоить некоторые навыки, такие как алгоритмы машинного обучения и решать задачи из определенной отрасли.
1.2 Что такое машинное обучение
1.2.1 Определения
Машинное обучение: это автоматический анализ модели на основе данных и использование модели для прогнозирования неизвестных данных.
1.2.2 Состав набора данных
- Структура: собственное значение + целевое значение
Примечания:
- Для каждой строки данных мы вызываемобразец.
- Некоторые данные могут не иметь целевого значения:
1.3 Классификация алгоритмов машинного обучения
1.3.1 Контролируемое обучение
-
Проблема классификации: есть целевое значение, и оценивается категория
-
Проблема регрессии: с целевым значением, непрерывными данными
1.3.2 Обучение без учителя
- Неконтролируемое обучение: нет целевого значения
1.4 Процесс разработки машинного обучения
Процесс разработки машинного обучения:
- получить данные
- обработка данных
- разработка функций
- Обучение алгоритму машинного обучения — модель
- Оценка модели
- применение
1.5 Структура обучения и введение в материалы
Несколько моментов для ясности:
- Алгоритмы — это ядро, данные и вычисления — это основа
- определить местоположение
Большинство алгоритмов создаются инженерами-разработчиками проприетарных алгоритмов, и нам нужно только:
- Анализировать большое количество данных
- Проанализируйте конкретный бизнес
- Применяйте общие алгоритмы
- Разработка функций, настройка, оптимизация
Библиотеки и платформы машинного обучения:
Два инженерных решения
2.1 Набор данных
- Цель:
- Знайте, что набор данных разделен на обучающий набор и тестовый набор
- Будет использовать набор данных sklearn
- применение:
- никто
2.1.1 Доступные наборы данных
URL-адрес Kaggle:www.kaggle.com/
URL набора данных UCI:archive.ics.uci.edu/ml
URL-адрес scikit-learn:SCI kit-learn.org/stable/data…
1. Введение в инструменты Scikit-learn
- Инструменты машинного обучения в Python
- Scikit-learn включает реализации многих известных алгоритмов машинного обучения.
- Полная документация Scikit-learn, простой в использовании, богатый API
- Последняя стабильная версия 0.24
2. Установка
conda install -c conda-forge scikit-learn
3. Что содержит Scikit-learn
2.1.2 набор данных sklearn
1. Введение в API набора данных scikit-learn
- sklearn.datasets
- Загрузите, чтобы получить популярные наборы данных
- datasets.load_*()
- Получите небольшие наборы данных, данные включены в наборы данных
- datasets.fetch_*(data_home=None)
- Чтобы получить масштабный набор данных, вам необходимо загрузить его из сети.Первый параметр функции — data_home, который представляет собой каталог, в который загружается набор данных.
2. набор данных sklearn возвращается
- Типы данных, возвращаемые загрузкой и выборкой datasets.base.Bunch (формат словаря)
def datasets_demo():
"""
sklearn数据集使用
:return:
"""
# 获取数据
iris = load_iris()
print("鸢尾花数据集:\n", iris)
print("查看数据描述:\n", iris["DESCR"])
print("查看特征值的名字:\n", iris.feature_names)
print("查看特征值:\n", iris.data, iris.data.shape)
return None
2.1.3 Разделение набора данных
Общий набор данных машинного обучения будет разделен на две части: [Структура набора данных: значение функции и целевое значение]
- данные обучения: используются для обучения,Построить модель
- Тестовые данные: используются во время тестирования модели, дляОцените, действительна ли модель
Коэффициент деления:
- Тренировочный набор: 70% 80% 90%
- Тестовый набор: 30% 20% 10%
API раздела набора данных
- sklearn.model_selection.train_test_split(arrys,*options)
def datasets_demo():
"""
sklearn数据集使用
:return:
"""
# 获取数据
iris = load_iris()
print("鸢尾花数据集:\n", iris)
print("查看数据描述:\n", iris["DESCR"])
print("查看特征值的名字:\n", iris.feature_names)
print("查看特征值:\n", iris.data, iris.data.shape)
# 数据集划分
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=22)
print("训练集的特征值:\n", x_train, x_train.shape)
return None
2.2 Введение в проектирование признаков
цель обучения:
- Понимать важность проектирования признаков в машинном обучении.
- Знать классификацию фичеинжиниринга
2.2.1 Зачем нужна разработка признаков
Он широко распространен в отрасли: данные и функции определяют запуск машинного обучения, а модели и алгоритмы лишь приближают этот запуск.
2.2.2 Что такое разработка признаков
Разработка признаков — это процесс использования специальных фоновых знаний и навыков для обработки данных, чтобы функции могли играть более важную роль в алгоритмах машинного обучения.
Значение: Непосредственно влияет на эффект машинного обучения.
2.2.3 Сравнение местоположения и обработки данных разработки признаков
- pandas: удобный инструмент для чтения данных и базовой обработки форматов данных
- sklearn: предоставляет мощный интерфейс для обработки функций.
2.3 Извлечение признаков
Цель:
- Использование DictVectorizer для реализации числовых и дискретных характеристик категорий
- Используйте CountVectorizer для количественной оценки текстовых функций
- Используйте TfidfVectorizer для количественной оценки текстовых функций
- Различие между двумя видами извлечения текстовых признаков
2.3.1 Извлечение признаков
1. Преобразование произвольных данных (например, текста или изображений) в числовые характеристики, которые можно использовать для машинного обучения.
Примечание. Собственное значение предназначено для того, чтобы компьютер лучше понимал данные.
- Извлечение признаков словаря (дискретизация признаков)
- Извлечение текстовых признаков
- Извлечение признаков изображения
2. API извлечения признаков
sklearn.feature_extraction
2.3.2 Извлечение признаков словаря
Функция: собственное значение данных словаря
sklearn.feature_extraction.DictVectorizer(...)
кейс:
def dict_demo():
"""
字典特征抽取
:return:
"""
data = [{'city': "北京", 'temperature': 100}, {'city': "上海", 'temperature': 60}, {'city': "深圳", 'temperature': 30}]
# 1.实例化一个转换器
# sparse 表示稀疏矩阵:只返回有值的位置,不返回0值
transfer = DictVectorizer(sparse=False)
# 2.调用fit_transform()
data_new = transfer.fit_transform(data)
print("新数据:\n", data_new)
print("特征名字:\n", transfer.get_feature_names())
return None
Результаты:
2.3.3 Извлечение текстовых признаков
1. Функция: собственное значение текстовых данных
- sklearn.feature_extraction.text.CountVectorizer(stop_words=[]) возвращает матрицу частоты слов
- CountVectorizer.fit_transform(X) X: текст или итерируемый объект, содержащий текстовые строки, разреженная матрица возвращаемого значения.
- CountVectorizer.inverse_transform(X) X: массив массив или разреженная матрица Возвращаемое значение: формат данных до преобразования
- CountVectorizer.get_feature_names() возвращает список слов
def count_demo():
"""
文本特征提取
:return:
"""
data = ["lift is short,i like like python", "lift is long,i dislike python"]
# 1.实例化一个转换器
transfer = CountVectorizer()
# 2.调用fit_transform()
data_new = transfer.fit_transform(data)
print("data_new:\n", data_new.toarray())
print("特征值列表:\n", transfer.get_feature_names())
return None
2. Результаты выполнения
3. Пример извлечения китайского языка, Примечание: поскольку между китайскими словами нет пробела, программа не может распознать отдельное слово, и ей необходимо использовать пробел, а затем будет использоваться токенизатор Здесь выполняется ручная сегментация и проверка первый.
def count_chinese_demo():
"""
中文文本特征提取
:return:
"""
data = ["我 爱 北京 天安门", "天安门 上 太阳 升"]
# 1.实例化一个转换器
transfer = CountVectorizer()
# 2.调用fit_transform()
data_new = transfer.fit_transform(data)
print("data_new:\n", data_new.toarray())
print("特征值列表:\n", transfer.get_feature_names())
return None
4. Извлечение китайского языка: автоматическая сегментация слов с помощью токенизатора jieba.
def count_chinese_demo2():
"""
中文文本特征提取,自动分词
:return:
"""
data = ["所谓的培训讲师,实则为一名感染新冠的个体营销职业人员。就是他,一个人传染了102个人,其中年龄最大的出生于1933年。",
"发布会上,吉林省市场监管部门相关负责人表示,目前两地相关部门已经开展了联合调查,如有违法违规行为将进行严厉处罚。",
"疫情防控大局当下,医护工作者仍然紧裹厚重的防护服,在前线与病毒奋勇厮杀,社区志愿者依旧冒寒风瑟瑟立于居民楼下“站岗守家”,可是竟有人在这个时候,举办“养生培训活动”推销产品,将老年人置于新冠病毒感染的“风口”,虽然打着关爱老年人健康的旗号,却无异于图财致命!"]
# 分词
data_new = []
for item in data:
data_new.append(" ".join(list(jieba.cut(item))))
# 1.实例化一个转换器
transfer = CountVectorizer(stop_words=["102", "1933", "一个"])
# 2.调用fit_transform()
data_final = transfer.fit_transform(data_new)
print("data_new:\n", data_final.toarray())
print("特征值列表:\n", transfer.get_feature_names())
return None
результат операции:
Возникающая проблема: в методе апелляции осуществляется извлечение значения признака статьи, определенное слово встречается много раз, но очень редко встречается в других статьях.
Обходной путь: используйте
TfidfVectorizer
5. Извлечение текстовых признаков Tf-idf
- Основная идея TF-IDF: Если слово или фраза имеет высокую вероятность появления в статье и редко встречается в других статьях, считается, что слово или фраза имеет хорошую способность различать категории и подходит для классификации.
- TF-IDF: используется для оценки важности слова в наборе документов или документе в корпусе.
- TF: частота терминов
- IDF: обратная частота документа
- API: sklearn.feature_extraction.text.TfidfVectorizer()
Случай:
def tfidf_demo():
"""
使用TF-IDF对中文文本特征提取,自动分词
:return:
"""
data = ["所谓的培训讲师,实则为一名感染新冠的个体营销职业人员。就是他,一个人传染了102个人,其中年龄最大的出生于1933年。",
"发布会上,吉林省市场监管部门相关负责人表示,目前两地相关部门已经开展了联合调查,如有违法违规行为将进行严厉处罚。",
"疫情防控大局当下,医护工作者仍然紧裹厚重的防护服,在前线与病毒奋勇厮杀,社区志愿者依旧冒寒风瑟瑟立于居民楼下“站岗守家”,可是竟有人在这个时候,举办“养生培训活动”推销产品,将老年人置于新冠病毒感染的“风口”,虽然打着关爱老年人健康的旗号,却无异于图财致命!"]
# 分词
data_new = []
for item in data:
data_new.append(" ".join(list(jieba.cut(item))))
# 1.实例化一个转换器
transfer = TfidfVectorizer(stop_words=["102", "1933", "一个"])
# 2.调用fit_transform()
data_final = transfer.fit_transform(data_new)
print("data_new:\n", data_final.toarray())
print("特征值列表:\n", transfer.get_feature_names())
return None
результат операции:
2.4 Предварительная обработка признаков
Цель:
- Понимать характеристики числовых данных и категорийных данных
- Используйте MinMaxScaler для нормализации данных объектов.
- Стандартизация данных объектов с использованием StandardScaler
2.4.1 Обзор
Что такое предварительная обработка признаков:
Данные объекта преобразуются в
更加适合算法模型
процесс данных признаков
1. Включите контент
- Нормализованный
- стандартизация
2. API предварительной обработки функций
sklearn.preprocessing
Зачем нужна нормализация?
- Единицы или размеры признаков сильно различаются, или дисперсия признака на несколько порядков больше, чем дисперсия других признаков, что легко влияет (доминирует) на целевой результат, делая невозможным для некоторых алгоритмов изучение других признаков.
2.4.2 Нормализация
1. Определение: при преобразовании исходных данных 3 данных сопоставляются с (значение по умолчанию [0,1])
2. Формула
def minmax_demo():
"""
归一化
:return:
"""
# 1.获取数据
data = pd.read_csv('../data/dating.csv', encoding="gbk")
data = data.iloc[:, 0:8]
# 2.实例化一个转换器
transfer = MinMaxScaler()
# 3.调用fit_transform
data_new = transfer.fit_transform(data)
print("data_new:\n", data_new)
# 4.
return None
результат:
总结:
Когда есть выбросы, то есть максимальное или минимальное значение является выбросом, нормализованное значение является неточным и подходит только для традиционных точных сценариев с небольшими данными.
2.4.3 Стандартизация
1. Определение: путем преобразования исходных данных данные преобразуются в диапазон, где среднее значение равно 0, а стандартное отклонение равно 1.
2. Формула
- Для нормализации: если есть выбросы, которые влияют на максимальное и минимальное значения, результаты, очевидно, изменятся.
- Для стандартизации: если есть аномальные точки, из-за определенного количества данных небольшое количество аномальных точек мало влияет на среднее значение, поэтому дисперсия мало меняется.
3. API
- sklearn.preprocessing.StandardScaler()
4. Расчет данных
Сделайте то же самое с приведенными выше данными.
- анализировать
- Создание экземпляра StandardScaler
- Преобразование через fit_transform
def stand_demo():
"""
标准化
:return:
"""
# 1.获取数据
data = pd.read_csv('../data/dating.csv', encoding="gbk")
data = data.iloc[:, 0:8]
# 2.实例化一个转换器
transfer = StandardScaler()
# 3.调用fit_transform
data_new = transfer.fit_transform(data)
print("data_new:\n", data_new)
return None
Результаты:
Суммировать:
Стандартное отклонение: степень концентрации
Он относительно стабилен при наличии достаточного количества выборок и подходит для современных сценариев больших данных с большим количеством помех.
2.5 Уменьшение размерности признаков
Цель:
- применение
VarianceThreshold
Реализовано для удаления функций с низкой дисперсией- Узнайте о характеристиках и расчетах коэффициента корреляции
- Использование коэффициента корреляции для реализации выбора собственного значения
2.5.1 Снижение размерности
Уменьшение размерности: относится к процессу уменьшения количества случайных переменных (признаков) при определенных ограниченных условиях для получения набора «нерелевантных» основных переменных.
- уменьшить количество случайных величин
- Связанные функции
- Корреляция между относительной влажностью и количеством осадков
- ....
Потому что при обучении мы все используем собственные значения для обучения. Если у самой функции есть проблемы или корреляция между функциями сильная, это окажет большее влияние на обучение и прогнозирование алгоритма.
2.5.2 Два способа уменьшения размерности
- Выбор функций
- Анализ основных компонентов (может понять способ извлечения признаков)
2.5.3 Что такое выбор функций
1. Определение: данные содержат избыточные или связанные переменные (или функции, атрибуты, индикаторы и т. д.), направленные на поиск основных функций из исходных функций.
2. Метод
- Фильтр: в основном исследуйте характеристики самой функции, взаимосвязь между функцией и функцией и целевое значение.
- Метод выбора дисперсии: фильтрация с низкой дисперсией
- Коэффициент корреляции
- Встроенный: алгоритм автоматически выбирает функции (связь между функциями и целевыми значениями).
- Дерево решений: информационная энтропия, прирост информации
- Регуляризация: L1, L2
- Глубокое обучение: свертки и многое другое
3. Модуль
sklearn.feature_selection
4. Тип фильтра
4.1 Фильтрация признаков низкой дисперсии
Удалите некоторые особенности локального различия:
- Небольшая дисперсия признаков: большинство образцов признака имеют схожие значения.
- Большая дисперсия признака: значения многих образцов признака различны
- sklearn.feature_selection.VarianceThreshold(threshold=0.0)
- Удалить все функции с низкой дисперсией
- Variance.fit_transform(X)
- X: данные в формате массива numpy [n_samples, n_features]
- Возвращаемое значение: значение обучения ниже, чем
threshold
функции будут удалены. По умолчанию сохраняются все функции с ненулевой дисперсией, т. е. удаляются функции с одинаковым значением во всех выборках.
def variance_demo():
"""
过滤低方差特征
:return:
"""
# 1.获取数据
data = pd.read_csv('../data/dating.csv', encoding="gbk")
data = data.iloc[:, 1:8]
# 2.实例化一个转换器
transfer = VarianceThreshold(threshold=10)
# 3.调用fit_transform
data_new = transfer.fit_transform(data)
print("data_new:\n", data_new, data_new.shape)
# 计算两个变量之间的相关系数
r = pearsonr(data["gender"], data["position"])
print("相关系统:\n", r)
return None
Результаты:
4.2 Коэффициент корреляции
- Коэффициент корреляции Пирсона
- Статистические показатели, отражающие тесноту связи между переменными
Значение коэффициента корреляции находится в диапазоне от -1 до +1, т.е. [-1,+1]
- Когда r больше 0, это означает, что две переменные имеют положительную корреляцию, а когда r меньше нуля, две переменные имеют отрицательную корреляцию.
- Когда абсолютное значение r равно 1, это означает, что две переменные полностью коррелированы; когда r=0, это означает, что две переменные не имеют корреляции.
- Когда 0<|r| |r|>
- В целом его можно разделить на три уровня: |r|
|r|>
from scipy.stats import pearsonr
2.6 Анализ главных компонентов
Цель:
- Уменьшение размерности признаков с помощью PCA
применение:
- Анализ основных компонентов между пользователями и категориями элементов
2.6.1 Введение
Анализ основных компонентов (PCA): процесс преобразования данных высокой размерности в данные низкой размерности.В этом процессе исходные данные могут быть отброшены и могут быть созданы новые переменные.
Функция: это сжатие размерности данных, которое максимально уменьшает размерность (сложность) исходных данных и теряет небольшое количество информации.
Применение: регрессионный анализ или кластерный анализ.
API:
- sklearn.decomposition.PCA(n_components=None)
def pca_demo():
"""
PCA降维
:return:
"""
# 准备数据
data = [[2, 8, 4, 5], [6, 3, 0, 8], [5, 4, 9, 1]]
# 实例化转换器
transfer = PCA(n_components=0.95)
# 调用fit_transform()
data_new = transfer.fit_transform(data)
print("data_new:\n", data_new)
return None
Результаты:
2.6.2 Случай
Изучите пользовательские настройки для категорий элементов
# 运行jupyter notebook
jupyter notebook
Три алгоритма классификации
3.1 преобразователи и оценщики sklearn
Цель
- Знайте конвертер sklearn и поток оценки
3.1.1 Преобразователь
Этапы разработки признаков:
- Instantiate (экземпляр представляет собой класс-трансформер (Transformer))
- Вызвать fit_transform (для документа, чтобы построить матрицу частоты слов класса, его нельзя вызывать одновременно)
Мы называем интерфейс функции конвертером, и конвертер имеет следующие формы:
- fit_transform
- fit
- transform
Например, нормализовать:
(x - mean)/ std
fit_transform
fit вычисляет среднее значение и стандартное отклонение каждого столбца
transform (x - среднее значение)/ std для окончательного преобразования
3.1.2 Оценщик
В sklearn важную роль играет оценщик (estimator), класс api, реализующий алгоритмы
- Оценщик для классификации
- sklearn.neighbors алгоритм k-ближайшего соседа
- sklearn.native_bayes Байесовский
- sklearn.linear_model.LogisticRegression логистическая регрессия
- sklearn.tree дерево решений и случайный лес
- Оценщик для регрессии:
- sklearn.linear_model.LinearRegression Линейная регрессия
- sklearn.linear_model.Ridge Регрессия хребта
3.2 Алгоритм K-ближайшего соседа
цель обучения
- Изучите формулу расстояния для алгоритма KNN
- Изучение значения гиперпараметра K алгоритма KNN и проблемы значения
- Преимущества и недостатки изучения KNN
- Классификация с использованием KNeighborsClassifier
- Понимать точность критериев оценки алгоритмов классификации
1. Принцип алгоритма K-ближайших соседей (KNN)
Алгоритм K ближайших соседей также называется алгоритмом KNN.
Определение: выборка принадлежит классу, если большинство k ближайших выборок в пространстве признаков (то есть ближайших соседей в пространстве признаков) принадлежат к определенному классу.
Расстояние между двумя образцами, также известное как евклидово расстояние.
Классификация ирисов с помощью алгоритма KNN
def knn_iris():
"""
用KNN算法对鸢尾花进行分类
:return:
"""
# 1、获取数据
iris = load_iris()
# 2、划分数据集
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=6)
# 3、特征工程:标准化
tranfer = StandardScaler()
x_train = tranfer.fit_transform(x_train)
x_test = tranfer.fit_transform(x_test)
# 4、KNN算法预估值器
estimator = KNeighborsClassifier(n_neighbors=3)
estimator.fit(x_train, y_train)
# 5、模型评估
# 方法一:直接对比真实值和预测值
y_predict = estimator.predict(x_test)
print("y_predict:\n", y_predict)
print("直接对比真实值和预测值:\n", y_predict == y_test)
# 方法二:计算准确率
score = estimator.score(x_test, y_test)
print("准确率为:\n", score)
return None
результат операции:
3.3 Выбор модели и настройка
цель обучения:
- процесс перекрестной проверки
- Процесс поиска гиперпараметров
- Оптимизация параметров алгоритма с помощью GridSearchCV
3.3.1 Перекрестная проверка
Перекрестная проверка: разделите полученные данные обучения на наборы для обучения и проверки. На следующем рисунке приведен пример: данные разделены на 4 части, одна из которых используется в качестве проверочного набора. Затем после 4 тестов каждый раз заменяется другой набор проверки. То есть получается 4 набора результатов модели, а за окончательный результат принимается среднее значение. Также известна как 4-кратная перекрестная проверка.
Данные разделены на обучающую выборку и тестовую выборку, но для того, чтобы результаты модели, полученные на обучающей выборке, были более точными, производится следующая обработка:
Классификация ирисов с помощью алгоритма KNN, добавление веб-поиска и перекрестной проверки
def knn_iris_gscv():
"""
用KNN算法对鸢尾花进行分类,添加网络搜索和交叉验证
:return:
"""
# 1、获取数据
iris = load_iris()
# 2、划分数据集
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=6)
# 3、特征工程:标准化
tranfer = StandardScaler()
x_train = tranfer.fit_transform(x_train)
x_test = tranfer.fit_transform(x_test)
# 4、KNN算法预估值器
estimator = KNeighborsClassifier()
# 加入网络搜索和交叉验证
# 参数准备
param_dict = {"n_neighbors": [1, 3, 5, 7, 9, 11]}
estimator = GridSearchCV(estimator, param_grid=param_dict, cv=10)
estimator.fit(x_train, y_train)
# 5、模型评估
# 方法一:直接对比真实值和预测值
y_predict = estimator.predict(x_test)
print("y_predict:\n", y_predict)
print("直接对比真实值和预测值:\n", y_predict == y_test)
# 方法二:计算准确率
score = estimator.score(x_test, y_test)
print("准确率为:\n", score)
# 最佳参数
print("最佳参数:\n", estimator.best_params_)
# 最佳结果
print("最佳结果:\n", estimator.best_score_)
# 最佳估计器
print("最佳估计器:\n", estimator.best_estimator_)
# 交叉验证结果
print("交叉验证结果:\n", estimator.cv_results_)
return None
результат операции:
кейс фейсбука
3.4 Наивный байесовский алгоритм
цель обучения:
- Условные и совместные вероятности
- Формула Байеса и отношения, не зависящие от признаков
- Коэффициент сглаживания Лапласа
- Используйте формулу Байеса для расчета вероятности
3.4.1 Что такое наивная байесовская классификация
Следующие значения вероятности могут появиться после классификации в соответствии с наивным алгоритмом Байеса, и электронные письма могут быть классифицированы в соответствии с размером значения вероятности
3.4.2 Вероятностная основа
1. Определение вероятности
- Вероятность определяется как вероятность того, что событие произойдет
- P(X): значение находится в [0,1]
3.4.3 Совместная вероятность, условная вероятность и взаимная независимость
- Совместная вероятность: содержит несколько условий, и все условия верны одновременно Вероятность
- Запишите это: P(A,B)
- Условная вероятность: вероятность того, что событие А произойдет при тех же условиях, что и событие В.
- Запишите это: P(A|B)
- Независимость друг от друга: если P(A,B) = P(A)P(B), то говорят, что событие A и событие B не зависят друг от друга.
- P(A,B) = P(A)P(B) Событие A и Событие B не зависят друг от друга
3.4.4 Формула Байеса
3.4.5 API
- sklearn.naive_bayes.MultinomiaINB(alpha = 1.0)
- Наивная байесовская классификация
- альфа : коэффициент сглаживания Лапласа
3.4.6 Случай
def nb_news():
"""
用朴素贝叶斯算法对新闻进行分类
:return:
"""
# 获取数据
news = fetch_20newsgroups(subset="all")
# 划分数据集:特征训练集,特征测试集,目标训练集,目标测试集
x_train,x_test,y_train,y_test = train_test_split(news.data,news.target)
# 特征工程:文本特征抽取tfidf
transfer = TfidfVectorizer()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
# 朴素贝叶斯算法预估器流程
estimator = MultinomialNB()
estimator.fit(x_train,y_train)
# 模型评估
# 方法一:直接对比真实值和预测值
y_predict = estimator.predict(x_test)
print("y_predict:\n", y_predict)
print("直接对比真实值和预测值:\n", y_predict == y_test)
# 方法二:计算准确率
score = estimator.score(x_test, y_test)
print("准确率为:\n", score)
return None
результат операции:
3.5 Дерево решений
цель обучения:
- Формула и функция информационной энтропии
- Формула и роль информации
- Реализация применения прироста информации для расчета степени уменьшения неопределенности признаков
- Понять реализацию трех алгоритмов дерева решений
3.5.1 Понимание деревьев решений
Идея дерева решений очень проста Структура условной ветви в программировании — это структура if-else.Самое раннее дерево решений — это метод обучения классификации, который использует эту структуру для разделения данных.
3.5.2 Принцип дерева решений
1. Принцип
- информационная энтропия, прирост информации
2. Определение информационной энтропии
- Технический термин для H называется информационной энтропией, а единицей измерения являются биты.
3. Одна из основ разделения дерева решений ----- информационная энтропия
Определение: прирост информации g(D, A) признака A к обучающему набору данных D определяется как разница между информационной энтропией H(D) набора D и информационной условной энтропией H(D|A) множества D при заданное условие признака А, которое:
3.5.4 Случаи
1. Классифицируйте ирисы с помощью дерева решений
def decision_iris():
"""
用决策树对鸢尾花进行分类
:return:
"""
# 1、获取数据集
iris = load_iris()
# 2、划分数据集
x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target,random_state=22)
# 3、决策树预估器
estimator = DecisionTreeClassifier(criterion="entropy")
estimator.fit(x_train,y_train)
# 4、模型评估
# 方法一:直接对比真实值和预测值
y_predict = estimator.predict(x_test)
print("y_predict:\n", y_predict)
print("直接对比真实值和预测值:\n", y_predict == y_test)
# 方法二:计算准确率
score = estimator.score(x_test, y_test)
print("准确率为:\n", score)
# 可视化决策树
export_graphviz(estimator,out_file="iris_tree.dot")
return None
результат операции:
2. Прогноз выживания пассажиров Титаника
3.5.6 Резюме дерева решений
- преимущество:
- Простая для понимания и объяснения, визуализация дерева
- недостаток:
- Создатели дерева решений могут создавать, но плохо обобщают деревья с чрезмерно сложными данными, что называется переоснащением.
- Улучшать:
- Алгоритм обрезки корзины (уже реализован в API дерева решений)
随机森林
3.6 Метод случайного леса ансамблевого обучения
цель обучения:
- Процесс создания каждого дерева решений в случайном лесу
- Зачем нужна случайная выборка с заменой (Bootstrap)
- Гиперпараметры для случайных лесов
3.6.1 Что такое ансамблевый метод обучения?
Ансамблевое обучение решает одну задачу прогнозирования, создавая комбинацию нескольких моделей.
Он работает, создавая несколько классификаторов/моделей, каждый из которых обучается и делает прогнозы независимо. Эти прогнозы, наконец, объединяются в комбинированные прогнозы, таким образом делая прогнозы для любого отдельного класса.
3.6.2 Что такое случайный лес
Случайный лес — это классификатор, состоящий из нескольких деревьев решений, выходные классы которого определяются режимом классов, выводимых отдельными деревьями.
3.6.3 Процесс принципа случайного леса
Алгоритм обучения создает каждое дерево уроков по следующему алгоритму:
- Пусть N обозначает количество обучающих случаев, а M обозначает количество признаков.
- Случайным образом выберите образец за раз и повторите его N раз (могут быть повторяющиеся образцы)
- Произвольно выбрать m признаков, m
- сделать загрузочную выборку
3.6.4 API
3.6.5 Случаи
Прогноз выживания пассажира Титаника
Четыре алгоритма регрессии и кластеризации
4.1 Линейная регрессия
цель обучения:
- Принцип процесса линейной регрессии
- Примените LinearRegression или SGDRegressor для прогнозирования регрессии
- Критерии оценки и формулы алгоритмов регрессии
4.1.1 Принцип линейной регрессии
1. Сценарии применения линейной регрессии
2. Что такое линейная регрессия?
Определения и формулы
4.1.2 Принципы линейной регрессии потерь и оптимизации
1. Функция потерь: также известная как стоимость, функция стоимости, целевая функция.
2. Метод оптимизации
- Нормальные уравнения: используются реже
- Градиентный спуск
Случай:
def linear1():
"""
正规方程的优化方法对波斯顿房价进行预测
:return:
"""
# 1、获取数据
boston = load_boston()
# 2、划分数据集
x_train, x_test, y_train, y_test = train_test_split(boston.data, boston.target, random_state=22)
# 3、标准化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
# 4、预估器
estimator = LinearRegression()
estimator.fit(x_train,y_train)
# 5、得出模型
print("正规方程-权重系数:\n",estimator.coef_)
print("正规方程-偏置为:\n",estimator.intercept_)
# 6、模型评估
return None
def linear2():
"""
梯度下降的优化方法对波斯顿房价进行预测
:return:
"""
# 1、获取数据
boston = load_boston()
# 2、划分数据集
x_train, x_test, y_train, y_test = train_test_split(boston.data, boston.target, random_state=22)
# 3、标准化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
# 4、预估器
estimator = SGDRegressor()
estimator.fit(x_train, y_train)
# 5、得出模型
print("梯度下降-权重系数:\n", estimator.coef_)
print("梯度下降-偏置为:\n", estimator.intercept_)
# 6、模型评估
return None
результат операции:
4.1.3 Оценка производительности регрессии
from sklearn.metrics import mean_squared_error
def linear1():
"""
正规方程的优化方法对波斯顿房价进行预测
:return:
"""
# 1、获取数据
boston = load_boston()
# 2、划分数据集
x_train, x_test, y_train, y_test = train_test_split(boston.data, boston.target, random_state=22)
# 3、标准化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
# 4、预估器
estimator = LinearRegression()
estimator.fit(x_train, y_train)
# 5、得出模型
print("正规方程-权重系数:\n", estimator.coef_)
print("正规方程-偏置为:\n", estimator.intercept_)
# 6、模型评估
y_predict = estimator.predict(x_test)
print("预测房价:\n", y_predict)
error = mean_squared_error(y_test, y_predict)
print("正规方程-均方误差为:\n", error)
return None
def linear2():
"""
梯度下降的优化方法对波斯顿房价进行预测
:return:
"""
# 1、获取数据
boston = load_boston()
# 2、划分数据集
x_train, x_test, y_train, y_test = train_test_split(boston.data, boston.target, random_state=22)
# 3、标准化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
# 4、预估器
estimator = SGDRegressor()
estimator.fit(x_train, y_train)
# 5、得出模型
print("梯度下降-权重系数:\n", estimator.coef_)
print("梯度下降-偏置为:\n", estimator.intercept_)
# 6、模型评估
y_predict = estimator.predict(x_test)
print("预测房价:\n", y_predict)
error = mean_squared_error(y_test, y_predict)
print("梯度下降-均方误差为:\n", error)
return None
4.1.4 Сравнение нормального уравнения и градиентного спуска
градиентный спуск | нормальное уравнение |
---|---|
Необходимо выбрать скорость обучения | ненужный |
Требуется итеративное решение | одна операция |
Может использоваться, когда количество функций велико | Нужно рассчитать уравнение, временная сложность высокая O(n3) |
- выберите
- Данные малого масштаба:
- LinearRegression (не может решить проблему подгонки)
- Ридж Возвращение
- Крупномасштабные данные: SGDRegressor
- Данные малого масштаба:
4.1.5 Расширение
Методы оптимизации: GD, SGD, SAG
1. ГД
Градиентный спуск, исходный градиентный спуск должен вычислить все значения, чтобы получить градиент, объем вычислений большой, поэтому есть улучшенный алгоритм.
2. СГД
Стохастический градиентный спуск: она рассматривает только одну обучающую выборку за итерацию.
- Немного SGD:
- эффективный
- легко выполнить
- Недостатки СГД:
- SGD требует много гиперпараметров: таких как параметр регуляризации, количество итераций.
- SGD чувствителен к нормализации признаков
3. Провисание
Стохастический средний градиентный спуск (Стохастический средний градиент), поскольку скорость сходимости слишком низкая, некоторые люди предложили алгоритмы на основе градиентного спуска, такие как SAG.
Регрессия хребта, логистическая регрессия и т. д. имеют оптимизацию SAG
4.2 Недообучение и переоснащение
цель обучения:
- Недостатки линейной регрессии (без регуляризации)
- Причины и решения для переобучения и недообучения
4.2.1 Введение
1. Подгонка
2. Переобучение
анализировать:
- Первый случай: поскольку в машинном обучении слишком мало лебедей, критерии различения слишком грубы, чтобы точно идентифицировать лебедей.
- Второй случай: машина в принципе может различать лебедей. Однако, к сожалению, на существующих изображениях лебедей все белые лебеди, и после машинного обучения он думает, что перья лебедя белые, а позже видит лебедя с черными перьями и думает, что это не лебедь.
- Переоснащение: Гипотеза может получить лучшее соответствие, чем другие гипотезы в обучающем наборе, но не может хорошо соответствовать данным в наборе тестовых данных.В это время гипотеза считается переоснащенной. (модель слишком сложная)
- Недостаточное соответствие: гипотеза не может лучше соответствовать данным обучающего набора и не может хорошо соответствовать данным в наборе тестовых данных.В настоящее время гипотеза считается неподходящей. (модель слишком простая)
4.2.2 Причины и решения
- Причины и решения недообучения
- Причина: слишком мало признаков изученных данных
- Решение: увеличить количество признаков в данных
- Причины переобучения и решения
- Причина: Слишком много оригинальных признаков, есть какие-то зашумленные признаки, а модель слишком сложная, потому что модель пытается учесть данные каждой контрольной точки
- Решение:
- Регуляризация
Регуляризация: регуляризация L2 (обычно используется), регуляризация L1
4.3 Улучшение линейной регрессии — гребневая регрессия
цель обучения:
- Узнайте, чем гребневая регрессия отличается от линейной регрессии
- Влияние регуляризации на весовой параметр
- Разница между регуляризацией L1 и L2
4.3.1 Линейная регрессия с регуляризацией L2 — гребневая регрессия
Гребневая регрессия на самом деле является линейной регрессией. Просто когда алгоритм устанавливает уравнение регрессии, добавляется ограничение регуляризации, чтобы добиться эффекта решения переобучения.
1. API
2. Наблюдайте за изменением степени регуляризации и влиянием на результаты
Случай: регрессия хребта, прогнозирующая цены на жилье в Бостоне
def linear3():
"""
岭回归对波斯顿房价进行预测
:return:
"""
# 1、获取数据
boston = load_boston()
# 2、划分数据集
x_train, x_test, y_train, y_test = train_test_split(boston.data, boston.target, random_state=22)
# 3、标准化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
# 4、预估器
estimator = Ridge(alpha=0.5, max_iter=10000)
estimator.fit(x_train, y_train)
# 5、得出模型
print("岭回归-权重系数:\n", estimator.coef_)
print("岭回归-偏置为:\n", estimator.intercept_)
# 6、模型评估
y_predict = estimator.predict(x_test)
print("预测房价:\n", y_predict)
error = mean_squared_error(y_test, y_predict)
print("岭回归-均方误差为:\n", error)
return None
4.4 Алгоритмы классификации — логистическая регрессия и бинарная классификация
цель обучения:
- Функция потерь для логистической регрессии
- Метод оптимизации для логистической регрессии
- сигмовидная функция
- Сценарии применения логистической регрессии
- Разница между показателями точности и полноты
- Индикатор F1-score, фактическое значение скорости отзыва
- Как решать оценку в случае несбалансированности выборки
- Значение кривой ROC, размер показателя AUC
- Примените classification_report для достижения точности и полноты расчетов
- Применение roc_auc_score для расчета индикатора
4.4.1 Логистическая регрессия
Определение: Логистическая регрессия (Логистическая регрессия) — классификационная модель машинного обучения.Логистическая регрессия — это алгоритм классификации.Хотя название имеет регрессию, оно имеет определенную связь с регрессией. Благодаря простоте и эффективности алгоритма он широко используется на практике.
Сценарии применения:
- CTR объявления
- Это спам
- болен или нет
- финансовое мошенничество
- поддельный аккаунт
注意:
Глядя на приведенный выше пример, мы найдем характеристику, то есть суждение между двумя категориями. Логистическая регрессия — мощный инструмент для решения задач бинарной классификации.
4.4.2 Принцип логистической регрессии
1. Вход: выход линейной регрессии является входом логистической регрессии.
2. Функция активации
сигмовидная функция:
g = 1/(1 + e^(-x))
Формула ниже представляет собой матричное представление
注意:
Вход в сигмовидную функцию - это тот, что в формулеx
, то есть: x = h(w)=w1x1+w2x2+w3x3...+b
3. Потеря и оптимизация
потеря
Потеря логистической регрессии, называемая
对数似然损失
Синтезируйте полную функцию потерь
Мы знаем, что -log(P), чем больше значение P, тем меньше результат, поэтому мы можем проанализировать эту формулу потерь.
потеря оптимизации
Алгоритм оптимизации градиентного спуска также используется для уменьшения значения функции потерь. Таким образом обновляются весовые параметры соответствующего алгоритма перед логистической регрессией,
提升原本属于1类别的概率,降低原本属于0类别的概率
4.4.3 API для логистической регрессии
4.4.4 Случаи
Прогноз классификации рака - прогноз доброкачественного/злокачественного рака молочной железы
Процесс анализа:
получить данные
Добавляйте имена при чтении
обработка данных
Обработка пропущенных значений
Разделение набора данных
разработка функций
Безразмерная обработка - стандартизация
Предиктор логистической регрессии
Оценка модели
Адрес данных:архив.ICS.UCI.quote/beauty/machine-…
4.4.5 Методы оценки для классификации
1. Точность и отзыв
- матрица путаницы
2. Точность и отзыв
- Точность: доля положительных образцов в результатах прогнозирования, которые на самом деле являются положительными (понять)
- Скорость отзыва: доля прогнозируемых результатов, которые являются положительными примерами в выборках, которые на самом деле являются положительными примерами (отметить все, способность различать положительные примеры)
- Оценка F1: отражает надежность модели.
3. API отчета об оценке классификации
4. Просмотрите показатель точности, показатель отзыва и балл F1 для случая «Прогноз классификации рака — прогноз доброкачественной/злокачественной опухоли молочной железы».
4.4.6 ROC-кривая и индекс AUC
1. ТПР и ФПР
- (Напомнить) TPR = TP / (TP + FN)
- Среди всех образцов с истинным классом 1 доля предсказанного класса 1
- FPR = FP / (FP + TN)
- Среди всех образцов с истинным классом 0 доля предсказанного класса 1
2. ROC-кривая
- Горизонтальная ось ROC - FPRate, а вертикальная ось - TPRate. Когда они равны, это означает: для образцов, истинная категория которых равна 1 или 0, вероятность того, что классификатор предсказывает значение 1, равна. При этом время показатель AUC равен 0,5
3. Индикатор AUC
- Значение вероятности AUC состоит в том, чтобы случайным образом выбрать пару положительных и отрицательных образцов, а также вероятность того, что оценка положительного образца больше, чем у отрицательного образца.
- Минимальное значение AUC 0,5, максимальное значение 1, чем выше значение, тем лучше
- AUC=1, идеальный классификатор, при использовании этой модели прогнозирования независимо от установленного порога можно получить идеальный прогноз. В большинстве случаев идеального классификатора не существует.
- 0,5
注意:最终AUC的范围在[0.5,1]之间,并且越接近1越好
4.4.7 API расчета AUC
4.4.8 Резюме
- AUC можно использовать только для оценки бинарной классификации.
- AUC очень подходит для оценки производительности классификаторов с несбалансированными выборками.
4.5 Сохранение и загрузка модели
цель обучения:
- Применение joblib для сохранения и загрузки моделей
4.5.1 API сохранения и загрузки модели в sklearn
4.5.2 Случай
1. Сохраните модель
from sklearn.externals import joblib
# 4、预估器
estimator = Ridge(alpha=0.5, max_iter=10000)
estimator.fit(x_train, y_train)
# 模型保存
joblib.dump(estimator,"./my_ridge.pkl")
2. Загрузите модель
# 加载模型
estimator = joblib.load("./my_ridge.pkl")
4.6 Неконтролируемое обучение — алгоритм K-средних
цель обучения:
- Принцип алгоритма К-средних
- Коэффициенты квазисилуэта для оценки эффективности К-средних
- Преимущества и недостатки K-средних
4.6.1 Что такое неконтролируемое обучение
Неконтролируемое обучение: нет целевого значения
4.6.2 Обучение без учителя включает алгоритмы
- кластеризация
- K-средние (кластеризация K-средних)
- Снижение размерности
- PCA
4.6.3 Принцип K-средних
4.6.4 API К-средних
4.6.5 Случаи
Кластеризация пользователей Instacart Market с помощью K-средних
4.6.6 Индекс оценки эффективности K-средних
1. Контурный коэффициент
в заключении:
- Если b_i >> a_i: близко к 1, тем лучше эффект
- Если b_i
- Значение коэффициента силуэта находится между [-1, 1], и чем оно ближе к 1, тем лучше степень сплоченности и разделения.
4.6.7 API коэффициента профиля
4.6.8 Случаи
Кластеризация пользователей Instacart Market с помощью K-средних — оценка коэффициентов силуэта
4.6.9 Краткий обзор K-средних
- Анализ признаков: итеративный алгоритм, интуитивно понятный и простой для понимания, очень практичный.
- Недостатки: легко сойтись к локальному оптимальному решению (множественная кластеризация).
注意:聚类一般做在分类之前