В чем Engineering - скрининг для связывания Scikit учиться имеют несколько общих функции выбора

Характерно в методах скрининга включает в себя: Filter (фильтрация), Wrapper (способ упаковки), Embedded (вложение)

Фильтр: фильтрация

Способ выбора функции: удаление характерных значения небольших вариаций (удаление функции с низкой дисперсией)

Метод # простой , но не простой в использовании, его можно охарактеризовать как предварительный отбор, чтобы удалить малое изменение величины характеристик ,
если достаточно машинные ресурсы, и сохранить всю информацию , требуемой , чтобы быть выше , чем пороговое значение , заданное или только фильтруют дискретные значения признака только одного признака.
Дискретные переменные: 95% из особенностей являются примером значение 1, это можно считать небольшую роль в функции. Если 100% является 1, то эта функция не имеет смысла.
Непрерывные переменные: отказаться от функций, дисперсия меньше определенного порога.

от sklearn.feature_selection импорта VarianceThreshold 
Х = [[0, 0, 1], [0, 1, 0], [1, 0, 0], [0, 1, 1], [0, 1, 0], [ 0, 1, 1]] 
сель = VarianceThreshold (порог = (8 * (1 -. 0,8))) 
sel.fit_transform (Х)

 

Реализация два выбор особенности: одномерный выбор функции

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

  Коэффициент корреляции 1.Pearson (корреляции Пирсона) - в основном используется для непрерывной функции экранирования, чувствительны только линейная

С. П. Numpy Импорт 
из scipy.stats Импорт pearsonr 

np.random.seed (2019) 
Размер = 1000 
Х = np.random.normal (0 ,. 1, размер) 
# вычисляет коэффициент корреляции между двумя переменными 
печати ( «низкий уровень шума {} ".format (pearsonr (Х, Х + np.random.normal (0 ,. 1, размер)))) 
Печать (" {} Выше шума. «формат (pearsonr (Х, Х + np.random.normal (0, 10, размер))))

  2. Максимальная взаимная информация и информация коэффициент (Взаимная информация и максимальный коэффициент информации)

Энтропия Н (Y) , и условная энтропия H (Y | X) , упоминаются как разница между взаимной информацией - используется для выбора только дискретные функций, очень чувствителен к дискретному образу ,
поскольку взаимная информация не легко напрямую к выбору функции, так введении максимальной информации коэффициента. Во- первых, максимум информации данных , чтобы найти оптимальный дискретный способ, затем преобразует значение в взаимной информации метрической, значение интервала [0,1].

х = np.random.normal (0,10,300) 
г = х * х 
pearsonr (х, г) 
#输出-0,1 
из minepy импорта MINE 
т = МИН () 
m.compute_score (х, г) 
печати (m.mic ( ))

  3. Расстояние коэффициент корреляции (Расстояние Корреляция) - Для того , чтобы преодолеть недостатки коэффициента корреляции Пирсона рождения.

от scipy.spatial.distance импорта pdist, squareform 
импорта NumPy как нп 

из numbapro импорта JIT, float32 

Защиту distcorr (X, Y): 
    ""»Вычислить функцию расстояния корреляции 

    >>> а = [1,2,3,4, 5] 
    >>> б = np.array ([1,2,9,4,4]) 
    >>> distcorr (а, б) 
    +0,762676242417 
    ""» 
    Х = np.atleast_1d (X) , 
    Y = np.atleast_1d ( Y) , 
    если np.prod (X.shape) == LEN (X): 
        X ' = X [:, Отсутствует] , 
    если np.prod (Y.shape) == Len (Y): 
        Y = Y [:, Отсутствует] 
    Х = np.atleast_2d (X) , 
    Y = np.atleast_2d (Y) , 
    п = X.shape [0]  , 
    если Y.shape [0] = X.shape [0]!:
        поднять ValueError (»Количество образцов должно соответствовать ')
    а = squareform (pdist (Х)) 
    Ь = squareform (pdist (Y)) 
    А = а - a.mean (ось = 0) [Отсутствует,:] - a.mean (ось = 1) [:, Отсутствует] + a.mean () 
    B = B - b.mean (ось = 0) [Отсутствует,:] - b.mean (ось = 1) [:, Отсутствует] + b.mean () 

    dcov2_xy = (а * В). сумма () / поплавок (п * п) 
    dcov2_xx = (А * А) .sum () / поплавок (п * п) 
    dcov2_yy = (В * В) .sum () / поплавок (п * п) 
    декор = пр. SQRT (dcov2_xy) /np.sqrt (np.sqrt (dcov2_xx) * np.sqrt (dcov2_yy)) 
    возвращение декор

  4. Сортировка (модель ранжирования на основе) на основе функции обучения модели

Идея этого метода является прямым использованием алгоритмов машинного обучения , которые вы хотите использовать для построения моделей прогнозирования для каждого отдельного элемента и переменного отклика. Если соотношение между характеристикой и ответом является нелинейным, существует множество альтернатив, такие как дерево на основе методы (дерева решений, случайные лесов), расширенная линейная модель или тому подобные. Метод дерева на основе является одним из самых простых способа , потому что они могут моделировать нелинейные отношения, не требует много регулировки.
Однако, чтобы избежать переобучения в основном, так что глубина дерева должно быть относительно небольшим, и их следует применять кросс-проверки.

от sklearn.datasets импортировать load_boston 
из sklearn.model_selection импорта train_test_split, cross_val_score, ShuffleSplit 
из sklearn.preprocessing импорта StandardScaler 
из sklearn.ensemble импортировать RandomForestRegressor 
# с sklearn.metrics импорта r2_score, mean_squared_error, mean_absolute_error 

#load бостон жилищного набора данных в качестве примера 
бостон = load_boston () 
#print (boston.DESCR) 
# x_train, x_test, y_train, y_test = train_test_split (boston.data, boston.target, random_state = 33, test_size = 0,25) 
Х = бостон [ "данные"] 
У = бостон [ "мишень "] 
имена = бостон [" feature_names "] 

ВЧ = RandomForestRegressor (n_estimators = 20, max_depth = 4) 

забивает = []
# Использование каждой функция индивидуальной модели обучения для оценки каждой модели в качестве основы для выбора функции.  
DT = DecisionTreeRegressor ()
для г в диапазоне (X.shape [1]): 
     оценка = cross_val_score (РЧ, X [:, я: + 1], Y = скоринг "r2", 
                              CV = ShuffleSplit (LEN (Х), 3,. 3)) 
     scores.append ((круглый (np.mean (оценка), 3), имена [я])) 
печать (упорядоченные (баллы, реверс = True)) 


из sklearn.svm импорта СВР 
l_svr = SVR (ядро =» линейный ') #poly, RBF 
l_svr.fit (x_train, y_train) 
l_svr.score (x_test, y_test) 

от sklearn.neighbors импорта KNeighborsRegressor 
КНН = KNeighborsRegressor (вес = "равномерная") 
knn.fit (x_train, y_train) 
knn.score (x_test, y_test) 

от sklearn.tree импорта DecisionTreeRegressor 
dt.score (x_test, y_test)
dt.fit (x_train, y_train) 

от sklearn.ensemble импорта RandomForestRegressor 
RFR = RandomForestRegressor () 
rfr.fit (x_train, y_train) 
rfr.score (x_test, y_test) 

от sklearn.ensemble импорта ExtraTreesRegressor 
ETR = ExtraTreesRegressor () 
etr.fit ( x_train, y_train) 
etr.score (x_test, y_test) 

от sklearn.ensemble импорта GradientBoostingRegressor 
GBR = GradientBoostingRegressor () 
gbr.fit (x_train, y_train) 
gbr.score (x_test, y_test)

  Критерий хи-квадрат - только для дискретного отбора признаков в задачах классификации

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

# Импорт sklearn библиотека SelectKBest и chi2 
от sklearn.feature_selection Импорт SelectKBest, chi2 
# выборе наиболее соответствующие функции первых пяти 
X_chi2 = SelectKBest (chi2, К = 5) . .Fit_transform (X-, Y) , 
X_chi2.shape

  

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

Когда все функции на том же уровне, должны иметь самую важную особенность самого высокого коэффициента в модели, но не связана с выходными характеристиками должны иметь переменное значение коэффициента близко к нулю. Даже простая линейная модель регрессии, когда данные не очень шумные (или имеют большие объемы данных , по сравнению с количеством функций) и функции (относительная) независимость, этот метод также хорошо работает.
Регуляризация поставить дополнительные ограничения или срок штрафа добавляется к существующей модели (функциям потерь) от предполагаемого слияния для предотвращения чрезмерного повышения способности обобщения.
При использовании линейной модели, L1 и L2 регуляризации регуляризации также называют Lasso и хребет.
Лассо можно выделить некоторые качественные характеристики, позволяя при этом коэффициенте других функций стремится к 0. Когда такие , как необходимость сокращения числа функций, полезно, но для понимания данных не очень хорошо.
коэффициент регрессии Риджа будет равномерно распределен соответствующим контекстной переменными, L2 регуляризация для понимания наиболее полезных особенностей
эволюции множественного линейного уравнения регрессии найти & thetas. Каждый признак имеет соответствующий вес коэффициенты Коэф, в котором положительные и отрицательные значения представитель весовых коэффициентов и целевое значение положительная корреляция признак или отрицательная корреляция, вес важности признака представителя абсолютного значения коэффициента.

# Бостон получение данных 
от импорта sklearn.linear_model линейной регрессии 
бостона = load_boston () 
Х = boston.data 
Y = boston.target 
# останец отфильтровывал 
X X = [Y] <50 
Y = Y [Y <50] 
REG = линейной регрессии ( ) 
reg.fit (X, Y) 
# Коэф после заказа запрос 
coefSort = reg.coef_.argsort () 
#featureNameSort: эффект в соответствии со значением тега, от малых до больших значений каждой функции имя 
#featureCoefSore: в соответствии со значением тега эффекты, от маленьких до больших coef_ 
featureNameSort = boston.feature_names [coefSort] 
featureCoefSore = reg.coef_ [coefSort] 
Печать ( "featureNameSort:", featureNameSort) 
Печать ( "featureCoefSore:", featureCoefSore) 

#A Помощник Довольно-Метод печати для линейных Модели 
DEF pretty_print_linear (coefs, имена = None, Sort = False):
    если имена == Нет:
        имена = [ "X% S" % х при х в диапазоне (LEN (coefs))] 
    LST = застежка - молния (coefs, имена) 
    если сортировать: 
        LST = сортирован (LST, ключ = лямбда х: -np.abs (х [ 0])) 
    возвращение "+" .join ( "% s *% s" % (круглый (коэффици-, 3), имя) 
                                   для коэф, имя в LST) 

# лассо回归
от импорта sklearn.linear_model Lasso 
из sklearn.preprocessing импорта StandardScaler 
от sklearn.datasets импорта load_boston 

бостон = load_boston () 
пересчетка = StandardScaler () 
Х = scaler.fit_transform (бостон [ "данных"]) 
Y = бостон [ "целевые"] 
имена = бостон [ "feature_names"] 

Lasso = лассо ( альфа = 0,3) 
lasso.fit (Х,

печать ( "Lasso модель: {}". Формат ( 
      pretty_print_linear (lasso.coef_, имена, вроде = True))) 

#岭回归
из sklearn.linear_model импорта хребта 
от sklearn.metrics импорта r2_score 
размер = 100 

# Мы запустить метод 10 раз с различными случайными семян 
для I в диапазоне (10): 
    печать (. "Случайное зерно {}" формат (я)) 
    np.random.seed (начальное число = я) 
    X_seed = np.random.normal (0, 1, размер ) 
    Х1 = X_seed + np.random.normal (0, 0,1, размер) 
    Х2 = X_seed + np.random.normal (0, 0,1, размер) 
    Х3 = X_seed + np.random.normal (0, 0,1, размер) 
    Y = X1 + Х2 + Х3 + np.random.normal (0, 1, размер) 
    Х = np.array ([Х1, Х2, Х3]). Т 


    Л.Р. = линейная регрессия ()
    lr.fit (X, Y)
    печать ( "Линейная модель: {}". Формат (pretty_print_linear (lr.coef_))) 

    гребень = Ридж (альфа = 10) 
    ridge.fit (X, Y) 
    печать ( "модель Ридж: {}" Формат (pretty_print_linear (. ridge.coef_)))

  

Характеризуется выбрать для реализации четыре: выбора Random Forest

  1. Среднее снижение примеси (среднее снижение примеси)
при обучении дерево решений может быть вычислено для каждой функции уменьшает количество дерева не чистота. Для лесных деревьев, она может быть рассчитана из средней каждой функции уменьшает количество примеси, и это не снижает чистоту в среднем в качестве стандартного отбора признаков.

Импорт load_boston sklearn.datasets из 
от sklearn.ensemble Импорт RandomForestRegressor 
Импорт Numpy С. П. 

#load Бостон жилищного данныхобъект например , как 
Boston load_boston =) ( 
X-Boston = [ "данных"] 
Y - Бостон = [ "целевые"] 
имена Бостон = [ " feature_names «] 
# случайного лес модель обучения, а также важность получения оценки каждого признака по feature_importances_ собственности. RandomForestRegressor = RF () 
rf.fit (Х, Y) 
Print ( "Особенности по отсортированной их оценка:") 
Печать (отсортированного (ZIP (Map (лямбда - X: круглые (X ,. 4), rf.feature_importances_), имена), 
             обратное = TRUE))

  2. Среднее снижение точности (среднее снижение точности)

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

Импорт ShuffleSplit sklearn.model_selection из 
от sklearn.metrics Импорт r2_score 
из коллекций через defaultdict Импорт 
X-Бостон = [ "Данные"] 
Y - Бостон = [ "мишень"] 
RF = RandomForestRegressor () 
результаты = а defaultdict (Список) 
#crossvalidate В по ряду результаты различные случайные из расколов данных 
для train_idx, test_idx в ShuffleSplit (LEN (Х-), 100, 0,3): 
    X_train, Х-X_test = [train_idx], Х- [test_idx] 
    . Y_train, Y android.permission.FACTOR = [train_idx], Y [test_idx ] 
    # оригинальная модель обучения , в котором предварительно модификации, которая является стандартом для сравнения соотв последующих перетасовки собственных значений. 
    rf.fit = Р & л (X_train, Y_train) 
    ACC = r2_score (android.permission.FACTOR, rf.predict (X_test).) 
    # функция через каждую колонку 
    для I в диапазоне (X.shape [1 ]):
        = X_test.copy x_t () 
        # особенность этого столбца перетасовки, порядок взаимодействия величины внутренней особенности 
        np.random.shuffle (x_t [:, I]) 
        . Shuff_acc = r2_score (android.permission.FACTOR, Rf.predict (x_t) ) 
        после того, как значение признака # перетасовки, вычислить среднюю степень снижения точности. . Множество [имена [I]] Дописывать ((ACC-shuff_acc) / ACC) 
Print ( "Особенности по отсортированной их оценка:") 
Print (отсортированный ([(круглый (np.mean (Score) ,. 4), подвиг) для. подвиг, счет в scores.items ()] , обратный = True))

  

Реализация выбор пять особенности: выбор топ особенность

  1. Выбор стабильности (выбор стабильности)
Ее основная идея заключается в том, чтобы работать на разных подмножеств данных и в котором подмножество алгоритма выбора признаков, постоянное повторение, в котором результат выбора конечного резюме. Статистика такая особенность может рассматриваться в качестве важного признака частоты (номер был выбран в качестве важного признака этого , разделенной на число в подмножестве испытывается).
В идеале, важная особенность счета будет близка к 100%. Характеризуется немного слабонеидеальный Score число 0, в то время как наименее полезные функции будут близки к 0 баллам.

от sklearn.linear_model импорта RandomizedLasso 
из sklearn.datasets импорта load_boston 
бостон = load_boston () 
#using данные жилья Бостон. 
Данные нужно получает масштабируется автоматически путем реализации sklearn в 
X = [бостон "данные"] 
У = бостон [ "целевые"] 
имена = [бостон "feature_names"] 
rlasso = RandomizedLasso (альфа = 0,025) 
rlasso.fit (X, Y) 
печать ( "Особенность отсортирована по баллам:") 
печать (отсортированная (зип (карта (лямбда - х: круглая (х, 4), rlasso.scores_), имена), 
             реверс = True))

  2. устранение рекурсивной функции (исключение Рекурсивной функции, RFE)

Основная идея ликвидации рекурсивной особенности повторяются для построения модели (например SVM или регрессионной модель) , а затем выбрать лучшие (или худшие) функции (может быть выбрана в соответствии с коэффициентом), избираемые особенностями в него снова, а затем повторить этот процесс на остальных функциях не пройденные до всех функций.
Этот процесс характеризуется тем , чтобы устранить это функция сортировки. Таким образом, это жадный алгоритм , чтобы найти оптимальное подмножество функций.
стабильность RFE зависит в значительной степени на первом этаже во время итерации которого используется модель.
Если RFE общие обратная используются, не регуляризованная регрессия неустойчива, то RFE неустойчиво.
Если RFE использует хребет, но с возвращением Риджа регуляризации является стабильным, то RFE стабильна.

от sklearn.feature_selection импорта RFE 
из sklearn.linear_model импорт линейной регрессии 
бостон = load_boston () 
X = [БОСТОН "данные"] 
У = [BOSTON "целевые"] 
имена = [ "бостон feature_names"] 
#use линейной регрессии в качестве модели 
Л.Р. = линейная регрессия () 
#rank всех функций, т.е. продолжают ликвидацию до последнего один 
РСА = RFE (Lr, n_features_to_select = 1) 
rfe.fit (X, Y) 
печати ( "Особенности отсортированных по рангу:") 
печать (сортировка (зип (карта (лямбда - х: круглые (х, 4), rfe.ranking_), имена)))

  Регуляризация линейной модели могут быть использованы для выбора функции и особенности понимания. По сравнению регуляризации L1, L2 регуляризации более стабильная работа, L2 регуляризация подходит для понимания данных.

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

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

  • Важные особенности, вероятно, низкий балл (проблемы, связанные функции)
  • Этот метод является более выгодным для характеристических переменных категорий и более широких возможностей (выпуск) смещений

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

 

 Ссылки:

Связывание Scikit-узнать несколько общих выбор функций

Серия особенности проекта: принцип выбора функций и реализации (на)

Инженерная серия функции: принцип отбора признаков и реализации (под)

 

рекомендация

отwww.cnblogs.com/iupoint/p/11289650.html