【发布时间】:2016-07-05 09:15:50
【问题描述】:
我们有这个 sci-py 代码:
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)
这是设计使然还是错误?如果这是一个错误,那么错误发生在哪里 - 哪个包?如果是设计使然,那么它记录在哪里?
【问题讨论】:
-
我不认为 sklearn 支持熊猫。它们一起工作的原因是数据帧是 numpy 数组的包装器。通过传递
test_df[['Age','Weight','Exercise']]和test_df[['Exercise','Weight', 'Age']],您实际上传递了两个不同的数组。在第二个中,sklearn 会将运动值作为年龄值。
标签: python pandas scikit-learn