发现样本数量不一致的输入变量:OHE
Found input variables with inconsistent numbers of samples: OHE
在分类标签编码中。我知道我需要使用 OneHotEncoder() 因为功能名称在测试中不同所以不能使用 pd_dummies。在火车中,我有 x 行,在测试中有 1 行,在 OHE 之后,测试行更短,我不知道如何将它与火车进行比较。
le = LabelEncoder()
dfle = df.apply(le.fit_transform)
X = dfle.values
ohe = OneHotEncoder(handle_unknown='ignore')
X = ohe.fit_transform(X).toarray()
le = LabelEncoder()
testle = test.apply(le.fit_transform)
y = testle.values
two = OneHotEncoder(handle_unknown='ignore')
y = two.fit_transform(y).toarray()
rf = RandomForestClassifier(n_estimators=100, random_state=0)
rf.fit(X, y)
rf.predict([[ ? ]])
X 和 y 的输出:
X:
[[0. 0. 1. 0. 0. 1. 0. 1. 0. 0. 1. 0. 1. 0. 0. 0. 1. 0. 0. 1. 0. 0. 1. 0.
0. 1.]
[0. 0. 0. 1. 0. 1. 0. 1. 0. 0. 1. 0. 0. 0. 1. 0. 0. 1. 0. 0. 1. 0. 0. 0.
1. 1.]
[0. 1. 0. 0. 0. 1. 0. 1. 1. 0. 0. 1. 0. 0. 0. 1. 0. 0. 1. 0. 0. 0. 0. 1.
0. 1.]
[1. 0. 0. 0. 1. 0. 1. 0. 0. 1. 0. 0. 0. 1. 0. 1. 0. 0. 0. 0. 0. 1. 0. 1.
0. 1.]]
y:
[[1. 1. 1. 1. 1. 1. 1. 1. 1.]]
首先,我认为您误解了 X
和 y
的意思。 X
代表你的特征,y
你的目标。它不同于 X_train
、X_test
、y_train
、y_test
。如果y
代表你的测试数据,你应该重命名它更清楚。
这里好像y
是你的测试数据:
In train I have x rows and in test 1 row
您应该使用您的第一个转换器(用于 X
)来转换(并且只转换,而不适合!)您的数据。
你不应该做的事情:
df1 = pd.DataFrame({'country': ['USA', 'France'], 'language': ['EN', 'FR']})
ohe = OneHotEncoder(sparse=False)
X_train = ohe.fit_transform(df1)
df2 = pd.DataFrame({'country': ['USA'], 'language': ['EN']})
ohe = OneHotEncoder(sparse=False)
X_test = ohe.fit_transform(df2)
# X_train
# array([[0., 1., 1., 0.],
# [1., 0., 0., 1.]])
# X_test
# array([[1., 1.]]) # shape differs from X_train
你应该做什么:
df1 = pd.DataFrame({'country': ['USA', 'France'], 'language': ['EN', 'FR']})
ohe = OneHotEncoder(sparse=False)
X_train = ohe.fit_transform(df1)
df2 = pd.DataFrame({'country': ['USA'], 'language': ['EN']})
X_test = ohe.transform(df2)
# X_train
# array([[0., 1., 1., 0.],
# [1., 0., 0., 1.]])
# X_test
# array([[0., 1., 1., 0.]]) # same shape as X_train
在分类标签编码中。我知道我需要使用 OneHotEncoder() 因为功能名称在测试中不同所以不能使用 pd_dummies。在火车中,我有 x 行,在测试中有 1 行,在 OHE 之后,测试行更短,我不知道如何将它与火车进行比较。
le = LabelEncoder()
dfle = df.apply(le.fit_transform)
X = dfle.values
ohe = OneHotEncoder(handle_unknown='ignore')
X = ohe.fit_transform(X).toarray()
le = LabelEncoder()
testle = test.apply(le.fit_transform)
y = testle.values
two = OneHotEncoder(handle_unknown='ignore')
y = two.fit_transform(y).toarray()
rf = RandomForestClassifier(n_estimators=100, random_state=0)
rf.fit(X, y)
rf.predict([[ ? ]])
X 和 y 的输出:
X:
[[0. 0. 1. 0. 0. 1. 0. 1. 0. 0. 1. 0. 1. 0. 0. 0. 1. 0. 0. 1. 0. 0. 1. 0.
0. 1.]
[0. 0. 0. 1. 0. 1. 0. 1. 0. 0. 1. 0. 0. 0. 1. 0. 0. 1. 0. 0. 1. 0. 0. 0.
1. 1.]
[0. 1. 0. 0. 0. 1. 0. 1. 1. 0. 0. 1. 0. 0. 0. 1. 0. 0. 1. 0. 0. 0. 0. 1.
0. 1.]
[1. 0. 0. 0. 1. 0. 1. 0. 0. 1. 0. 0. 0. 1. 0. 1. 0. 0. 0. 0. 0. 1. 0. 1.
0. 1.]]
y:
[[1. 1. 1. 1. 1. 1. 1. 1. 1.]]
首先,我认为您误解了 X
和 y
的意思。 X
代表你的特征,y
你的目标。它不同于 X_train
、X_test
、y_train
、y_test
。如果y
代表你的测试数据,你应该重命名它更清楚。
这里好像y
是你的测试数据:
In train I have x rows and in test 1 row
您应该使用您的第一个转换器(用于 X
)来转换(并且只转换,而不适合!)您的数据。
你不应该做的事情:
df1 = pd.DataFrame({'country': ['USA', 'France'], 'language': ['EN', 'FR']})
ohe = OneHotEncoder(sparse=False)
X_train = ohe.fit_transform(df1)
df2 = pd.DataFrame({'country': ['USA'], 'language': ['EN']})
ohe = OneHotEncoder(sparse=False)
X_test = ohe.fit_transform(df2)
# X_train
# array([[0., 1., 1., 0.],
# [1., 0., 0., 1.]])
# X_test
# array([[1., 1.]]) # shape differs from X_train
你应该做什么:
df1 = pd.DataFrame({'country': ['USA', 'France'], 'language': ['EN', 'FR']})
ohe = OneHotEncoder(sparse=False)
X_train = ohe.fit_transform(df1)
df2 = pd.DataFrame({'country': ['USA'], 'language': ['EN']})
X_test = ohe.transform(df2)
# X_train
# array([[0., 1., 1., 0.],
# [1., 0., 0., 1.]])
# X_test
# array([[0., 1., 1., 0.]]) # same shape as X_train