我试图在给定一组输入变量的情况下预测一个分类变量,这些输入变量也是分类的。目标和特征变量都只取类值[低于均值、均值、高于均值]。
我在目标和特征向量上都使用了 one-hot 编码,但我不确定这是否正确。
如果我有 2 个特征向量,我会在一次热编码后得到 2x3 列。例如,第一个实例可能是:
X[0] = [0,1,0, 1,0,0]
表示第一个特征具有平均值([0,1,0]),第二个特征低于平均值([1,0,0]),具有相应的目标
y[0] = [1,0,0]
表示目标低于平均值。
使用编码的 X 和 y,我尝试这样做:
svm_clf = SVC()
svm_clf.fit(X_train, y_train)
y_pred = svm_clf.predict(X_test)
但它给了我 'ValueError("bad input shape {0}".format(shape))'
我在下面给出了真实情况的输入和输出,其中输入有 9 个特征(编码后是 9x3 列)。错误消息表明“y”向量存在问题。
我应该对目标进行一次性编码吗?
我如何告诉分类器输出只能采用“单个值”,即目标中的 3 列不是独立的,因为它们都属于一个变量。例如,给定实例的输出不能是 [1,1,0],因为这表明它既是“低于平均值”又是“平均值”,这是不可能的。
我还尝试了一个运行正常的随机森林分类器,但结果并不合理,所以我认为我做错了什么,
输入功能:
X_train 类型:和形状:(872, 27) 和 head(5):
[[ 0. 1. 0. 1. 0. 0. 1. 0. 0. 1. 0. 0. 1. 0. 0. 1. 0. 0. 1. 0. 0. 1. 0. 0. 1. 0. 0.]
[ 0. 1. 0. 1. 0. 0. 1. 0. 0. 1. 0. 0. 1. 0. 0. 1. 0. 0. 1. 0. 0. 1. 0. 0. 1. 0. 0.]
[ 0. 1. 0. 0. 1. 0. 0. 1. 0. 1. 0. 0. 1. 0. 0. 1. 0. 0. 1. 0. 0. 1. 0. 0. 1. 0. 0.]
[ 1. 0. 0. 0. 0. 1. 1. 0. 0. 0. 0. 1. 1. 0. 0. 0. 0. 1. 0. 0. 1. 0. 0. 1. 1. 0. 0.]
[ 1. 0. 0. 1. 0. 0. 1. 0. 0. 1. 0. 0. 1. 0. 0. 1. 0. 0. 0. 0. 1. 0. 1. 0. 1. 0. 0.]]
目标:
y_train 类型:和形状:(872, 3) 和 head(5):
[[ 0. 0. 1.]
[ 0. 0. 1.]
[ 1. 0. 0.]
[ 0. 0. 1.]
[ 0. 1. 0.]]
错误信息:
File "analyse.py", line 287, in dummy_test
svm_clf.fit(X_train, y_train)
File "/usr/lib64/python3.6/site-packages/sklearn/svm/base.py", line 149, in fit
X, y = check_X_y(X, y, dtype=np.float64, order='C', accept_sparse='csr')
File "/usr/lib64/python3.6/site-packages/sklearn/utils/validation.py", line 578, in check_X_y
y = column_or_1d(y, warn=True)
File "/usr/lib64/python3.6/site-packages/sklearn/utils/validation.py", line 614, in column_or_1d
raise ValueError("bad input shape {0}".format(shape))
ValueError: bad input shape (872, 3)