代码之家  ›  专栏  ›  技术社区  ›  Franco Piccolo

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

  •  1
  • Franco Piccolo  · 技术社区  · 5 年前

    sklearn 我应该把 target class 作为一个 integer or float ?会有什么不同吗?

    我问是因为我在训练 Neural Network 读入 this 将类强制转换为float的问题可能会导致问题。

    那么根据这个问题,我认为答案是 Integer 但我想知道这是不是真的,为什么。

    1 回复  |  直到 5 年前
        1
  •  1
  •   Luca Massaron    5 年前

    在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())