মান মূল্য: ইনপুটটিতে NaN, অসীম বা dtype ('float32') এর জন্য খুব বড় মান রয়েছে


41

একটি র‌্যান্ডমফোরেস্ট মডেল ব্যবহার করে পরীক্ষার ডেটা পূর্বাভাস দেওয়ার সময় আমি ভ্যালুয়েরর পেয়েছি।

আমার কোড:

clf = RandomForestClassifier(n_estimators=10, max_depth=6, n_jobs=1, verbose=2)
clf.fit(X_fit, y_fit)

df_test.fillna(df_test.mean())
X_test = df_test.values  
y_pred = clf.predict(X_test)

ভূল:

ValueError: Input contains NaN, infinity or a value too large for dtype('float32').

টেস্ট ডেটাসেটে আমি কীভাবে খারাপ মানগুলি খুঁজে পাব? এছাড়াও, আমি এই রেকর্ডগুলি ফেলে দিতে চাই না, আমি কি কেবল তাদের গড় বা মধ্যমা দিয়ে প্রতিস্থাপন করতে পারি?

ধন্যবাদ।

উত্তর:


45

এস সহ np.isnan(X)অবস্থানের জন্য সত্যের সাথে আপনার বুলিয়ান মাস্ক ফিরে আসার সাথে NaN

np.where(np.isnan(X))আই, জেড NaNএস এর সমন্বয়কের সাথে আপনি একটি টুপল ফিরে পাবেন ।

অবশেষে, আপনার সাথে np.nan_to_num(X)"শূন্যের সাথে ন্যান প্রতিস্থাপন করুন এবং সীমাবদ্ধ সংখ্যার সাথে ইনফ" করুন।

বিকল্পভাবে, আপনি ব্যবহার করতে পারেন:

  • sklearn.impute.SimpleImputer গড় / মিসিং মানগুলির মধ্যম অভিব্যক্তির জন্য, বা
  • পান্ডাস ' pd.DataFrame(X).fillna(), জিরো দিয়ে ভরাট করা বাদে যদি আপনার অন্য কিছু প্রয়োজন হয়।

আমি নান পরীক্ষা করার জন্য পরিচয় শর্তটি পছন্দ করি, যদি x! = X ফিরে না আসে তবে অনেকবার এনপি.আইসানান (এক্স) আমার জন্য ব্যর্থ হয়েছিল, কারণটি মনে রাখবেন না
Itachi

1
শূন্যের সাথে NaN মানগুলি প্রতিস্থাপন করার পরামর্শ দেওয়া হয় না। এনএএন মানগুলি এখনও নিখোঁজ হওয়ার এবং এগুলি শূন্যের সাথে অঙ্কিত করার ক্ষেত্রে তাত্পর্যপূর্ণ হতে পারে সম্ভবত আপনি করতে পারেন এমন সবচেয়ে খারাপ জিনিস এবং আপনি ব্যবহার করেন এমন সবচেয়ে খারাপ প্রতিশ্রুতি পদ্ধতি। আপনি কেবল নির্বিচারে জিরোগুলি প্রবর্তন করবেন যা আপনার ভেরিয়েবলটিকে স্কিউ করতে পারে তবে 0 আপনার ভেরিয়েবলগুলিতে একটি গ্রহণযোগ্য মানও নাও হতে পারে, যার অর্থ আপনার ভেরিয়েবলের সত্যিকারের শূন্য নাও থাকতে পারে।
hussam

আমি বুঝতে পারি যে আমি কোনও নির্দেশনা সরবরাহ করি নি। আপনি যদি নিজের ডেটাটিকে .rolling()বোঝাতে চান তবে রোলিং উইন্ডোর গড় মান দিয়ে অনুপস্থিত মানটি প্রতিস্থাপন করতে কোনও রোলিং গড় ব্যবহার করুন use আপনি যদি আরও কিছু দৃ rob় ব্যবহারের মডিউল চান তবে <b> মিসপি </ b> আপনি MissForestএকটি এলোমেলো ভিত্তিক অনুমানের জন্য ব্যবহার করতে পারেন ।
hussam

7

ধরে X_testনেওয়া একটি পান্ডাস ডেটাফ্রেম, আপনি DataFrame.fillnaNaN মানগুলি প্রতিস্থাপন করতে ব্যবহার করতে পারেন :

X_test.fillna(X_test.mean())

এক্স_েস্ট হ'ল নমপি অ্যারে। আসল প্রশ্নে সবেমাত্র ডিএফ_এস্ট আপডেট হয়েছে, তবুও একই ত্রুটি পেয়েছে ...
এডামামে

6

এটি জুড়ে যে কারও জন্য, আসলটিকে আসল পরিবর্তনের জন্য:

X_test.fillna(X_train.mean(), inplace=True)

মূলটি ওভাররাইট করতে:

X_test = X_test.fillna(X_train.mean())

আপনি কোনও ভিউ বনাম কোনও অনুলিপিতে রয়েছেন কিনা তা পরীক্ষা করতে:

X_test._is_view

2
প্রযুক্তিগতভাবে এটি সত্য হলেও এটি ব্যবহারিকভাবে ভুল। আপনি এক্স_েস্ট এনএগুলি এক্স_েস্টের গড় দিয়ে পূরণ করতে পারবেন না, কারণ বাস্তব জীবনে আপনি যখন কোনও নমুনা পূর্বাভাস দিচ্ছেন তখন আপনার এক্স_স্টেটের অর্থ হবে না। আপনার এক্স-ট্রেনের অর্থটি ব্যবহার করা উচিত কারণ এটিই কেবল আপনার হাতে থাকা ডেটা (পরিস্থিতিগুলির 99% মধ্যে)
ওমরি 374

4

ভুলে যাবেন না

col_mask=df.isnull().any(axis=0) 

যা এনপ.নান মানগুলি নির্দেশ করে একটি বুলিয়ান মাস্ক প্রদান করে k

row_mask=df.isnull().any(axis=1)

এনপি.নান হাজির যেখানে সারিগুলি ফিরিয়ে দেয়। তারপরে সরল সূচিকাগুলি দ্বারা আপনি আপনার সমস্ত পয়েন্টকে পতাকাঙ্কিত করতে পারেন যা এনপি.নান।

df.loc[row_mask,col_mask]

2

আমি অনুরূপ সমস্যার মুখোমুখি হয়েছি এবং দেখেছি যে নম্পতি ন্যান এবং ইনফকে অন্যভাবে পরিচালনা করে।
যদি আপনার ডেটাতে ইনফ থাকে তবে তা চেষ্টা করুন:

np.where(x.values >= np.finfo(np.float64).max)
Where x is my pandas Dataframe 

এটি এমন জায়গাগুলির মূল অংশ দিবে যেখানে এনএ মান উপস্থিত রয়েছে।

যদি আপনার ডেটাতে ন্যান থাকে তবে তা চেষ্টা করুন:

np.isnan(x.values.any())

2

ইনফ মানগুলিও পরীক্ষা করতে ভুলবেন না। আমার পক্ষে কাজ করা একমাত্র জিনিস:

df[df==np.inf]=np.nan
df.fillna(df.mean(), inplace=True)

এবং আরও ভাল যদি আপনি স্ক্লার্ন ব্যবহার করছেন

def replace_missing_value(df, number_features):

    imputer = Imputer(strategy="median")
    df_num = df[number_features]
    imputer.fit(df_num)
    X = imputer.transform(df_num)
    res_def = pd.DataFrame(X, columns=df_num.columns)
    return res_def

যখন নাম্বার-ফিচারগুলি সংখ্যা_ফ্যাচার লেবেলের একটি অ্যারে হয়ে থাকে, উদাহরণস্বরূপ:

number_features = ['median_income', 'gdp']

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.