I am trying to combine two machine learning algorithm using stacking to achieve greater results but am failing in some of the aspects. Here's my code:
class Ensemble(threading.Thread): "Stacking with three Classification Models to improve the accuracy of Predictions" def init(self, X, Y, XT, YT, accLabel=None): threading.Thread.init(self) self.X = X self.Y = Y self.XT=XT self.YT=YT self.accLabel= accLabel
def Stacking(self,model,n_fold,train,test,y):
folds=StratifiedKFold(n_splits=n_fold,random_state=1)
test_pred=np.empty((test.shape[0],1),float)
train_pred=np.empty((0,1),float)
for train_indices,val_indices in folds.split(train,y):
x_train,x_val=train.iloc[train_indices],train.iloc[val_indices]
y_train,y_val=y.iloc[train_indices],y.iloc[val_indices]
model.fit(X=x_train,y=y_train)
train_pred=np.append(train_pred,model.predict(x_val))
test_pred=np.append(test_pred,model.predict(test))
return test_pred.reshape(-1,1),train_pred
def run(self):
X = np.zeros(self.X.shape)
Y = np.zeros(self.Y.shape)
XT = np.zeros(self.XT.shape)
YT = np.zeros(self.YT.shape)
np.copyto(X, self.X)
np.copyto(Y, self.Y)
np.copyto(XT, self.XT)
np.copyto(YT, self.YT)
model1 = tree.DecisionTreeClassifier(random_state=1)
n_fold=4
test_pred1 ,train_pred1=self.Stacking(model1, n_fold, X, XT, Y)
train_pred1=pd.DataFrame(train_pred1)
test_pred1=pd.DataFrame(test_pred1)
model2 = KNeighborsClassifier()
test_pred2 ,train_pred2=self.Stacking(model2, n_fold, X, XT, Y)
train_pred2=pd.DataFrame(train_pred2)
test_pred2=pd.DataFrame(test_pred2)
df = pd.concat([train_pred1, train_pred2], axis=1)
df_test = pd.concat([test_pred1, test_pred2], axis=1)
model = LogisticRegression(random_state=1)
model.fit(df,Y)
sd = model.score(df_test, YT)
acc = (sum(sd == YT) / len(YT) * 100)
print("Accuracy of Ensemble Learning Model is : %.2f" % acc+' %')
print('=' * 100)
if self.accLabel: self.accLabel.set("Accuracy of Ensembelance Learning: %.2f" % (acc)+' %')
The error is in 'iloc' inside Stacking method.
I have been constantly getting the error of np.ndarray has no attribute 'iloc'. I tried to search but couldn't find any specific link though I think this has something to do with iloc belonging to np.ndarray. If someone could please help me with this!!
.ilocis a Pandas dataframe method. BothXandYare just numpy arrays when you pass them intoStacking()so you cant callilocon themilocis apandasdataframe attribute. It means nothing innumpy. When you get anAttributeErrordon't just keep trying again. Check thetypeof the object, and check its docs. Most likely the object at that point is not what you intended it to be.