2016-05-21 3 views
-1

Как уменьшить размер функции? Моя функция выглядит следующим образом:Уменьшение функции

1 (Класс Number) 10_10_1 (имя файла) 0 0 0 0 0 0 0 0 0,564971751 23,16384181 25,98870056 19,20903955 16,10169492 13,27683616 1,694915254 0 0 0 0 0 0 0 3,95480226 11,5819209 +20,33898305 60,4519774 3,672316384 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3.107344633 62.99435028 33.89830508 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.412429379 66.66666667 31.92090395 0 0 0 0 0 0 0 0 0 0 0 0 0 0.564971751 22.59887006 26.83615819 46.89265537 3.107344633 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.564971751 16.38418079 28.53107345 50.84745763 3.672316384 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 90.6779661 9.322033898 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0,847457627 90.11299435 9.039548023 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17.79661017 81.3559322 0.847457627 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 27.11864407 72.88135593 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0,564971751 37,85310734 61,29943503 0,282485876 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.412429379 50.84745763 47.45762712 0,282485876 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 24.57627119 75.42372881 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 17.23163842 82.20338983 0.564971751 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 29.37853107 70.62146893 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 55.64971751 44.35028249 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 64.40677966 35.59322034 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 67.79661017 32.20338983 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 66.66666667 33.33333333 0 0 0 0 0 0 0 0 0 0 0 0 1 3 2 6 7 5 4 8 9 10 11 12 13 14 15 16 17 18 14.81834463 3,292123621 2,219541777 3,818489078 2,740791003 1,160544518 2,820053602 1,006906813 0,090413195 2,246638594 0,269778302 2,183126126 2,239168249 0,781498607 2,229795302 0,743329919 1,293839141 0,783068011 1,104421291 0,770312707 0,697659061 1,082266169 0,408339745 1,073922207 0,999148017 0,602195061 1,247286588 0,712143548 0,867327913 0,603063537 0,474115683 0,596387106 0,370847522 0,54900076 0,35930586 0,580272233 0,397060362 0,535337691

После имени файла даны значения функций.

+2

Если вы хотите объединить функции, чтобы уменьшить количество функций, вы можете использовать PCA. Тем не менее, вы можете захотеть выполнить выбор функции (вы выбираете лучшие функции и отбрасываете другую), затем посмотрите на этот курс (http://machinelearningmastery.com/an-introduction-to-feature-selection/). На концах он указывает на три разные библиотеки. Лично я уже использовал Weka, и для этой цели это не очень удобно. – FiReTiTi

ответ

0

Если ваша функция не подконтрольна, вы можете использовать PCA.

import numpy as np 
from sklearn.decomposition import PCA 
X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]]) 
pca = PCA(n_components=2) 
pca.fit(X) 
PCA(copy=True, n_components=2, whiten=False) 
print(pca.explained_variance_ratio_) 

Если контролируется, вы можете использовать LDA

import numpy as np 
from sklearn.lda import LDA 
X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]]) 
y = np.array([1, 1, 1, 2, 2, 2]) 
clf = LDA() 
clf.fit(X, y) 
0

Для уменьшения количества функций врученный моделей, помимо других, снижение функции или функция удаления/выбор может быть использован. Некоторые часто используемые снижения функции подходов уже отмечались здесь, как и анализ главных компонент (PCA ), линейный дискриминантный анализ (LDA ) или частичной регрессия наималейших квадратов (ПЛСРА). По сути, они представляют первоначальные данные в подпространство, целью которого является представление информации в меньших возможностях. В частности, PCA тем самым пытается максимизировать сохраненную дисперсию исходных данных (без контроля), тогда как LDA пытается минимизировать внутриклассовое отклонение и максимизировать межклассовое расстояние (контролируется, для классификации), а PLSR пытается максимизировать сохраненные дисперсии исходных данных и максимизации корреляции с целевой переменной (контролируемой, регрессии).

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

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

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

library(caret) 
# PCA with preserving 95% variance in original data 
modelPca <- train(x = iris[,1:4], iris[,5], preProcess=c('center', 'scale', 'pca'), trControl=trainControl(preProcOptions=list(thresh=0.95)), method='svmLinear', tuneGrid=expand.grid(C=3**(-3:3))) 
# LDA with selection of dimensions 
modelLda2 <- train(x = iris[,1:4], y = iris[,5], method='lda2', tuneGrid=expand.grid(dimen=1:4)) 
# PLSR with selection of dimensions 
modelPls <- train(x = iris[,1:3], y = iris[,4], method='pls', tuneGrid=expand.grid(ncomp=1:3)) 
# feature wrapper: (backwards) recursive feature elimination (there exist more...) 
modelRfe <- rfe(x = iris[,1:4], y = iris[,5], sizes = 1:4, rfeControl = rfeControl()) 
# feature filter: univariate filtering 
modelSbf <- sbf(x = iris[,1:4], y = iris[,5], sbfControl = sbfControl())