Во-первых, я проверил различные сообщения об этой ошибке, и ни один из них не может решить мою проблему.
Итак, я использую RandomForest, и я могу сгенерировать лес и сделать прогноз, но иногда во время генерации леса я получаю следующую ошибку.
ValueError: Вход содержит NaN, бесконечность или значение, слишком большое для dtype ('float32').
Эта ошибка возникает с тем же набором данных. Иногда набор данных создает ошибку во время обучения и большую часть времени нет. Ошибка иногда возникает в начале, а иногда и в середине тренировки.
Вот мой код:
import pandas as pd
from sklearn import ensemble
import numpy as np
def azureml_main(dataframe1 = None, dataframe2 = None):
# Execution logic goes here
Input = dataframe1.values[:,:]
InputData = Input[:,:15]
InputTarget = Input[:,16:]
limitTrain = 2175
clf = ensemble.RandomForestClassifier(n_estimators = 10000, n_jobs = 4 );
features=np.empty([len(InputData),10])
j=0
for i in range (0,14):
if (i == 1 or i == 4 or i == 5 or i == 6 or i == 8 or i == 9 or i == 10 or i == 11 or i == 13 or i == 14):
features[:,j] = (InputData[:, i])
j += 1
clf.fit(features[:limitTrain,:],np.asarray(InputTarget[:limitTrain,1],dtype = np.float32))
res = clf.predict_proba(features[limitTrain+1:,:])
listreu = np.empty([len(res),5])
for i in range(len(res)):
if(res[i,0] > 0.5):
listreu[i,4] = 0;
elif(res[i,1] > 0.5):
listreu[i,4] = 1;
elif(res[i,2] > 0.5):
listreu[i,4] = 2;
else:
listreu[i,4] = 3;
listreu[:,0] = features[limitTrain+1:,0]
listreu[:,1] = InputData[limitTrain+1:,2]
listreu[:,2] = InputData[limitTrain+1:,3]
listreu[:,3] = features[limitTrain+1:,1]
# Return value must be of a sequence of pandas.DataFrame
return pd.DataFrame(listreu),
Я запускаю свой код локально и в Azure ML
Studio, и ошибка возникает в обоих случаях.
Я уверен, что это не связано с моим набором данных, так как большую часть времени я не получаю сообщение об ошибке и сам генерирую набор данных из другого входа.
Это часть набора данных, который я использую
EDIT Я, вероятно, обнаружил, что у меня было значение 0, которое не было реальным значением 0. Значения были как
3.0x10 ^ -314