2015-05-19 5 views
19

को संभालें, मैं सोच रहा था कि क्लासिफायर हैं जो विज्ञान-सीख में नैन/शून्य मानों को संभालते हैं। मैंने सोचा कि यादृच्छिक वन regressor इसे संभालती है, लेकिन जब मैं predict पर कॉल करता हूं तो मुझे एक त्रुटि मिली।विज्ञान में क्लासिफायर-सीखें कि नैन/शून्य

X_train = np.array([[1, np.nan, 3],[np.nan, 5, 6]]) 
y_train = np.array([1, 2]) 
clf = RandomForestRegressor(X_train, y_train) 
X_test = np.array([7, 8, np.nan]) 
y_pred = clf.predict(X_test) # Fails! 

मैं मान अनुपलब्ध के साथ किसी भी scikit सीखने एल्गोरिथ्म के साथ भविष्यवाणी कॉल नहीं कर सकता?

संपादित करें। अब जब मैं इसके बारे में सोचता हूं, तो यह समझ में आता है। यह प्रशिक्षण के दौरान कोई मुद्दा नहीं है, लेकिन जब आप भविष्यवाणी करते हैं कि वेरिएबल शून्य होने पर आप कैसे शाखा बनाते हैं? हो सकता है कि आप दोनों तरीकों को विभाजित कर सकें और नतीजे औसत कर सकें? ऐसा लगता है कि के-एनएन को तब तक ठीक काम करना चाहिए जब तक कि दूरस्थ कार्य नल को अनदेखा करता है। हां/नहीं निर्णय और के लिए 1 बच्चे के लिए 2 बच्चों:

2 संपादित करें (पुराने और समझदार मुझे) (जैसे xgboost के रूप में) कुछ जीबीएम पुस्तकालयों एक त्रिगुट पेड़ के बजाय एक द्विआधारी पेड़ के ठीक इस उद्देश्य के लिए उपयोग करें लापता निर्णय sklearn using a binary tree

+0

मैं भी इस मुद्दे का सामना करना, मुझे लगता है कि आपको लगता है कि 'साथ nan' मूल्यों हटाने की जरूरत [इस वर्ग] (http://scikit-learn.org/stable/modules/preprocessing.html) भी झरना [यह] (http://www.markhneedham.com/blog/2013/11/09/python-making-scikit-learn-and-pandas-play-nice/) लेकिन मैं अभी भी इस मुद्दे को हल नहीं कर सकता। शायद [यह] (https://stackoverflow.com/questions/9365982/missing-values-in-scikits-machine-learning) मदद करेगा। – skwoi

+0

यहां समस्या यह है कि 'NaN' का प्रतिनिधित्व कैसे किया जाना चाहिए? यह एक आम मुद्दा है जिसमें आपको यह तय करने की आवश्यकता है कि उन्हें कैसे संभालना है, आप या तो उन्हें छोड़ सकते हैं या उन्हें औसत या कुछ अन्य इनडिटर मूल्य – EdChum

उत्तर

14

मैं एक उदाहरण है कि प्रशिक्षण में दोनों लापता मान हैं और परीक्षण सेट

मैं बस, मतलब के साथ लापता डेटा को बदलने के लिए Imputer वर्ग का उपयोग कर एक रणनीति उठाया बनाया है। अन्य रणनीतियों हैं।

from __future__ import print_function 

import numpy as np 
from sklearn.ensemble import RandomForestClassifier 
from sklearn.preprocessing import Imputer 

X_train = [[0, 0, np.nan], [np.nan, 1, 1]] 
Y_train = [0, 1] 
X_test_1 = [0, 0, np.nan] 
X_test_2 = [0, np.nan, np.nan] 
X_test_3 = [np.nan, 1, 1] 

# Create our imputer to replace missing values with the mean e.g. 
imp = Imputer(missing_values='NaN', strategy='mean', axis=0) 
imp = imp.fit(X_train) 

# Impute our data, then train 
X_train_imp = imp.transform(X_train) 
clf = RandomForestClassifier(n_estimators=10) 
clf = clf.fit(X_train_imp, Y_train) 

for X_test in [X_test_1, X_test_2, X_test_3]: 
    # Impute each test item, then predict 
    X_test_imp = imp.transform(X_test) 
    print(X_test, '->', clf.predict(X_test_imp)) 

# Results 
[0, 0, nan] -> [0] 
[0, nan, nan] -> [0] 
[nan, 1, 1] -> [1] 
+2

के साथ प्रतिस्थापित कर सकते हैं धन्यवाद! मुझे 'इंप्यूटर' वर्ग के बारे में पता नहीं था। – anthonybell

+9

जब आप वास्तव में लेबल हैं और निरंतर नहीं हैं तो आप मामले को कैसे संभालेंगे? –

+2

मैं वास्तव में यह देखने में रूचि रखूंगा कि वर्गीकरण डेटा के लिए अपमान कैसे काम करता है। – Vivek

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