2013-07-03 5 views
22

मैं आर में तंत्रिका नेटवर्क के साथ काम करना सीखने की कोशिश में हूं। एक सीखने की समस्या के रूप में, मेरे पास है पर Kaggle परपहली बार आर में तंत्रिका के साथ काम करना: "संख्यात्मक/जटिल मैट्रिक्स/वेक्टर तर्कों की आवश्यकता है"

चिंता न करें, यह समस्या विशेष रूप से लोगों के साथ सीखने के लिए डिज़ाइन की गई है, इसके साथ कोई इनाम बंधे नहीं है।

मैंने एक साधारण लॉजिस्टिक रिग्रेशन के साथ शुरुआत की, जो मेरे पैरों को गीला करने के लिए बहुत अच्छा था। अब मैं तंत्रिका नेटवर्क के साथ काम करना सीखना चाहता हूं। मेरे प्रशिक्षण डेटा की तरह इस लगता है (स्तंभ: पंक्ति):

- survived: 1 
- pclass: 3 
- sex:  male 
- age:  22.0 
- sibsp: 1 
- parch: 0 
- ticket: PC 17601 
- fare:  7.25 
- cabin: C85 
- embarked: S 

मेरे शुरुआती आर कोड इस तरह दिखता है:

> net <- neuralnet(survived ~ pclass + sex + age + sibsp + 
        parch + ticket + fare + cabin + embarked, 
        train, hidden=10, threshold=0.01) 

जब मैं कोड की इस पंक्ति को चलाने मैं निम्नलिखित त्रुटि मिलती है:

Error in neurons[[i]] %*% weights[[i]] : 
    requires numeric/complex matrix/vector arguments 

मैं समझता हूं कि समस्या यह है कि मैं अपने इनपुट चर प्रस्तुत कर रहा हूं लेकिन मैं यह समझने के लिए एक नौसिखिया हूं कि मुझे इसे सही करने के लिए क्या करना है। क्या कोई मदद कर सकता है?

धन्यवाद!

+2

पहले अपने डेटा को देखते हुए, मेरा मानना ​​है कि आपने सभी डेटा को संख्यात्मक मानों में परिवर्तित कर दिया है। E.g केबिन = सी 85, इसका क्या अर्थ है? यदि आप इस प्रकार के मानों को संख्यात्मक रूप से परिवर्तित करते हैं, तो आपकी समस्या का समाधान हो जाएगा। – user1471980

उत्तर

35

आँख बंद करके कंप्यूटर में डेटा देने से पहले, यह एक अच्छा विचार इस पर गौर करने के लिए है:

d <- read.csv("train.csv") 
str(d) 
# 'data.frame': 891 obs. of 12 variables: 
# $ PassengerId: int 1 2 3 4 5 6 7 8 9 10 ... 
# $ Survived : int 0 1 1 1 0 0 0 0 1 1 ... 
# $ Pclass  : int 3 1 3 1 3 3 1 3 3 2 ... 
# $ Name  : Factor w/ 891 levels "Abbing, Mr. Anthony",..: 109 191 358 277 16 559 520 629 417 581 ... 
# $ Sex  : Factor w/ 2 levels "female","male": 2 1 1 1 2 2 2 2 1 1 ... 
# $ Age  : num 22 38 26 35 35 NA 54 2 27 14 ... 
# $ SibSp  : int 1 1 0 1 0 0 0 3 0 1 ... 
# $ Parch  : int 0 0 0 0 0 0 0 1 2 0 ... 
# $ Ticket  : Factor w/ 681 levels "110152","110413",..: 524 597 670 50 473 276 86 396 345 133 ... 
# $ Fare  : num 7.25 71.28 7.92 53.1 8.05 ... 
# $ Cabin  : Factor w/ 148 levels "","A10","A14",..: 1 83 1 57 1 1 131 1 1 1 ... 
# $ Embarked : Factor w/ 4 levels "","C","Q","S": 4 2 4 4 4 3 4 4 4 2 ... 
summary(d) 

चर में से कुछ बहुत अधिक मान (कम से कम अपने पहले मॉडल में उपयोगी हो करने के लिए है): आप नाम, टिकट, केबिन और यात्री आईडी हटा सकते हैं। यदि आप अधिक अर्थपूर्ण हैं, तो आप कुछ संख्यात्मक चर (कहें, कक्षा) को कारकों, में भी बदलना चाहते हैं।

neuralnet के बाद से केवल मात्रात्मक चर के साथ सौदों, आप सभी गुणात्मक चर (कारक) बाइनरी ("डमी") चर, model.matrix समारोह के साथ परिवर्तित कर सकते हैं - यह बहुत दुर्लभ स्थितियों में से एक है जो आर आपके लिए परिवर्तन नहीं करता है।

m <- model.matrix( 
    ~ Survived + Pclass + Sex + Age + SibSp + Parch + Fare + Embarked, 
    data = d 
) 
head(m) 
library(neuralnet) 
r <- neuralnet( 
    Survived ~ Pclass + Sexmale + Age + SibSp + Parch + Fare + EmbarkedC + EmbarkedQ + EmbarkedS, 
    data=m, hidden=10, threshold=0.01 
) 
+1

धन्यवाद!यह बिल्कुल प्रतिक्रिया का प्रकार है जिसकी मैं उम्मीद कर रहा था। इस तरह के विवरण में जवाब देने के लिए समय निकालने के लिए धन्यवाद। – user2548029

+0

इसके लिए धन्यवाद! मेरे पास @VincentZoonekynd का कोई प्रश्न है, क्या यह निश्चित नियम है कि 'model.matrix' रूपांतरण पर कौन से चर लागू होते हैं? –

+1

@llorgge: सभी गुणात्मक चर, यानी, 'कारक' (या 'वर्ण') के प्रकार, को डमी चर में बदल दिया जाएगा। लेकिन चूंकि संख्यात्मक चर रखा जाता है, अप्रतिबंधित, आप वास्तव में सभी चर डाल सकते हैं। –

6

त्रुटि संदेश "संख्यात्मक/जटिल मैट्रिक्स/वेक्टर तर्क की आवश्यकता होती है" तब होती है जब आपके डेटा में कारक या चरित्र चर होते हैं। ,

  1. हटाएँ चर
  2. चर एक आदेश दिया कारक है, तो इसके बजाय पूर्णांक का उपयोग करें:

    इस समस्या को हल करने के तीन तरीके हैं।

  3. यदि चर वर्ण है, तो उसे कारक में परिवर्तित करें और फिर डमी चर में बदलें।

आप डमी चर में फर्क पड़ता हस्तांतरण करने के लिए nnet पैकेज से model.matrix() के ऊपर या class.ind() फ़ंक्शन का उल्लेख कर सकते हैं।

+0

यह आश्चर्य की बात है क्योंकि एसपीएसएस को आपको निर्दिष्ट बॉक्स में फैक्टर चर को अलग-अलग रखने की आवश्यकता है। – Espanta

संबंधित मुद्दे