如何确定标签数量与样本数量不符?

时间:2019-01-07 21:51:08

标签: python pandas numpy machine-learning scikit-learn

我正在尝试运行随机森林分类器,在test_train_split之后,当我运行它时会产生一个错误,即样本数与样本不匹配。 我有960行26列。

X=pd.read_csv('csv',delimiter=',',sep=",",quotechar='"',header=None,quoting=2,error_bad_lines=False,na_values="")
X=X.drop([0,2,4,5],axis=1)
X= X.fillna('')
X= X[0:961].astype("int")
features= X.columns
Y= X[27] #my labels
Y= Y[0:961].astype("int") # Converting datatype string to int
Y=Y[np.isfinite(X[27])] # Remove NAN values from my label Y
x_train,y_train,x_test,y_test=train_test_split(X,Y,test_size=0.3)
clf = RandomForestClassifier(n_estimators=50,max_depth=3)
clf.fit(x_train,y_train)

1 个答案:

答案 0 :(得分:2)

您的代码有两个问题。

第一个是,当您从标签Y中删除NaN值时:

Y=Y[np.isfinite(X[27])] # Remove NAN values from my label Y

您对功能X所做的不同;因此,对于特征X和标签Y,最终得到了不同数量的样本,而train_test_split给出了预期的误差。

由于您已从Y中删除了NaN值,因此将各行保留在X中是没有意义的;因此,您应该添加

X=X[np.isfinite(X[27])] # remove rows with NaN labels

第二个问题是您的train_test_split分配错误(请检查docs);应该是

x_train, x_test, y_train, y_test = train_test_split(X,Y,test_size=0.3)