我有一个包含数字和分类数据的80k行的数据框。我“训练”了只有1k行和行距(具有“ to_predict”值的行)的KNN,然后我想将剩余的79k行分配给已定义的knn模型(以完成“ to_predict”值,最初为null)。
在R中,我能够在合理的时间内完成此操作,但是问题出现在Python中,它需要无限的时间:
knnsize = 1000
data_knn1 = data.iloc[random.sample(range(0,len(data)),knnsize),:]
data_knn1_no = data_knn1.drop(['to_predict'], axis = 1)
data_knn1_with = data_knn1[['to_predict']]
data_knn2_no = data.loc[data['to_predict'].isna()]
data_knn2_no = data_knn2_no.drop(['to_predict'], axis = 1)
data_gower = data_knn1_no.append(data_knn2_no)
dist_matrix = gower.gower_matrix(np.asarray(data_gower))
indknn = []
for j in range(0,len(dist_matrix.columns)):
indknn.append(np.where(dist_matrix.iloc[:,j]==min(dist_matrix.iloc[:,j])))
new_data = data_knn1con.iloc[indknn,:]
new_data = new_data[['to_predict']]
data.loc[data['to_predict'].isna(),['to_predict']] = new_data
我猜是因为我正在将熊猫结构转换为数组结构,然后遍历数组(缓存未命中)。
是否有任何方法可以直接在Python上通过熊猫的数据帧执行此操作?或任何有效地做到这一点的方式???
提前感谢
我有一个包含数字和分类数据的80k行的数据框。我“训练”只有1k行和行距(具有“ to_predict”值的行)的KNN,然后我要分配...
我通常用sklearn.model_selection.train_test_split来设置测试/培训设置>
在同一行代码中很容易就得到两个: