Эта статья участвовала в "Проект «Звезда раскопок»”, чтобы выиграть творческий подарочный пакет и бросить вызов творческим поощрительным деньгам.
Мало знаний, большой вызов! Эта статья участвует в "Необходимые знания для программистов«Творческая деятельность.
1 R против Python, статистика против машинного обучения
- Есть много друзей, которые изучили R или изучили R с помощью Python и задавали мне различные статистические вопросы, потому что в R есть различные статистические функции, а статистические функции Python не настолько исчерпывающие. Меня также смутил "код Python в стиле R", присланный мне моими друзьями. Может быть, код R хочет выглядеть высоким, но красота Python заключается в простоте и ясности (разработчики PSPython очень сентиментальны, введите jupyter import this можно просмотреть скрытые пасхальные яйца в python, стихотворение «Дзен Python», написанное создателем python, в котором восхваляется простота, ясность и легко читаемая красота кода python.Если вам интересно, вы можете выполнить поиск для этого на Baidu. перевод).
- Возвращаясь к основной теме, почему такая большая разница между python и R с точки зрения статистических функций?Возможно, вы слышали, что R был разработан людьми, изучавшими статистику, поэтому вся идея заключается в идее статистики, а python - это изучение компьютера. Он был разработан людьми с 2008 года, поэтому вся идея заключается в идее компьютера. Неудивительно, что R намного сильнее, чем python, в решении статистических задач. Различные идеи этих двух дисциплин сильно отражено в различных процессах моделирования статистики и машинного обучения.
- Идея статистики является своего рода «априорной» идеей.Что бы вы ни делали, вы должны сначала «испытать», сначала «удовлетворить условиям», а затем «испытать» различными способами, чтобы убедиться, что различные математические допущения выполняются, иначе, теоретически, нельзя получить хороших результатов. А машинное обучение - это своего рода "апостериорная" идея. Несмотря ни на что, я дам модели поработать какое-то время. Если эффект не будет хорошим, я найду способ. Если модель будет работать хорошо, мне все равно. про коллинеарность вообще.Оно почти не соответствует нормальному распределению,и нет деталей типа фиктивных переменных.Эффект модели отличный!
- Как человек, не занимающийся математикой и статистикой, который вышел из финансов и написал код на Python, я полностью одобряю этот «апостериорный» подход к машинному обучению: мы преследуем результаты и не уделяем слишком много внимания предпосылкам, которые необходимо выполнить. быть встреченным. Для меня статистика - "спаситель", когда машинное обучение не может решить проблему во что бы то ни стало. Если машинное обучение не может решить проблему, я обращусь за помощью к статистике, но я никогда не буду думать об этом в первую очередь. , Соответствовать различным статистическим требованиям. Конечно, если вы исходите из статистики и пишете R, вы также можете считать машинное обучение «спасителем» после исчерпания статистических средств. Статистика и машинное обучение дополняют друг друга, и каждый должен понимать разницу между двумя идеями, чтобы, зайдя в тупик, найти выход из идей другой дисциплины. Пока это может решить проблему, это хорошая идея!
Два эффективных встроенных метода встраивания
Но более эффективным методом, несомненно, был бы наш встроенный метод. Мы уже объяснили, что, поскольку регуляризация L1 сделает параметры, соответствующие некоторым функциям, равными 0, регуляризация L1 может использоваться для выбора функций.В сочетании с модулем SelectFromModel метода встраивания мы можем легко отфильтровать функции, которые делают модель очень эффективный. Обратите внимание, что наша цель на данный момент состоит в том, чтобы максимально сохранить информацию об исходных данных, чтобы эффект подгонки модели к данным после уменьшения размерности оставался превосходным, поэтому мы не рассматриваем проблему обучающей выборки и тестовый набор и поместите все данные в модель для уменьшения размерности.
from sklearn.linear_model import LogisticRegression as LR
from sklearn.datasets import load_breast_cancer
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import cross_val_score
from sklearn.feature_selection import SelectFromModel
data = load_breast_cancer()
data.data.shape
LR_ = LR(solver="liblinear",C=0.9,random_state=420)
cross_val_score(LR_,data.data,data.target,cv=10).mean()
X_embedded = SelectFromModel(LR_,norm_order=1).fit_transform(data.data,data.target)
X_embedded.shape#(569, 9)
cross_val_score(LR_,X_embedded,data.target,cv=10).mean()#0.9368323826808401
Глядя на результаты, количество функций сократилось до однозначных цифр, а производительность модели упала не слишком сильно.Если мы не требовательны, мы можем на этом остановиться. Но может ли модель подойти лучше?Здесь у нас есть два способа настройки: 1) Настройте порог параметра в классе SelectFromModel, который является порогом метода встраивания, что означает удаление признаков, у которых абсолютное значение всех параметров ниже этого простого значения. Теперь пороговое значение по умолчанию равно None, поэтому SelectFromModel выбирает объекты только на основе результатов регуляризации L1, то есть выбирает объекты, параметры которых не равны O после регуляризации L1. В настоящее время, пока мы корректируем значение порога (рисуем кривую обучения порога), мы можем наблюдать, как эффект модели изменяется при разных порогах. После настройки порога функции выбираются не с использованием регуляризации L1, а с помощью коэффициентов отдельных функций, сгенерированных в свойствах модели .coef_. Хотя coef_ возвращает коэффициент функции, размер коэффициента аналогичен концепции feature_importances_ в дереве решений и интерпретируемой дисперсииобъясненной_vairance_в алгоритме уменьшения размерности. Фактически, это мера важности и вклада функций Поэтому порог параметра в SelectFromModel можно установить равным порогу coef_, то есть коэффициенту меньше Все особенности чисел введены в порог.