我正在尝试运行随机森林分类器,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)
您的代码有两个问题。
首先,当您从标签 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
作业是错误的(检查文档);它应该是
x_train, x_test, y_train, y_test = train_test_split(X,Y,test_size=0.3)