我正在尝试使用随机森林构建一个预测模型,预测变量是CarName,特征是gas、rear和two。
CarName是一个分类变量,其余的是数值变量。在运行以下代码时遇到了这个错误,有人能帮我解决吗?提前谢谢,这里是我的代码。
snipets...from sklearn.model_selection import train_test_splitX=df6[['gas','rear','two']] #这些都是整数形式y=df6[['CarName']].values.reshape(-1,1) #这是对象形式X_train,X_test,y_test,y_train=train_test_split(X,y,test_size=0.2)from sklearn.ensemble import RandomForestClassifierclf=RandomForestClassifier(n_estimators=100)clf.fit(X_train,y_train)
我得到的错误是:
ValueError Traceback (most recent call last)<ipython-input-54-4c45187c84b2> in <module> 1 from sklearn.ensemble import RandomForestClassifier 2 clf=RandomForestClassifier(n_estimators=100)----> 3 clf.fit(X_train,y_train)/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/sklearn/ensemble/_forest.py in fit(self, X, y, sample_weight) 302 "sparse multilabel-indicator for y is not supported." 303 )--> 304 X, y = self._validate_data(X, y, multi_output=True, 305 accept_sparse="csc", dtype=DTYPE) 306 if sample_weight is not None:/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/sklearn/base.py in _validate_data(self, X, y, reset, validate_separately, **check_params) 431 y = check_array(y, **check_y_params) 432 else:--> 433 X, y = check_X_y(X, y, **check_params) 434 out = X, y 435 /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/sklearn/utils/validation.py in inner_f(*args, **kwargs) 61 extra_args = len(args) - len(all_args) 62 if extra_args <= 0:---> 63 return f(*args, **kwargs) 64 65 # extra_args > 0/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/sklearn/utils/validation.py in check_X_y(X, y, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, multi_output, ensure_min_samples, ensure_min_features, y_numeric, estimator) 829 y = y.astype(np.float64) 830 --> 831 check_consistent_length(X, y) 832 833 return X, y/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/sklearn/utils/validation.py in check_consistent_length(*arrays) 260 uniques = np.unique(lengths) 261 if len(uniques) > 1:--> 262 raise ValueError("Found input variables with inconsistent numbers of" 263 " samples: %r" % [int(l) for l in lengths]) 264 ValueError: Found input variables with inconsistent numbers of samples: [164, 41]
我的数据框的形状是:
X_train.shape,y_train.shape Out[53]: ((164, 3), (41, 1)) #我猜这是导致错误的代码,但我无法解决
回答:
你得到的错误是因为这个:
X_train,X_test,y_test,y_train=train_test_split(X,y,test_size=0.2)
根据train_test_split的返回值,值的映射顺序是这样的:
X_train,X_test,y_train,y_test
即y_train在y_test之后,因此造成了形状不匹配。只要更改这一点,就可以正常工作了。