gpt4 book ai didi

python - kNN 分类器 - DataFrame 列顺序的重要性 - 这是 scikit 错误、pandas 错误还是设计使然?

转载 作者:行者123 更新时间:2023-11-28 17:26:49 24 4
gpt4 key购买 nike

我们有这个科学代码:

import pandas as pd
from sklearn.neighbors import KNeighborsClassifier

df = pd.DataFrame({'Category':['X','X','X','X','X','X','Y','Y','Y','Y','Y']
,'Age':[10,20,30,35,32,33,27,70,40,50,60]
,'Weight':[15,16,21,33,7,8,9,11,31,38,25]
,'Exercise':[2,0,0,1,7,6,9,11,2,0,5]})

classifier_3NN = KNeighborsClassifier(n_neighbors=3, metric='minkowski')

train_df = df[['Age','Weight','Exercise']]
target_ss = df['Category']

classifier_3NN.fit(train_df, target_ss)

test_df = pd.DataFrame({'Age':[11,27,39]
,'Weight':[21,9,36]
,'Exercise':[7,6,0]})

直觉上,我们希望能够以其数据帧的列的任意顺序将测试数据馈送到分类器中,算法将考虑列标题,但我们得到以下信息:

In [21]: classifier_3NN.predict(test_df[['Age','Weight','Exercise']])

Out[21]: array(['X', 'X', 'Y'], dtype=object)

当我交换顺序时:

In [22]: classifier_3NN.predict(test_df[['Exercise','Weight', 'Age']])

Out[22]: array(['X', 'X', 'X'], dtype=object)

这是设计使然还是错误?如果它是一个错误,那么错误发生在哪里 - 哪个包?如果是设计使然,那么它记录在哪里?

最佳答案

我不认为有错误,但我同意可以更好地记录它。您必须以正确的顺序提供数据框。

由于 scikit 是用 numpy 构建的,因此 Dataframe 被转换为 numpy 二维数组(这也在 fit 部分),并且它不保存标题顺序。

在继续执行算法之前,通过check_array 检查并转换数组,如果 dtype 没有问题,它基本上返回 numpy.array(thedataframe).

这发生在 utils.validation module .

关于python - kNN 分类器 - DataFrame 列顺序的重要性 - 这是 scikit 错误、pandas 错误还是设计使然?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38199537/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com