在Python中为KNN使用Gower

2024-10-04 05:33:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个80k行的数据框,其中包含数字和分类数据。我用1k行和gower距离(具有“to_predict”值的行)来“训练”KNN,然后我想将剩余的79k行分配给定义的KNN模型(以完成“to_predict”值,该值最初为空)

在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

我猜这是因为我正在将panda结构转换为数组结构,然后在数组上迭代(缓存未命中)

有没有办法直接在Python中,通过熊猫的数据帧来实现这一点?或者有什么方法能有效地做到这一点

提前谢谢


Tags: to数据nonewdatadist时间predict