我应该将目标类强制转换为float还是integer?

时间:2019-01-27 14:02:42

标签: python scikit-learn

sklearn中,我应该将target class转换为integer or float吗?会有所作为吗?

我之所以问是因为我正在训练Neural Network并读入this问题,即将一个类强制转换为float会导致问题。

然后根据这个问题,我认为答案是Integer,但我想知道是否是这种情况,为什么。

1 个答案:

答案 0 :(得分:1)

在Scikit学习中,将目标类强制转换为float或int类型(甚至是字符串,请参见:Is numerical encoding necessary for the target variable in classification?)都是无关紧要的,它们都被允许。您只需注意分类目标将与输入保持相同的类型,因此,如果您的输入是浮点类型,则将获得预测的浮点向量(请参见:https://scikit-learn.org/stable/tutorial/basic/tutorial.html#type-casting)。

在此示例中,您将直接验证KNeighborsClassifier将如何产生相同的类预测(但具有不同的数据类型,具体取决于目标类输入类型):

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier

data = load_iris()
(X_train, X_test, 
 y_train, y_test) = train_test_split(data.data,
                                     data.target,
                                     test_size=0.33,
                                     random_state=42)
neigh = KNeighborsClassifier(n_neighbors=3)

neigh.fit(X_train, y_train.astype(int))
int_preds = neigh.predict(X_test)

neigh.fit(X_train, y_train.astype(float))
float_preds = neigh.predict(X_test)

print(int_preds.dtype, float_preds.dtype)
print("Same classes:", (int_preds == float_preds).all())