在Python中将Gower用于KNN

问题描述 投票:0回答:1

我有一个包含数字和分类数据的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,然后我要分配...

python pandas data-science knn
1个回答
0
投票

我通常用sklearn.model_selection.train_test_split来设置测试/培训设置>

在同一行代码中很容易就得到两个:

© www.soinside.com 2019 - 2024. All rights reserved.