Заметки о машинном обучении Python

машинное обучение искусственный интеллект
Заметки о машинном обучении Python

Заметки о машинном обучении Python

На основе видеоруководства «3-Day Quick Start Python Machine Learning [Dark Horse Programmer]» на станции B адрес видео выглядит следующим образом:

Эй.Пропорциональное соотношение.Ком/видео/бв1 Сегодня...

Обзор машинного обучения

1.1 Обзор искусственного интеллекта

1.1.1 Связь между машинным обучением, искусственным интеллектом и глубоким обучением

img

  • Связь между машинным обучением, искусственным интеллектом и глубоким обучением

    • Машинное обучение — это подход к искусственному интеллекту
    • Глубокое обучение — это метод, разработанный на основе машинного обучения.
  • Дартмутские конференции — начало искусственного интеллекта

    В 1956 году несколько ученых-компьютерщиков встретились на Дартмутской конференции и придумали концепцию «искусственного интеллекта».

1.1.2 Что могут машинное обучение и глубокое обучение?

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

image-20210125151119122

  • Используется в области майнинга и прогнозирования:
    • Сценарии применения: прогноз продаж магазина, количественные инвестиции, рекомендации по рекламе, классификация корпоративных пользователей...
  • Используется в поле изображения:
    • Сценарии применения: обнаружение дорожных знаков, распознавание лиц и т. д.
  • Используется в области самонагревающейся обработки языка:
    • Сценарии применения: классификация текста, анализ настроений, автоматический чат, определение текста и т.д.

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

1.2 Что такое машинное обучение

1.2.1 Определения

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

1.2.2 Состав набора данных

  • Структура: собственное значение + целевое значение

image-20210125151953457

Примечания:

  • Для каждой строки данных мы вызываемобразец.
  • Некоторые данные могут не иметь целевого значения:

image-20210125152141421

1.3 Классификация алгоритмов машинного обучения

1.3.1 Контролируемое обучение

  • Проблема классификации: есть целевое значение, и оценивается категория

    image-20210125152807306

  • Проблема регрессии: с целевым значением, непрерывными данными

image-20210125152827731

1.3.2 Обучение без учителя

  • Неконтролируемое обучение: нет целевого значения

image-20210125152141421

1.4 Процесс разработки машинного обучения

image-20210125152944154

Процесс разработки машинного обучения:

  1. получить данные
  2. обработка данных
  3. разработка функций
  4. Обучение алгоритму машинного обучения — модель
  5. Оценка модели
  6. применение

1.5 Структура обучения и введение в материалы

Несколько моментов для ясности:

  • Алгоритмы — это ядро, данные и вычисления — это основа
  • определить местоположение

Большинство алгоритмов создаются инженерами-разработчиками проприетарных алгоритмов, и нам нужно только:

  • Анализировать большое количество данных
  • Проанализируйте конкретный бизнес
  • Применяйте общие алгоритмы
  • Разработка функций, настройка, оптимизация

Библиотеки и платформы машинного обучения:

image-20210125153626768

Два инженерных решения

2.1 Набор данных

  • Цель:
    • Знайте, что набор данных разделен на обучающий набор и тестовый набор
    • Будет использовать набор данных sklearn
  • применение:
    • никто

2.1.1 Доступные наборы данных

image-20210125153740886

URL-адрес Kaggle:www.kaggle.com/

URL набора данных UCI:archive.ics.uci.edu/ml

URL-адрес scikit-learn:SCI kit-learn.org/stable/data…

1. Введение в инструменты Scikit-learn

image-20210125153940296

  • Инструменты машинного обучения в Python
  • Scikit-learn включает реализации многих известных алгоритмов машинного обучения.
  • Полная документация Scikit-learn, простой в использовании, богатый API
  • Последняя стабильная версия 0.24

2. Установка

conda install -c conda-forge scikit-learn

3. Что содержит Scikit-learn

image-20210125154615268

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 Сравнение местоположения и обработки данных разработки признаков

image-20210201111226672

  • 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

Результаты:

image-20210201112905855

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. Результаты выполнения

image-20210201114300665

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

результат операции:

image-20210201114924225

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

Обходной путь: используйте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

результат операции:

image-20210201141341156

image-20210201141349722

2.4 Предварительная обработка признаков

Цель:

  • Понимать характеристики числовых данных и категорийных данных
  • Используйте MinMaxScaler для нормализации данных объектов.
  • Стандартизация данных объектов с использованием StandardScaler

2.4.1 Обзор

Что такое предварительная обработка признаков:

Данные объекта преобразуются в更加适合算法模型процесс данных признаков

1. Включите контент

  • Нормализованный
  • стандартизация

2. API предварительной обработки функций

sklearn.preprocessing

Зачем нужна нормализация?

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

2.4.2 Нормализация

1. Определение: при преобразовании исходных данных 3 данных сопоставляются с (значение по умолчанию [0,1])

2. Формула

image-20210201142946653

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

результат:

image-20210201173908890

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

2.4.3 Стандартизация

1. Определение: путем преобразования исходных данных данные преобразуются в диапазон, где среднее значение равно 0, а стандартное отклонение равно 1.

2. Формула

image-20210201174500929

image-20210201174548534

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

3. API

  • sklearn.preprocessing.StandardScaler()

4. Расчет данных

Сделайте то же самое с приведенными выше данными.

  • анализировать
  1. Создание экземпляра StandardScaler
  2. Преобразование через 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

Результаты:

image-20210201175215375

Суммировать:

Стандартное отклонение: степень концентрации

Он относительно стабилен при наличии достаточного количества выборок и подходит для современных сценариев больших данных с большим количеством помех.

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

Цель:

  • применениеVarianceThresholdРеализовано для удаления функций с низкой дисперсией
  • Узнайте о характеристиках и расчетах коэффициента корреляции
  • Использование коэффициента корреляции для реализации выбора собственного значения

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

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

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

image-20210202145936282

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

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

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

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

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

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

image-20210202150709462

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

Результаты:

image-20210202152242109

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

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

image-20210202152606040

Значение коэффициента корреляции находится в диапазоне от -1 до +1, т.е. [-1,+1]

  • Когда r больше 0, это означает, что две переменные имеют положительную корреляцию, а когда r меньше нуля, две переменные имеют отрицательную корреляцию.
  • Когда абсолютное значение r равно 1, это означает, что две переменные полностью коррелированы; когда r=0, это означает, что две переменные не имеют корреляции.
  • Когда 0<|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

Результаты:

image-20210202160253509

2.6.2 Случай

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

# 运行jupyter notebook
jupyter notebook

image-20210202163343008

image-20210202163407131

image-20210202163418783

Три алгоритма классификации

3.1 преобразователи и оценщики sklearn

Цель

  • Знайте конвертер sklearn и поток оценки

3.1.1 Преобразователь

Этапы разработки признаков:

  1. Instantiate (экземпляр представляет собой класс-трансформер (Transformer))
  2. Вызвать 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 Регрессия хребта

image-20210203103240925

3.2 Алгоритм K-ближайшего соседа

цель обучения

  • Изучите формулу расстояния для алгоритма KNN
  • Изучение значения гиперпараметра K алгоритма KNN и проблемы значения
  • Преимущества и недостатки изучения KNN
  • Классификация с использованием KNeighborsClassifier
  • Понимать точность критериев оценки алгоритмов классификации

1. Принцип алгоритма K-ближайших соседей (KNN)

Алгоритм K ближайших соседей также называется алгоритмом KNN.

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

Расстояние между двумя образцами, также известное как евклидово расстояние.

image-20210203104227826

Классификация ирисов с помощью алгоритма 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

результат операции:

image-20210203105458982

3.3 Выбор модели и настройка

цель обучения:

  • процесс перекрестной проверки
  • Процесс поиска гиперпараметров
  • Оптимизация параметров алгоритма с помощью GridSearchCV

3.3.1 Перекрестная проверка

Перекрестная проверка: разделите полученные данные обучения на наборы для обучения и проверки. На следующем рисунке приведен пример: данные разделены на 4 части, одна из которых используется в качестве проверочного набора. Затем после 4 тестов каждый раз заменяется другой набор проверки. То есть получается 4 набора результатов модели, а за окончательный результат принимается среднее значение. Также известна как 4-кратная перекрестная проверка.

Данные разделены на обучающую выборку и тестовую выборку, но для того, чтобы результаты модели, полученные на обучающей выборке, были более точными, производится следующая обработка:

image-20210203110220049

Классификация ирисов с помощью алгоритма 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

результат операции:

image-20210203110723020

кейс фейсбука

image-20210203111356296

3.4 Наивный байесовский алгоритм

цель обучения:

  • Условные и совместные вероятности
  • Формула Байеса и отношения, не зависящие от признаков
  • Коэффициент сглаживания Лапласа
  • Используйте формулу Байеса для расчета вероятности

3.4.1 Что такое наивная байесовская классификация

Следующие значения вероятности могут появиться после классификации в соответствии с наивным алгоритмом Байеса, и электронные письма могут быть классифицированы в соответствии с размером значения вероятности

image-20210203111852330

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 Формула Байеса

image-20210203112934791

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

результат операции:

image-20210203113804273

3.5 Дерево решений

цель обучения:

  • Формула и функция информационной энтропии
  • Формула и роль информации
  • Реализация применения прироста информации для расчета степени уменьшения неопределенности признаков
  • Понять реализацию трех алгоритмов дерева решений

3.5.1 Понимание деревьев решений

Идея дерева решений очень проста Структура условной ветви в программировании — это структура if-else.Самое раннее дерево решений — это метод обучения классификации, который использует эту структуру для разделения данных.

image-20210203114252172

3.5.2 Принцип дерева решений

1. Принцип

  • информационная энтропия, прирост информации

2. Определение информационной энтропии

  • Технический термин для H называется информационной энтропией, а единицей измерения являются биты.

image-20210203115023398

3. Одна из основ разделения дерева решений ----- информационная энтропия

Определение: прирост информации g(D, A) признака A к обучающему набору данных D определяется как разница между информационной энтропией H(D) набора D и информационной условной энтропией H(D|A) множества D при заданное условие признака А, которое:

image-20210203115557046

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

результат операции:

image-20210203120658967

2. Прогноз выживания пассажиров Титаника

image-20210203135616799

3.5.6 Резюме дерева решений

  • преимущество:
    • Простая для понимания и объяснения, визуализация дерева
  • недостаток:
    • Создатели дерева решений могут создавать, но плохо обобщают деревья с чрезмерно сложными данными, что называется переоснащением.
  • Улучшать:
    • Алгоритм обрезки корзины (уже реализован в API дерева решений)
    • 随机森林

3.6 Метод случайного леса ансамблевого обучения

цель обучения:

  • Процесс создания каждого дерева решений в случайном лесу
  • Зачем нужна случайная выборка с заменой (Bootstrap)
  • Гиперпараметры для случайных лесов

3.6.1 Что такое ансамблевый метод обучения?

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

Он работает, создавая несколько классификаторов/моделей, каждый из которых обучается и делает прогнозы независимо. Эти прогнозы, наконец, объединяются в комбинированные прогнозы, таким образом делая прогнозы для любого отдельного класса.

3.6.2 Что такое случайный лес

Случайный лес — это классификатор, состоящий из нескольких деревьев решений, выходные классы которого определяются режимом классов, выводимых отдельными деревьями.

3.6.3 Процесс принципа случайного леса

Алгоритм обучения создает каждое дерево уроков по следующему алгоритму:

  • Пусть N обозначает количество обучающих случаев, а M обозначает количество признаков.
    • Случайным образом выберите образец за раз и повторите его N раз (могут быть повторяющиеся образцы)
    • Произвольно выбрать m признаков, m
  • сделать загрузочную выборку

image-20210203141437279

3.6.4 API

image-20210203141518231

3.6.5 Случаи

Прогноз выживания пассажира Титаника

image-20210203141613687

Четыре алгоритма регрессии и кластеризации

4.1 Линейная регрессия

цель обучения:

  • Принцип процесса линейной регрессии
  • Примените LinearRegression или SGDRegressor для прогнозирования регрессии
  • Критерии оценки и формулы алгоритмов регрессии

4.1.1 Принцип линейной регрессии

1. Сценарии применения линейной регрессии

image-20210203142359143

2. Что такое линейная регрессия?

Определения и формулы

image-20210203142537527

4.1.2 Принципы линейной регрессии потерь и оптимизации

1. Функция потерь: также известная как стоимость, функция стоимости, целевая функция.

image-20210203143252017

2. Метод оптимизации

  • Нормальные уравнения: используются реже

image-20210203144104515

image-20210203144359498

  • Градиентный спуск

image-20210203144305714

image-20210203144330253

image-20210203144543416

Случай:

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

результат операции:

image-20210203150317610

4.1.3 Оценка производительности регрессии

image-20210203150558509

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 Сравнение нормального уравнения и градиентного спуска

image-20210203152944456

градиентный спуск нормальное уравнение
Необходимо выбрать скорость обучения ненужный
Требуется итеративное решение одна операция
Может использоваться, когда количество функций велико Нужно рассчитать уравнение, временная сложность высокая O(n3)
  • выберите
    • Данные малого масштаба:
      • LinearRegression (не может решить проблему подгонки)
      • Ридж Возвращение
    • Крупномасштабные данные: SGDRegressor

4.1.5 Расширение

Методы оптимизации: GD, SGD, SAG

1. ГД

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

2. СГД

Стохастический градиентный спуск: она рассматривает только одну обучающую выборку за итерацию.

  • Немного SGD:
    • эффективный
    • легко выполнить
  • Недостатки СГД:
    • SGD требует много гиперпараметров: таких как параметр регуляризации, количество итераций.
    • SGD чувствителен к нормализации признаков

3. Провисание

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

Регрессия хребта, логистическая регрессия и т. д. имеют оптимизацию SAG

4.2 Недообучение и переоснащение

цель обучения:

  • Недостатки линейной регрессии (без регуляризации)
  • Причины и решения для переобучения и недообучения

4.2.1 Введение

1. Подгонка

image-20210203163941493

2. Переобучение

image-20210203164721341

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

  • Первый случай: поскольку в машинном обучении слишком мало лебедей, критерии различения слишком грубы, чтобы точно идентифицировать лебедей.
  • Второй случай: машина в принципе может различать лебедей. Однако, к сожалению, на существующих изображениях лебедей все белые лебеди, и после машинного обучения он думает, что перья лебедя белые, а позже видит лебедя с черными перьями и думает, что это не лебедь.
  • Переоснащение: Гипотеза может получить лучшее соответствие, чем другие гипотезы в обучающем наборе, но не может хорошо соответствовать данным в наборе тестовых данных.В это время гипотеза считается переоснащенной. (модель слишком сложная)
  • Недостаточное соответствие: гипотеза не может лучше соответствовать данным обучающего набора и не может хорошо соответствовать данным в наборе тестовых данных.В настоящее время гипотеза считается неподходящей. (модель слишком простая)

image-20210203165532164

4.2.2 Причины и решения

  • Причины и решения недообучения
    • Причина: слишком мало признаков изученных данных
    • Решение: увеличить количество признаков в данных
  • Причины переобучения и решения
    • Причина: Слишком много оригинальных признаков, есть какие-то зашумленные признаки, а модель слишком сложная, потому что модель пытается учесть данные каждой контрольной точки
    • Решение:
      • Регуляризация

image-20210203171654767

Регуляризация: регуляризация L2 (обычно используется), регуляризация L1

image-20210203171917594

4.3 Улучшение линейной регрессии — гребневая регрессия

цель обучения:

  • Узнайте, чем гребневая регрессия отличается от линейной регрессии
  • Влияние регуляризации на весовой параметр
  • Разница между регуляризацией L1 и L2

4.3.1 Линейная регрессия с регуляризацией L2 — гребневая регрессия

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

1. API

image-20210204130953255

image-20210204131916113

2. Наблюдайте за изменением степени регуляризации и влиянием на результаты

image-20210204131056553

Случай: регрессия хребта, прогнозирующая цены на жилье в Бостоне

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. Вход: выход линейной регрессии является входом логистической регрессии.

image-20210204140601256

2. Функция активации

  • сигмовидная функция:

    g = 1/(1 + e^(-x))

    Формула ниже представляет собой матричное представление

    注意:Вход в сигмовидную функцию - это тот, что в формулеx, то есть: x = h(w)=w1x1+w2x2+w3x3...+b

image-20210204140816736

image-20210204141224834

3. Потеря и оптимизация

  1. потеря

    Потеря логистической регрессии, называемая对数似然损失

image-20210204142015213

image-20210204142048477

image-20210204142135294

Синтезируйте полную функцию потерь

image-20210204142314712

image-20210204142717985

Мы знаем, что -log(P), чем больше значение P, тем меньше результат, поэтому мы можем проанализировать эту формулу потерь.

  1. потеря оптимизации

    Алгоритм оптимизации градиентного спуска также используется для уменьшения значения функции потерь. Таким образом обновляются весовые параметры соответствующего алгоритма перед логистической регрессией,提升原本属于1类别的概率,降低原本属于0类别的概率

4.4.3 API для логистической регрессии

image-20210204143237504

4.4.4 Случаи

Прогноз классификации рака - прогноз доброкачественного/злокачественного рака молочной железы

Процесс анализа:

  1. получить данные

    Добавляйте имена при чтении

  2. обработка данных

    Обработка пропущенных значений

  3. Разделение набора данных

  4. разработка функций

    Безразмерная обработка - стандартизация

  5. Предиктор логистической регрессии

  6. Оценка модели

Адрес данных:архив.ICS.UCI.quote/beauty/machine-…

image-20210204152243035

4.4.5 Методы оценки для классификации

1. Точность и отзыв

  • матрица путаницы

image-20210204160423116

2. Точность и отзыв

  • Точность: доля положительных образцов в результатах прогнозирования, которые на самом деле являются положительными (понять)

image-20210204160700732

  • Скорость отзыва: доля прогнозируемых результатов, которые являются положительными примерами в выборках, которые на самом деле являются положительными примерами (отметить все, способность различать положительные примеры)

image-20210204160728070

  • Оценка F1: отражает надежность модели.

image-20210204160950680

3. API отчета об оценке классификации

image-20210204161253489

4. Просмотрите показатель точности, показатель отзыва и балл F1 для случая «Прогноз классификации рака — прогноз доброкачественной/злокачественной опухоли молочной железы».

image-20210204161830253

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

image-20210204163418491

3. Индикатор AUC

  • Значение вероятности AUC состоит в том, чтобы случайным образом выбрать пару положительных и отрицательных образцов, а также вероятность того, что оценка положительного образца больше, чем у отрицательного образца.
  • Минимальное значение AUC 0,5, максимальное значение 1, чем выше значение, тем лучше
  • AUC=1, идеальный классификатор, при использовании этой модели прогнозирования независимо от установленного порога можно получить идеальный прогноз. В большинстве случаев идеального классификатора не существует.
  • 0,5

注意:最终AUC的范围在[0.5,1]之间,并且越接近1越好

4.4.7 API расчета AUC

image-20210204164306494

4.4.8 Резюме

  • AUC можно использовать только для оценки бинарной классификации.
  • AUC очень подходит для оценки производительности классификаторов с несбалансированными выборками.

4.5 Сохранение и загрузка модели

цель обучения:

  • Применение joblib для сохранения и загрузки моделей

4.5.1 API сохранения и загрузки модели в sklearn

image-20210204165418635

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 Что такое неконтролируемое обучение

Неконтролируемое обучение: нет целевого значения

image-20210125152141421

image-20210204170714465

4.6.2 Обучение без учителя включает алгоритмы

  • кластеризация
    • K-средние (кластеризация K-средних)
  • Снижение размерности
    • PCA

4.6.3 Принцип K-средних

image-20210204171123353

image-20210204171056086

4.6.4 API К-средних

image-20210204171212666

4.6.5 Случаи

Кластеризация пользователей Instacart Market с помощью K-средних

image-20210204172110323

4.6.6 Индекс оценки эффективности K-средних

1. Контурный коэффициент

image-20210204172216811

image-20210204172240943

image-20210204172443393

в заключении:

  • Если b_i >> a_i: близко к 1, тем лучше эффект
  • Если b_i
  • Значение коэффициента силуэта находится между [-1, 1], и чем оно ближе к 1, тем лучше степень сплоченности и разделения.

4.6.7 API коэффициента профиля

image-20210204172824789

4.6.8 Случаи

Кластеризация пользователей Instacart Market с помощью K-средних — оценка коэффициентов силуэта

image-20210204173035492

4.6.9 Краткий обзор K-средних

  • Анализ признаков: итеративный алгоритм, интуитивно понятный и простой для понимания, очень практичный.
  • Недостатки: легко сойтись к локальному оптимальному решению (множественная кластеризация).

注意:聚类一般做在分类之前

5 Резюме

5.1 День 1

机器学习day01

5.2 Второй день

机器学习day02

5.3 День 3

机器学习day3