आर या पायथन में विधियां, अनुपयोगी शिक्षण में सुविधा का चयन करने के लिए [बंद]


11

डेटा में महत्वहीन / महत्वपूर्ण सुविधाओं को त्यागने / चयन करने के लिए आर / पायथन में उपलब्ध तरीके / कार्यान्वयन क्या हैं? मेरे डेटा में लेबल नहीं हैं (अप्रकाशित)।

डेटा में मिश्रित प्रकार के साथ ~ 100 विशेषताएं हैं। कुछ संख्यात्मक हैं जबकि अन्य द्विआधारी (0/1) हैं।


आप किस तरह के अनअप्रूव्ड लर्निंग एल्गोरिथम का उपयोग कर रहे हैं? आपका डेटा कैसा दिखता है?
मैक्स कैंडोसिया

@ user1362215, किसी भी असुरक्षित एल्गोरिथ्म को लागू करने से पहले, मैं फीचर हटाने का एक तरीका खोजने की कोशिश कर रहा हूं।
शिक्षार्थी

आप इस देखा है scikit सीखने cheatsheet से पहले? यह आपको आरंभ करने में मदद कर सकता है ...
स्टीव एस

क्यों एक असुरक्षित पद्धति का उपयोग नहीं किया जाता है, जो इत्र अनचाहे मोड में यादृच्छिक वन की तरह अपने आप से चयन की सुविधा देता है?
जेकेविहुआ

1
मैं पूरी तरह से निश्चित नहीं हूं, मेरा मतलब है कि यादृच्छिक वन पूरी तरह से गैर पैरामीट्रिक है इसलिए मान्यताओं के बारे में चिंता न करें। मुझे यकीन नहीं है कि यह आपके उद्देश्य की पूर्ति करेगा। मैं क्या कह सकता हूँ कि "वन विसंगति" के लिए रैंडम फ़ॉरेस्ट का एक संस्करण है जिसे आइसोलेशन फॉरेस्ट्स कहा जाता है: cs.nju.edu.cn/zhouzh/zhouzh.files/publication/… आर में एक कार्यान्वयन था लेकिन मैं हूँ सुनिश्चित नहीं है कि यह अभी तक चल रहा है या नहीं।
JEquihua

जवाबों:


7

यह एक साल पुराना है, लेकिन मुझे अभी भी लगता है कि यह प्रासंगिक है, इसलिए मैं सिर्फ प्रिंसिपल फ़ीचर एनालिसिस (पीएफए) के अपने अजगर के कार्यान्वयन को साझा करना चाहता था, जैसा कि पेपर में प्रस्तावित था कि चार्ल्स अपने जवाब में जुड़ा हुआ था।

from sklearn.decomposition import PCA
from sklearn.cluster import KMeans
from collections import defaultdict
from sklearn.metrics.pairwise import euclidean_distances
from sklearn.preprocessing import StandardScaler

class PFA(object):
    def __init__(self, n_features, q=None):
        self.q = q
        self.n_features = n_features

    def fit(self, X):
        if not self.q:
            self.q = X.shape[1]

        sc = StandardScaler()
        X = sc.fit_transform(X)

        pca = PCA(n_components=self.q).fit(X)
        A_q = pca.components_.T

        kmeans = KMeans(n_clusters=self.n_features).fit(A_q)
        clusters = kmeans.predict(A_q)
        cluster_centers = kmeans.cluster_centers_

        dists = defaultdict(list)
        for i, c in enumerate(clusters):
            dist = euclidean_distances([A_q[i, :]], [cluster_centers[c, :]])[0][0]
            dists[c].append((i, dist))

        self.indices_ = [sorted(f, key=lambda x: x[1])[0][0] for f in dists.values()]
        self.features_ = X[:, self.indices_]

आप इसे इस तरह से उपयोग कर सकते हैं:

import numpy as np
X = np.random.random((1000,1000))

pfa = PFA(n_features=10)
pfa.fit(X)

# To get the transformed matrix
X = pfa.features_

# To get the column indices of the kept features
column_indices = pfa.indices_

यह लेख से वर्णित एल्गोरिदम का कड़ाई से पालन कर रहा है। मुझे लगता है कि विधि ने वादा किया है, लेकिन ईमानदारी से मुझे नहीं लगता कि यह बिना सुविधा वाले चयन के लिए सबसे मजबूत दृष्टिकोण है। अगर मैं कुछ बेहतर करूं तो मैं एक अपडेट पोस्ट करूंगा।


पेपर में वर्णित विधि में, चरण 1 को सह-मैट्रिक्स मैट्रिक्स की गणना करना है और चरण 2 चरण 1 से covariance मैट्रिक्स पर पीसीए की गणना करना है। मेरा मानना ​​है कि आपका fitफ़ंक्शन चरण 1 को छोड़ देता है, और मूल डेटासेट पर पीसीए निष्पादित करता है। ।
15:35 बजे user35581

@ user35581 अच्छी बात है। हालांकि, वे जो भी करते हैं (1) मूल डेटा से कोवरियन मैट्रिक्स का उत्पादन करते हैं और फिर (2) एसवीडी विधि का उपयोग करके कोवरियन मैट्रिक्स के आइगेनवेक्टर और ईजेनवेल्यूल्स की गणना करते हैं। संयुक्त उन दो चरणों को आप पीसीए कहते हैं। सिद्धांत घटक मूल डेटा के सहसंयोजक मैट्रिक्स के आइजनवेक्टर हैं।
उल्फ असलाक

@ यूफेल असलाक आप विस्तृत कर सकते हैं कि आपको क्यों लगता है कि यह अनसुना फीचर सुविधा के लिए सबसे मजबूत दृष्टिकोण नहीं है?
हिपोग्लुसीडो

1
@hipoglucido ईमानदारी से कहूं तो मैं अपने विचारों का हिसाब नहीं दे सकता जब मैंने ऐसा लिखा। यह तीन साल पहले की बात है। फिर से कोड की समीक्षा करते हुए, मुझे विश्वास है कि यह केमियंस (जो गैर-नियतात्मक है) के उपयोग के साथ कुछ करना है। इसके अलावा, मैं यह देखना चाहूंगा कि यह केवल गैर-पीसीए-रूपांतरित सुविधाओं को जोड़ने की तुलना कैसे करता है।
उल्फ असालक


1

प्रिंसिपल फ़ीचर एनालिसिस अनसर्वलाइज़्ड फ़ीचर सिलेक्शन का हल लगता है। यह इस पत्र में वर्णित है ।


लिंक मर चुका है। एक लेख लेख में प्रस्तावित विधि के अजगर कार्यान्वयन को साझा किया ।stackexchange.com/a/203978/76815
उल्फ असलाक

धन्यवाद, मैंने लिंक हटा दिया (इसे ऑफ-टॉपिक के रूप में हटा दिया गया था)।
मैक्स गनीस

0

मैं एक लिंक है जो उपयोगी हो सकता है मिल गया है, वे हैं matlab कार्यान्वयन, वे बाहर आप के लिए काम कर सकते हैं http://www.cad.zju.edu.cn/home/dengcai/Data/MCFS.html यह एक multicluster सुविधा चयन है विधि, आप हाल के पत्रों में इसके बारे में मजबूत नींव पा सकते हैं मुझे बताएं कि क्या यह आपके लिए काम करता है


0

में कई विकल्प उपलब्ध हैं R। देखने के लिए एक अच्छी जगह caretपैकेज है जो कई अन्य पैकेज और विकल्पों को एक अच्छा इंटरफ़ेस प्रदान करता है। आप यहां वेबसाइट पर एक नज़र डाल सकते हैं । वहाँ कई विकल्प हैं, लेकिन मैं एक का वर्णन करूँगा।

यहां R"mtcars" डेटासेट (नीचे दिखाया गया है) में निर्मित एक सरल फिल्टर का उपयोग करने का एक उदाहरण है ।

                   mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1

अब कुछ कोड सेटअप (लोडिंग पैकेज आदि):

# setup a parallel environment
library(doParallel)
cl <- makeCluster(2) # number of cores to use
registerDoParallel(cl)
library(caret)

और हम चर का चयन करने के लिए एक सरल मॉडल फिट कर सकते हैं:

fit1 <- sbf(mtcars[, -1], mtcars[, 1],
  sbfControl =
    sbfControl(functions = rfSBF, method = "repeatedcv", repeats = 10)
)

परिणाम देखते हुए, हम प्राप्त करते हैं:

fit1
Selection By Filter

Outer resampling method: Cross-Validated (10 fold, repeated 10 times) 

Resampling performance:

  RMSE Rsquared RMSESD RsquaredSD
 2.266   0.9224 0.8666     0.1523

Using the training set, 7 variables were selected:
   cyl, disp, hp, wt, vs...

During resampling, the top 5 selected variables (out of a possible 9):
   am (100%), cyl (100%), disp (100%), gear (100%), vs (100%)

On average, 7 variables were selected (min = 5, max = 9)

अंत में हम fit1$optVariablesपरिणाम के खिलाफ चयनित चर (में ) साजिश कर सकते हैं mpg:

library(ggplot2)
library(gridExtra)
do.call(grid.arrange, 
lapply(fit1$optVariables, function(v) {
  ggplot(mtcars, aes_string(x = v, y = "mpg")) +
    geom_jitter()
}))

इस ग्राफ में परिणाम: तितर बितर भूखंडों


1
जब से आप मॉडल का उपयोग करते हैं, तब तक यह ओपी के अनुरोध के अनुसार अप्रशिक्षित शिक्षा नहीं है mpg। क्या अनुपयोगी मॉडल में इन जैसी विधियों का उपयोग करने का कोई तरीका है?
मैक्स गनीस

0

nsprcompआर पैकेज विरल प्रधानाचार्य घटक विश्लेषण है, जो आपकी आवश्यकताओं के अनुरूप हो सकता है के लिए तरीकों प्रदान करता है।

उदाहरण के लिए, यदि आप मानते हैं कि आपकी विशेषताएं सामान्यतः सहसंबद्ध हैं, और शीर्ष पाँच का चयन करना चाहते हैं, तो आप अधिकतम पाँच सुविधाओं के साथ विरल PCA चला सकते हैं, और पहले प्रमुख घटक तक सीमित कर सकते हैं:

m <- nsprcomp(x, scale.=T, k=5, ncomp=1)
m$rotation[, 1]

वैकल्पिक रूप से, यदि आप सुविधाओं के ऑर्थोगोनल प्रकृति को कैप्चर करना चाहते हैं, तो आप प्रत्येक शीर्ष पीसी से प्रत्येक पीसी पर एक फीचर को सीमित करते हुए, शीर्ष पांच पीसी में से शीर्ष सुविधा का चयन कर सकते हैं:

m <- nsprcomp(x, scale.=T, k=1, ncomp=5)
m$rotation

इनमें से एक पहनावा उपयोगी भी हो सकता है; यानी, अलग-अलग तरीकों से लगातार शीर्ष पर आने वाले फीचर फीचर फ़ीचर में बड़ी मात्रा में विचरण की व्याख्या करते हैं। nsprcompएक बिट के साथ चारों ओर खेला जाता है , ऐसा लगता है कि पहले दो तरीके ऊपर की समान विशेषताओं के ~ 1/2 बढ़ाते हैं। इस प्रक्रिया को अनुकूलित करना एक अनुभवजन्य प्रयास हो सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.