python - विशिष्ट और संख्यात्मक विशेषताएं-सामान्य लक्ष्य-स्किकिट लर्न-पायथन




scikit-learn target (2)

मेरे पास एक डेटा सेट है जिसमें दोनों स्पष्ट और संख्यात्मक स्तंभ हैं और मेरा लक्ष्य कॉलम भी स्पष्ट है। मैं Python34 में Scikit पुस्तकालय का उपयोग कर रहा हूँ। मुझे पता है कि किसी भी मशीन सीखने के दृष्टिकोण से पहले, विज्ञानिक गणित के सभी मूल्यों को बदलना चाहिए।

मुझे अपने स्पष्ट कॉलम को संख्यात्मक मानों में कैसे रूपांतरित करना चाहिए? मैंने बहुत सी चीजों की कोशिश की लेकिन मुझे अलग-अलग त्रुटियां मिल रही हैं जैसे "स्ट्र" ऑब्जेक्ट के पास कोई 'मैक्सी' नहीं है। एंडरॉय ऑब्जेक्ट में कोई विशेषता नहीं है 'मद'

Here is an example of my data:
 UserID  LocationID   AmountPaid    ServiceID   Target
 29876      IS345       23.9876      FRDG        JFD
 29877      IS712       135.98       WERS        KOI

मेरा डेटासेट एक CSV फ़ाइल में सहेजा जाता है, यहां एक छोटा कोड है जिसे मैंने आपको यह विचार दिया है कि मैं क्या करना चाहता हूं:

#reading my csv file
data_dir = 'C:/Users/davtalab/Desktop/data/'
train_file = data_dir + 'train.csv'
train = pd.read_csv( train_file )

#numeric columns:
x_numeric_cols = train['AmountPaid']

#Categrical columns:
categorical_cols = ['UserID' + 'LocationID' + 'ServiceID']
x_cat_cols = train[categorical_cols].as_matrix() 


y_target = train['Target'].as_matrix() 

मुझे x_cat_cols की आवश्यकता होती है जो कि संख्यात्मक मानों में परिवर्तित की जाती है और उन्हें x_numeric_cols में जोड़ें और इसलिए मेरे पूर्ण इनपुट (x) मान हैं I

तब मुझे अपने लक्ष्य फ़ंक्शन को संख्यात्मक मान में रूपांतरित करना होगा और इसे मेरे अंतिम लक्ष्य (y) कॉलम के रूप में बनाना होगा।

फिर मैं इन दो पूर्ण सेटों का उपयोग करके एक यादृच्छिक वन बनाना चाहता हूं:

rf = RF(n_estimators=n_trees,max_features=max_features,verbose =verbose, n_jobs =n_jobs)
rf.fit( x_train, y_train )

आपकी सहायताके लिए धन्यवाद!


इसका कारण यह था कि मैं डेटा को बताता हूं। अगर मैं डेटा प्रिंट करता हूं (दूसरे नमूने का उपयोग कर) तो आप देखेंगे:

>>> import pandas as pd
>>> train = pd.DataFrame({'a' : ['a', 'b', 'a'], 'd' : ['e', 'e', 'f'],
...                       'b' : [0, 1, 1], 'c' : ['b', 'c', 'b']})
>>> samples = [dict(enumerate(sample)) for sample in train]
>>> samples
[{0: 'a'}, {0: 'b'}, {0: 'c'}, {0: 'd'}]

यह लेखों की एक सूची है इसके बजाय हमें यह करना चाहिए:

    >>> train_as_dicts = [dict(r.iteritems()) for _, r in train.iterrows()]
    >>> train_as_dicts
    [{'a': 'a', 'c': 'b', 'b': 0, 'd': 'e'},
     {'a': 'b', 'c': 'c', 'b': 1, 'd': 'e'},
     {'a': 'a', 'c': 'b', 'b': 1, 'd': 'f'}]
Now we need to vectorize the dicts:

>>> from sklearn.feature_extraction import DictVectorizer

>>> vectorizer = DictVectorizer()
>>> vectorized_sparse = vectorizer.fit_transform(train_as_dicts)
>>> vectorized_sparse
<3x7 sparse matrix of type '<type 'numpy.float64'>'
    with 12 stored elements in Compressed Sparse Row format>

>>> vectorized_array = vectorized_sparse.toarray()
>>> vectorized_array
array([[ 1.,  0.,  0.,  1.,  0.,  1.,  0.],
       [ 0.,  1.,  1.,  0.,  1.,  1.,  0.],
       [ 1.,  0.,  1.,  1.,  0.,  0.,  1.]])
To get the meaning of each column, ask the vectorizer:

>>> vectorizer.get_feature_names()
['a=a', 'a=b', 'b', 'c=b', 'c=c', 'd=e', 'd=f']

लक्ष्य के लिए, आप स्केलेर्न के लेबलएंकोडर का उपयोग कर सकते हैं। यह आपको स्ट्रिंग लेबल से संख्यात्मक वाले (और भी एक रिवर्स मैपिंग) कनवर्टर देगा। लिंक में उदाहरण

विशेषताओं के लिए, आम तौर पर उम्मीदवारों में एल्गोरिदम सीखना (या सबसे बेहतर काम) क्रमिक डेटा। इसलिए सबसे बेहतरीन विकल्प है कि वनहोट एन्कोडर का उपयोग सीधा सुविधाओं में परिवर्तित करने के लिए करें। यह प्रत्येक श्रेणी के लिए एक नई बाइनरी सुविधा उत्पन्न करेगा, प्रत्येक श्रेणी के लिए चालू / बंद होगा। दोबारा, लिंक में उपयोग उदाहरण





categorical-data