gpt4 book ai didi

python - 从多个均值向量求欧氏距离

转载 作者:行者123 更新时间:2023-11-30 21:57:47 25 4
gpt4 key购买 nike

这就是我正在尝试做的 - 我能够执行步骤 1 到 4。需要有关步骤 5 及以后的帮助

基本上对于每个数据点,我想根据y列找到与所有平均向量的欧氏距离

  1. 获取数据
  2. 分隔非数字列
  3. 按 y 列查找平均向量
  4. 保存手段
  5. 根据 y 值从每行中减去每个均值向量
  6. 对每列进行平方
  7. 添加所有列
  8. 连接回数值数据集,然后连接非数值列
import pandas as pd

data = [['Alex',10,5,0],['Bob',12,4,1],['Clarke',13,6,0],['brke',15,1,0]]
df = pd.DataFrame(data,columns=['Name','Age','weight','class'],dtype=float)
print (df)
df_numeric=df.select_dtypes(include='number')#, exclude=None)[source]
df_non_numeric=df.select_dtypes(exclude='number')
means=df_numeric.groupby('class').mean()

对于means的每一行,从df_numeric的每一行中减去该行。然后取输出中每列的平方,然后为每行添加所有列。然后将此数据连接回 df_numericdf_non_numeric

--------------更新1

添加了如下代码。我的问题已更改,更新的问题在最后。

def calculate_distance(row):
return (np.sum(np.square(row-means.head(1)),1))

def calculate_distance2(row):
return (np.sum(np.square(row-means.tail(1)),1))


df_numeric2=df_numeric.drop("class",1)
#np.sum(np.square(df_numeric2.head(1)-means.head(1)),1)
df_numeric2['distance0']= df_numeric.apply(calculate_distance, axis=1)
df_numeric2['distance1']= df_numeric.apply(calculate_distance2, axis=1)

print(df_numeric2)

final = pd.concat([df_non_numeric, df_numeric2], axis=1)
final["class"]=df["class"]

有人能确认这些是实现结果的正确方法吗?我主要担心的是最后两个说法。倒数第二个语句会正确连接吗?最终语句会分配原始的类吗?我想确认 python 不会以随机顺序进行连接和类分配,并且 python 将保持行出现的顺序

final = pd.concat([df_non_numeric, df_numeric2], axis=1)
final["class"]=df["class"]

最佳答案

我想这就是你想要的

import pandas as pd
import numpy as np
data = [['Alex',10,5,0],['Bob',12,4,1],['Clarke',13,6,0],['brke',15,1,0]]
df = pd.DataFrame(data,columns=['Name','Age','weight','class'],dtype=float)
print (df)
df_numeric=df.select_dtypes(include='number')#, exclude=None)[source]
# Make df_non_numeric a copy and not a view
df_non_numeric=df.select_dtypes(exclude='number').copy()

# Subtract mean (calculated using the transform function which preserves the
# number of rows) for each class to create distance to mean
df_dist_to_mean = df_numeric[['Age', 'weight']] - df_numeric[['Age', 'weight', 'class']].groupby('class').transform('mean')
# Finally calculate the euclidean distance (hypotenuse)
df_non_numeric['euc_dist'] = np.hypot(df_dist_to_mean['Age'], df_dist_to_mean['weight'])
df_non_numeric['class'] = df_numeric['class']
# If you want a separate dataframe named 'final' with the end result
df_final = df_non_numeric.copy()
print(df_final)

可能可以写得更密集,但这样你就会看到发生了什么。

关于python - 从多个均值向量求欧氏距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55148711/

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